From 5cb1fe00423a7fe4997596bf0f3ccd6e0668ec19 Mon Sep 17 00:00:00 2001 From: Sergio Martin Date: Sun, 21 Apr 2024 17:34:54 +0200 Subject: [PATCH] Update Genesis Plus GX Core (#3889) * Added deep freeze functionality * Adding support for selecting sound chip * Adding LUA interface to the deepfreeze list * Implemented sprite always on top in the VDP * Found and fixed the issue that manifested itself in a reset Gargoyles and an outright fail in Ristar. The issue was the use of a union type containing overlapping cd and cartdrige data. Using struct now to keep them separated * Fix PC reg in tracelogs --------- Co-authored-by: feos Co-authored-by: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> --- .gitmodules | 4 + Assets/dll/gpgx.wbx.zst | Bin 326739 -> 347855 bytes .../lua/LuaHelperLibs/GenesisLuaLibrary.cs | 20 +- .../Consoles/Sega/gpgx64/GPGX.ISettable.cs | 12 + .../Consoles/Sega/gpgx64/GPGX.cs | 21 +- .../Consoles/Sega/gpgx64/LibGPGX.cs | 22 + src/BizHawk.Emulation.Cores/CoreNames.cs | 2 +- waterbox/gpgx/.vscode/settings.json | 9 - waterbox/gpgx/Genesis-Plus-GX | 1 + waterbox/gpgx/Makefile | 84 +- waterbox/gpgx/cinterface/callbacks.h | 3 +- waterbox/gpgx/cinterface/cddImpl.c | 524 + waterbox/gpgx/cinterface/cinterface.c | 300 +- waterbox/gpgx/core/cart_hw/areplay.c | 319 - waterbox/gpgx/core/cart_hw/areplay.h | 52 - waterbox/gpgx/core/cart_hw/eeprom_93c.c | 249 - waterbox/gpgx/core/cart_hw/eeprom_93c.h | 72 - waterbox/gpgx/core/cart_hw/eeprom_i2c.c | 583 - waterbox/gpgx/core/cart_hw/eeprom_i2c.h | 86 - waterbox/gpgx/core/cart_hw/eeprom_spi.c | 337 - waterbox/gpgx/core/cart_hw/eeprom_spi.h | 71 - waterbox/gpgx/core/cart_hw/ggenie.c | 283 - waterbox/gpgx/core/cart_hw/ggenie.h | 51 - waterbox/gpgx/core/cart_hw/md_cart.c | 2101 -- waterbox/gpgx/core/cart_hw/md_cart.h | 88 - waterbox/gpgx/core/cart_hw/sms_cart.c | 1324 - waterbox/gpgx/core/cart_hw/sms_cart.h | 54 - waterbox/gpgx/core/cart_hw/sram.c | 265 - waterbox/gpgx/core/cart_hw/sram.h | 65 - .../gpgx/core/cart_hw/svp/imageformat.txt | 68 - waterbox/gpgx/core/cart_hw/svp/ssp16.c | 1333 - waterbox/gpgx/core/cart_hw/svp/ssp16.h | 79 - waterbox/gpgx/core/cart_hw/svp/svp.c | 83 - waterbox/gpgx/core/cart_hw/svp/svp.h | 30 - waterbox/gpgx/core/cart_hw/svp/svpdoc.txt | 524 - waterbox/gpgx/core/cd_hw/cd_cart.c | 271 - waterbox/gpgx/core/cd_hw/cd_cart.h | 51 - waterbox/gpgx/core/cd_hw/cdc.c | 636 - waterbox/gpgx/core/cd_hw/cdc.h | 69 - waterbox/gpgx/core/cd_hw/cdd.c | 791 - waterbox/gpgx/core/cd_hw/cdd.h | 110 - waterbox/gpgx/core/cd_hw/gfx.c | 685 - waterbox/gpgx/core/cd_hw/gfx.h | 115 - waterbox/gpgx/core/cd_hw/pcm.c | 406 - waterbox/gpgx/core/cd_hw/pcm.h | 77 - waterbox/gpgx/core/cd_hw/scd.c | 1408 - waterbox/gpgx/core/cd_hw/scd.h | 88 - waterbox/gpgx/core/genesis.c | 540 - waterbox/gpgx/core/genesis.h | 77 - waterbox/gpgx/core/hvc.h | 652 - waterbox/gpgx/core/input_hw/activator.c | 134 - waterbox/gpgx/core/input_hw/activator.h | 49 - waterbox/gpgx/core/input_hw/gamepad.c | 234 - waterbox/gpgx/core/input_hw/gamepad.h | 57 - waterbox/gpgx/core/input_hw/input.c | 374 - waterbox/gpgx/core/input_hw/input.h | 156 - waterbox/gpgx/core/input_hw/lightgun.c | 265 - waterbox/gpgx/core/input_hw/lightgun.h | 51 - waterbox/gpgx/core/input_hw/mouse.c | 159 - waterbox/gpgx/core/input_hw/mouse.h | 47 - waterbox/gpgx/core/input_hw/paddle.c | 111 - waterbox/gpgx/core/input_hw/paddle.h | 49 - waterbox/gpgx/core/input_hw/sportspad.c | 134 - waterbox/gpgx/core/input_hw/sportspad.h | 49 - waterbox/gpgx/core/input_hw/teamplayer.c | 177 - waterbox/gpgx/core/input_hw/teamplayer.h | 50 - waterbox/gpgx/core/input_hw/terebi_oekaki.c | 77 - waterbox/gpgx/core/input_hw/terebi_oekaki.h | 47 - waterbox/gpgx/core/input_hw/xe_a1p.c | 182 - waterbox/gpgx/core/input_hw/xe_a1p.h | 49 - waterbox/gpgx/core/io_ctrl.c | 595 - waterbox/gpgx/core/io_ctrl.h | 68 - waterbox/gpgx/core/loadrom.c | 1144 - waterbox/gpgx/core/loadrom.h | 75 - waterbox/gpgx/core/m68k/m68k.h | 389 - waterbox/gpgx/core/m68k/m68kconf.h | 93 - waterbox/gpgx/core/m68k/m68kcpu.c | 446 - waterbox/gpgx/core/m68k/m68kcpu.h | 1453 - waterbox/gpgx/core/m68k/m68ki_cycles.h | 4099 --- .../core/m68k/m68ki_instruction_jump_table.h | 8195 ----- waterbox/gpgx/core/m68k/m68kops.h | 25461 ---------------- waterbox/gpgx/core/m68k/readme.txt | 315 - waterbox/gpgx/core/m68k/s68kconf.h | 93 - waterbox/gpgx/core/m68k/s68kcpu.c | 349 - waterbox/gpgx/core/m68k/s68ki_cycles.h | 4099 --- waterbox/gpgx/core/macros.h | 49 - waterbox/gpgx/core/mem68k.c | 1365 - waterbox/gpgx/core/mem68k.h | 77 - waterbox/gpgx/core/membnk.c | 322 - waterbox/gpgx/core/membnk.h | 58 - waterbox/gpgx/core/memz80.c | 682 - waterbox/gpgx/core/memz80.h | 60 - waterbox/gpgx/core/ntsc/changes.txt | 96 - waterbox/gpgx/core/ntsc/license.txt | 504 - waterbox/gpgx/core/ntsc/md_ntsc.c | 143 - waterbox/gpgx/core/ntsc/md_ntsc.h | 154 - waterbox/gpgx/core/ntsc/md_ntsc_config.h | 31 - waterbox/gpgx/core/ntsc/md_ntsc_impl.h | 439 - waterbox/gpgx/core/ntsc/readme.txt | 58 - waterbox/gpgx/core/ntsc/sms_ntsc.c | 141 - waterbox/gpgx/core/ntsc/sms_ntsc.h | 154 - waterbox/gpgx/core/ntsc/sms_ntsc.txt | 119 - waterbox/gpgx/core/ntsc/sms_ntsc_config.h | 31 - waterbox/gpgx/core/ntsc/sms_ntsc_impl.h | 439 - waterbox/gpgx/core/shared.h | 34 - waterbox/gpgx/core/sound/blip_buf.c | 405 - waterbox/gpgx/core/sound/blip_buf.h | 74 - waterbox/gpgx/core/sound/eq.c | 132 - waterbox/gpgx/core/sound/eq.h | 67 - waterbox/gpgx/core/sound/sn76489.c | 451 - waterbox/gpgx/core/sound/sn76489.h | 23 - waterbox/gpgx/core/sound/sound.c | 233 - waterbox/gpgx/core/sound/sound.h | 53 - waterbox/gpgx/core/sound/ym2413.c | 1722 -- waterbox/gpgx/core/sound/ym2413.h | 23 - waterbox/gpgx/core/sound/ym2612.c | 2126 -- waterbox/gpgx/core/sound/ym2612.h | 28 - waterbox/gpgx/core/system.c | 1385 - waterbox/gpgx/core/system.h | 119 - waterbox/gpgx/core/types.h | 34 - waterbox/gpgx/core/vdp_ctrl.c | 3215 -- waterbox/gpgx/core/vdp_ctrl.h | 108 - waterbox/gpgx/core/vdp_render.c | 4277 --- waterbox/gpgx/core/vdp_render.h | 91 - waterbox/gpgx/core/z80/osd_cpu.h | 47 - waterbox/gpgx/core/z80/z80.c | 3511 --- waterbox/gpgx/core/z80/z80.h | 74 - waterbox/gpgx/util/osd.h | 91 +- waterbox/linkscript.T | 10 +- 129 files changed, 974 insertions(+), 86701 deletions(-) delete mode 100644 waterbox/gpgx/.vscode/settings.json create mode 160000 waterbox/gpgx/Genesis-Plus-GX create mode 100644 waterbox/gpgx/cinterface/cddImpl.c delete mode 100644 waterbox/gpgx/core/cart_hw/areplay.c delete mode 100644 waterbox/gpgx/core/cart_hw/areplay.h delete mode 100644 waterbox/gpgx/core/cart_hw/eeprom_93c.c delete mode 100644 waterbox/gpgx/core/cart_hw/eeprom_93c.h delete mode 100644 waterbox/gpgx/core/cart_hw/eeprom_i2c.c delete mode 100644 waterbox/gpgx/core/cart_hw/eeprom_i2c.h delete mode 100644 waterbox/gpgx/core/cart_hw/eeprom_spi.c delete mode 100644 waterbox/gpgx/core/cart_hw/eeprom_spi.h delete mode 100644 waterbox/gpgx/core/cart_hw/ggenie.c delete mode 100644 waterbox/gpgx/core/cart_hw/ggenie.h delete mode 100644 waterbox/gpgx/core/cart_hw/md_cart.c delete mode 100644 waterbox/gpgx/core/cart_hw/md_cart.h delete mode 100644 waterbox/gpgx/core/cart_hw/sms_cart.c delete mode 100644 waterbox/gpgx/core/cart_hw/sms_cart.h delete mode 100644 waterbox/gpgx/core/cart_hw/sram.c delete mode 100644 waterbox/gpgx/core/cart_hw/sram.h delete mode 100644 waterbox/gpgx/core/cart_hw/svp/imageformat.txt delete mode 100644 waterbox/gpgx/core/cart_hw/svp/ssp16.c delete mode 100644 waterbox/gpgx/core/cart_hw/svp/ssp16.h delete mode 100644 waterbox/gpgx/core/cart_hw/svp/svp.c delete mode 100644 waterbox/gpgx/core/cart_hw/svp/svp.h delete mode 100644 waterbox/gpgx/core/cart_hw/svp/svpdoc.txt delete mode 100644 waterbox/gpgx/core/cd_hw/cd_cart.c delete mode 100644 waterbox/gpgx/core/cd_hw/cd_cart.h delete mode 100644 waterbox/gpgx/core/cd_hw/cdc.c delete mode 100644 waterbox/gpgx/core/cd_hw/cdc.h delete mode 100644 waterbox/gpgx/core/cd_hw/cdd.c delete mode 100644 waterbox/gpgx/core/cd_hw/cdd.h delete mode 100644 waterbox/gpgx/core/cd_hw/gfx.c delete mode 100644 waterbox/gpgx/core/cd_hw/gfx.h delete mode 100644 waterbox/gpgx/core/cd_hw/pcm.c delete mode 100644 waterbox/gpgx/core/cd_hw/pcm.h delete mode 100644 waterbox/gpgx/core/cd_hw/scd.c delete mode 100644 waterbox/gpgx/core/cd_hw/scd.h delete mode 100644 waterbox/gpgx/core/genesis.c delete mode 100644 waterbox/gpgx/core/genesis.h delete mode 100644 waterbox/gpgx/core/hvc.h delete mode 100644 waterbox/gpgx/core/input_hw/activator.c delete mode 100644 waterbox/gpgx/core/input_hw/activator.h delete mode 100644 waterbox/gpgx/core/input_hw/gamepad.c delete mode 100644 waterbox/gpgx/core/input_hw/gamepad.h delete mode 100644 waterbox/gpgx/core/input_hw/input.c delete mode 100644 waterbox/gpgx/core/input_hw/input.h delete mode 100644 waterbox/gpgx/core/input_hw/lightgun.c delete mode 100644 waterbox/gpgx/core/input_hw/lightgun.h delete mode 100644 waterbox/gpgx/core/input_hw/mouse.c delete mode 100644 waterbox/gpgx/core/input_hw/mouse.h delete mode 100644 waterbox/gpgx/core/input_hw/paddle.c delete mode 100644 waterbox/gpgx/core/input_hw/paddle.h delete mode 100644 waterbox/gpgx/core/input_hw/sportspad.c delete mode 100644 waterbox/gpgx/core/input_hw/sportspad.h delete mode 100644 waterbox/gpgx/core/input_hw/teamplayer.c delete mode 100644 waterbox/gpgx/core/input_hw/teamplayer.h delete mode 100644 waterbox/gpgx/core/input_hw/terebi_oekaki.c delete mode 100644 waterbox/gpgx/core/input_hw/terebi_oekaki.h delete mode 100644 waterbox/gpgx/core/input_hw/xe_a1p.c delete mode 100644 waterbox/gpgx/core/input_hw/xe_a1p.h delete mode 100644 waterbox/gpgx/core/io_ctrl.c delete mode 100644 waterbox/gpgx/core/io_ctrl.h delete mode 100644 waterbox/gpgx/core/loadrom.c delete mode 100644 waterbox/gpgx/core/loadrom.h delete mode 100644 waterbox/gpgx/core/m68k/m68k.h delete mode 100644 waterbox/gpgx/core/m68k/m68kconf.h delete mode 100644 waterbox/gpgx/core/m68k/m68kcpu.c delete mode 100644 waterbox/gpgx/core/m68k/m68kcpu.h delete mode 100644 waterbox/gpgx/core/m68k/m68ki_cycles.h delete mode 100644 waterbox/gpgx/core/m68k/m68ki_instruction_jump_table.h delete mode 100644 waterbox/gpgx/core/m68k/m68kops.h delete mode 100644 waterbox/gpgx/core/m68k/readme.txt delete mode 100644 waterbox/gpgx/core/m68k/s68kconf.h delete mode 100644 waterbox/gpgx/core/m68k/s68kcpu.c delete mode 100644 waterbox/gpgx/core/m68k/s68ki_cycles.h delete mode 100644 waterbox/gpgx/core/macros.h delete mode 100644 waterbox/gpgx/core/mem68k.c delete mode 100644 waterbox/gpgx/core/mem68k.h delete mode 100644 waterbox/gpgx/core/membnk.c delete mode 100644 waterbox/gpgx/core/membnk.h delete mode 100644 waterbox/gpgx/core/memz80.c delete mode 100644 waterbox/gpgx/core/memz80.h delete mode 100644 waterbox/gpgx/core/ntsc/changes.txt delete mode 100644 waterbox/gpgx/core/ntsc/license.txt delete mode 100644 waterbox/gpgx/core/ntsc/md_ntsc.c delete mode 100644 waterbox/gpgx/core/ntsc/md_ntsc.h delete mode 100644 waterbox/gpgx/core/ntsc/md_ntsc_config.h delete mode 100644 waterbox/gpgx/core/ntsc/md_ntsc_impl.h delete mode 100644 waterbox/gpgx/core/ntsc/readme.txt delete mode 100644 waterbox/gpgx/core/ntsc/sms_ntsc.c delete mode 100644 waterbox/gpgx/core/ntsc/sms_ntsc.h delete mode 100644 waterbox/gpgx/core/ntsc/sms_ntsc.txt delete mode 100644 waterbox/gpgx/core/ntsc/sms_ntsc_config.h delete mode 100644 waterbox/gpgx/core/ntsc/sms_ntsc_impl.h delete mode 100644 waterbox/gpgx/core/shared.h delete mode 100644 waterbox/gpgx/core/sound/blip_buf.c delete mode 100644 waterbox/gpgx/core/sound/blip_buf.h delete mode 100644 waterbox/gpgx/core/sound/eq.c delete mode 100644 waterbox/gpgx/core/sound/eq.h delete mode 100644 waterbox/gpgx/core/sound/sn76489.c delete mode 100644 waterbox/gpgx/core/sound/sn76489.h delete mode 100644 waterbox/gpgx/core/sound/sound.c delete mode 100644 waterbox/gpgx/core/sound/sound.h delete mode 100644 waterbox/gpgx/core/sound/ym2413.c delete mode 100644 waterbox/gpgx/core/sound/ym2413.h delete mode 100644 waterbox/gpgx/core/sound/ym2612.c delete mode 100644 waterbox/gpgx/core/sound/ym2612.h delete mode 100644 waterbox/gpgx/core/system.c delete mode 100644 waterbox/gpgx/core/system.h delete mode 100644 waterbox/gpgx/core/types.h delete mode 100644 waterbox/gpgx/core/vdp_ctrl.c delete mode 100644 waterbox/gpgx/core/vdp_ctrl.h delete mode 100644 waterbox/gpgx/core/vdp_render.c delete mode 100644 waterbox/gpgx/core/vdp_render.h delete mode 100644 waterbox/gpgx/core/z80/osd_cpu.h delete mode 100644 waterbox/gpgx/core/z80/z80.c delete mode 100644 waterbox/gpgx/core/z80/z80.h diff --git a/.gitmodules b/.gitmodules index c5353516f5..f0ec90a71e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -73,3 +73,7 @@ path = quicknes/core url = https://github.com/TASEmulators/quickerNES.git branch = main +[submodule "waterbox/gpgx/Genesis-Plus-GX"] + path = waterbox/gpgx/Genesis-Plus-GX + url = https://github.com/TASEmulators/Genesis-Plus-GX.git + branch = tasvideos-2 diff --git a/Assets/dll/gpgx.wbx.zst b/Assets/dll/gpgx.wbx.zst index 1e6d7db00cd9bfbfe82e7e119019700d28bd8b62..493d6166c894d8c8e40169823298ffb6aba9834d 100644 GIT binary patch literal 347855 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

ugYK&H1Fr;Vu!%Po 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

# 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%0AnwOdu7Z0em6-3P$oQ+tVDy}ui+{NV* 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

-Jss)5Sks7T3O2yRJ27 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∨QWJk?*@c$v} ztApZrqHY&=cXx+{#XXC=yDYXqAV7jU$)W*vaT44mNPh{cZ&+YEp-RGQJCRVmK4OAbY@1AA82<7KAz&ztMD}`Z7}b z5=Q5u<|^t6`=zfJ(38&ilsd56nDL;Xj!qRz(dd`zbJ?C*8?<>qx5Frc!eWZ(9YtnM zD2F()!zhsl)f63LECRxhNb8xUYcx=(AqtXPCZd4_LPn{5<_SbAaSk2$4+@H!iJUKc zfr0U>x>j^8gVGi|L>4OJKuM&nL*m49DxO**4U-PKn879@CFfK+|D9IP%!T-l!sGZ{ zz#NfCG`cN;PFK}Jw9-vO)Li|ALn5Nf$Xu z2La_zRdHA=QLh*Z$Q>h{#~>QWbpxyvoFlRj@CkPfD*G8Js;&_aImBAqOAO@zAkO2Z zLuZJhYYkFrfN?4-4x=$QK^%mp1@7DNy!@*~8tnOWF{N!u8H@4E#>+%fvt2-HoHkF2 zpQ^@_tMSwx6GS}h=xo4ZJUMuYh~?+1xqFW>fw!ouaqoR|&~4TnuSQ=t3BWC6AyS&B zrE5ZGY-4G!odDxgx5wZHM1OX9T~D>Zd~v;8GB`w=`GPQG`vn!}CS>`dbA!Y`zt}a5 z?vQDzsqHBJ0!S9Qe0`p(zi@R<=8?rw*De1w#P8K55V!c$* zXUf@XRl^Vgxux!`$j0u>%H4Hs8EUw;;G#VG=&vgqG$hi+c7m!Lb&Fi!7E8-Hzbf z!gT{R;fr!-w7J$wU&zeed^ev>gLFK>MLtKLXZUC0CdH9%*A-s*!EOiBoA`AWsOvh- zP@5;|;`jy$G_Lkzx9A+NoUuRz9l|(a@ccC>Iiy$CNA+J_NH^@qI#9Q{U4V2`q`#)_ z2Lz}}fpd{xV&H3?vc5j}soOSPx;LY%0D08W+${&yYbVe@2GW+nQRfbqy_4S{LaGJd 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 "genesis"; + [RequiredService] + private GPGX gpgx { get; set; } + private GPGX.GPGXSettings Settings { get => APIs.Emulation.GetSettings() as GPGX.GPGXSettings ?? new GPGX.GPGXSettings(); set => APIs.Emulation.PutSettings(value); } - + [LuaMethodExample("if ( genesis.getlayer_bga( ) ) then\r\n\tconsole.log( \"Returns whether the bg layer A is displayed\" );\r\nend;")] [LuaMethod("getlayer_bga", "Returns whether the bg layer A is displayed")] public bool GetLayerBgA() @@ -62,5 +66,19 @@ namespace BizHawk.Client.Common s.DrawBGW = value; Settings = s; } + + [LuaMethodExample("genesis.add_deepfreeze_value( 0xFF00, 0x01 );")] + [LuaMethod("add_deepfreeze_value", "Adds an address to deepfreeze to a given value. The value will not change at any point during emulation.")] + public int AddDeepFreezeValue(int address, byte value) + { + return gpgx.AddDeepFreezeValue(address, value); + } + + [LuaMethodExample("genesis.clear_deepfreeze_list();")] + [LuaMethod("clear_deepfreeze_list", "Clears the list of deep frozen variables")] + public void ClearDeepFreezeList() + { + gpgx.ClearDeepFreezeList(); + } } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ISettable.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ISettable.cs index a697b48be8..a926619948 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ISettable.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ISettable.cs @@ -263,6 +263,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx [DefaultValue(LibGPGX.Region.Autodetect)] public LibGPGX.Region Region { get; set; } + [DisplayName("FM Sound Chip Type")] + [Description("Sets the method used to emulate the FM synthesizer (main sound generator) of the Mega Drive/Genesis. 'MAME' options are fast, and run full speed on most systems. 'Nuked' options are cycle accurate, very high quality, and have substantial CPU requirements. The 'YM2612' chip is used by the original Model 1 Mega Drive/Genesis. The 'YM3438' is used in later Mega Drive/Genesis revisions.")] + [DefaultValue(LibGPGX.InitSettings.GenesisFMSoundChipType.MAME_YM2612)] + public LibGPGX.InitSettings.GenesisFMSoundChipType GenesisFMSoundChip { get; set; } + [DisplayName("Audio Filter")] [DefaultValue(LibGPGX.InitSettings.FilterType.LowPass)] public LibGPGX.InitSettings.FilterType Filter { get; set; } @@ -303,6 +308,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx [DefaultValue(0xffff00ff)] public uint BackdropColor { get; set; } + [DisplayName("Sprites always on top")] + [Description("Forces sprites to always be displayed on top")] + [DefaultValue(false)] + public bool SpritesAlwaysOnTop { get; set; } + public LibGPGX.InitSettings GetNativeSettings(GameInfo game) { return new LibGPGX.InitSettings @@ -320,6 +330,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx InputSystemB = SystemForSystem(ControlTypeRight), Region = Region, ForceSram = game["sram"], + GenesisFMSoundChip = GenesisFMSoundChip, + SpritesAlwaysOnTop = SpritesAlwaysOnTop }; } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs index 9d3371f14b..45fcafe4c3 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.cs @@ -11,7 +11,7 @@ using System.Linq; namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { - [PortedCore(CoreNames.Gpgx, "", "r874", "https://code.google.com/p/genplus-gx/")] + [PortedCore(CoreNames.Gpgx, "Eke-Eke", "25a90c6", "https://github.com/ekeeke/Genesis-Plus-GX")] public partial class GPGX : IEmulator, IVideoProvider, ISaveRam, IStatable, IRegionable, IInputPollable, IDebuggable, IDriveLight, ICodeDataLogger, IDisassemblable { @@ -44,7 +44,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx SbrkHeapSizeKB = 512, SealedHeapSizeKB = 4 * 1024, InvisibleHeapSizeKB = 4 * 1024, - PlainHeapSizeKB = 34 * 1024, + PlainHeapSizeKB = 48 * 1024, MmapHeapSizeKB = 1 * 1024, SkipCoreConsistencyCheck = lp.Comm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxCoreConsistencyCheck), SkipMemoryConsistencyCheck = lp.Comm.CorePreferences.HasFlag(CoreComm.CorePreferencesFlags.WaterboxMemoryConsistencyCheck), @@ -214,7 +214,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx srcdata = GetCDData(_cds[0]); if (srcdata.Length != maxsize) { - Console.WriteLine("Couldn't satisfy firmware request {0} because of struct size.", filename); + Console.WriteLine("Couldn't satisfy firmware request {0} because of struct size ({1} != {2}).", filename, srcdata.Length, maxsize); return 0; } } @@ -314,8 +314,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx //zero 07-jul-2015 - throws a dollar in the pile, since he probably messed it up worse for (int i = 0; i < LibGPGX.CD_MAX_TRACKS; i++) { + ret.tracks[i].loopEnabled = 0; + ret.tracks[i].loopOffset = 0; + if (i < ntrack) { + ret.tracks[i].mode = ses.Tracks[i].Mode; ret.tracks[i].start = ses.Tracks[i + 1].LBA; ret.tracks[i].end = ses.Tracks[i + 2].LBA; if (i == ntrack - 1) @@ -326,6 +330,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx } else { + ret.tracks[i].mode = 0; ret.tracks[i].start = 0; ret.tracks[i].end = 0; } @@ -412,6 +417,16 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx Core.gpgx_flush_vram(); // fully regenerate internal caches as needed return new VDPView(v, _elf); } + + public int AddDeepFreezeValue(int address, byte value) + { + return Core.gpgx_add_deepfreeze_list_entry(address, value); + } + + public void ClearDeepFreezeList() + { + Core.gpgx_clear_deepfreeze_list(); + } public DisplayType Region { get; } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/LibGPGX.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/LibGPGX.cs index d2aeddbc60..5471226769 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/LibGPGX.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/LibGPGX.cs @@ -48,10 +48,23 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx ThreeBand = 2 } public FilterType Filter; + public INPUT_SYSTEM InputSystemA; public INPUT_SYSTEM InputSystemB; public bool SixButton; public bool ForceSram; + + public enum GenesisFMSoundChipType : byte + { + MAME_YM2612, + MAME_ASIC_YM3438, + MAME_Enhanced_YM3438, + Nuked_YM2612, + Nuked_YM3438 + } + public GenesisFMSoundChipType GenesisFMSoundChip; + + public bool SpritesAlwaysOnTop; } [BizImport(CallingConvention.Cdecl)] @@ -271,6 +284,9 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { public int start; public int end; + public int mode; + public int loopEnabled; + public int loopOffset; } [StructLayout(LayoutKind.Sequential)] @@ -282,6 +298,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx public readonly CDTrack[] tracks = new CDTrack[CD_MAX_TRACKS]; } + [BizImport(CallingConvention.Cdecl)] + public abstract int gpgx_add_deepfreeze_list_entry(int address, byte value); + + [BizImport(CallingConvention.Cdecl)] + public abstract void gpgx_clear_deepfreeze_list(); + [BizImport(CallingConvention.Cdecl)] public abstract void gpgx_set_cdd_callback(cd_read_cb cddcb); diff --git a/src/BizHawk.Emulation.Cores/CoreNames.cs b/src/BizHawk.Emulation.Cores/CoreNames.cs index 34f729b723..e1b4434e41 100644 --- a/src/BizHawk.Emulation.Cores/CoreNames.cs +++ b/src/BizHawk.Emulation.Cores/CoreNames.cs @@ -29,7 +29,7 @@ namespace BizHawk.Emulation.Cores public const string GBHawkLink3x = "GBHawkLink3x"; public const string GBHawkLink4x = "GBHawkLink4x"; public const string GGHawkLink = "GGHawkLink"; - public const string Gpgx = "Genplus-gx"; + public const string Gpgx = "GenesisPlusGX"; public const string Handy = "Handy"; public const string HyperNyma = "HyperNyma"; public const string IntelliHawk = "IntelliHawk"; diff --git a/waterbox/gpgx/.vscode/settings.json b/waterbox/gpgx/.vscode/settings.json deleted file mode 100644 index 474940b1c6..0000000000 --- a/waterbox/gpgx/.vscode/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -// Place your settings in this file to overwrite default and user settings. -{ - "editor.tabSize": 4, - "editor.insertSpaces": false, - "editor.detectIndentation": false, - "files.associations": { - "callbacks.h": "c" - } -} \ No newline at end of file diff --git a/waterbox/gpgx/Genesis-Plus-GX b/waterbox/gpgx/Genesis-Plus-GX new file mode 160000 index 0000000000..499dd30a13 --- /dev/null +++ b/waterbox/gpgx/Genesis-Plus-GX @@ -0,0 +1 @@ +Subproject commit 499dd30a13c400b154e22bfc50522b2a309afbc2 diff --git a/waterbox/gpgx/Makefile b/waterbox/gpgx/Makefile index c3bdf6d8ac..ecf4af58a8 100644 --- a/waterbox/gpgx/Makefile +++ b/waterbox/gpgx/Makefile @@ -1,13 +1,87 @@ -CCFLAGS := -Icore -Iutil -Icore/m68k -Icore/z80 -Icore/input_hw \ - -Icore/cart_hw -Icore/cart_hw/svp -Icore/sound -Icore/ntsc -Icore/cd_hw \ +GPGX_DIR := Genesis-Plus-GX + +CCFLAGS := -Iutil \ + -I${GPGX_DIR}/core \ + -I${GPGX_DIR}/core/m68k \ + -I${GPGX_DIR}/core/z80 \ + -I${GPGX_DIR}/core/input_hw \ + -I${GPGX_DIR}/core/cart_hw \ + -I${GPGX_DIR}/core/cart_hw/svp \ + -I${GPGX_DIR}/core/sound \ + -I${GPGX_DIR}/core/ntsc \ + -I${GPGX_DIR}/core/cd_hw \ + -I${GPGX_DIR}/core/debug \ + -Icinterface \ + -Iutil \ -Wall -Werror=pointer-to-int-cast -Werror=int-to-pointer-cast -Werror=implicit-function-declaration \ - -std=c99 -fomit-frame-pointer \ - -DLSB_FIRST -DUSE_32BPP_RENDERING -DINLINE=static\ __inline__ -fcommon + -std=c99 -fomit-frame-pointer -Wfatal-errors \ + -DUSE_BIZHAWK_CALLBACKS \ + -DHAVE_YM3438_CORE \ + -DHAVE_OPLL_CORE \ + -DUSE_RAM_DEEPFREEZE \ + -DLSB_FIRST \ + -DUSE_32BPP_RENDERING \ + -DHOOK_CPU \ + -DINLINE=static\ __inline__ \ + -fcommon LDFLAGS := TARGET := gpgx.wbx -SRCS = $(shell find $(ROOT_DIR) -type f -name '*.c') +SRCS = $(GPGX_DIR)/core/sound/sound.c \ + $(GPGX_DIR)/core/sound/ym3438.c \ + $(GPGX_DIR)/core/sound/opll.c \ + $(GPGX_DIR)/core/sound/eq.c \ + $(GPGX_DIR)/core/sound/ym2413.c \ + $(GPGX_DIR)/core/sound/blip_buf.c \ + $(GPGX_DIR)/core/sound/psg.c \ + $(GPGX_DIR)/core/sound/ym2612.c \ + $(GPGX_DIR)/core/membnk.c \ + $(GPGX_DIR)/core/vdp_ctrl.c \ + $(GPGX_DIR)/core/z80/z80.c \ + $(GPGX_DIR)/core/io_ctrl.c \ + $(GPGX_DIR)/core/ntsc/sms_ntsc.c \ + $(GPGX_DIR)/core/ntsc/md_ntsc.c \ + $(GPGX_DIR)/core/m68k/s68kcpu.c \ + $(GPGX_DIR)/core/m68k/m68kcpu.c \ + $(GPGX_DIR)/core/memz80.c \ + $(GPGX_DIR)/core/genesis.c \ + $(GPGX_DIR)/core/vdp_render.c \ + $(GPGX_DIR)/core/system.c \ + $(GPGX_DIR)/core/cd_hw/cd_cart.c \ + $(GPGX_DIR)/core/cd_hw/cdc.c \ + $(GPGX_DIR)/core/cd_hw/pcm.c \ + $(GPGX_DIR)/core/cd_hw/gfx.c \ + $(GPGX_DIR)/core/cd_hw/scd.c \ + $(GPGX_DIR)/core/cd_hw/cdd.c \ + $(GPGX_DIR)/core/input_hw/sportspad.c \ + $(GPGX_DIR)/core/input_hw/activator.c \ + $(GPGX_DIR)/core/input_hw/mouse.c \ + $(GPGX_DIR)/core/input_hw/paddle.c \ + $(GPGX_DIR)/core/input_hw/gamepad.c \ + $(GPGX_DIR)/core/input_hw/input.c \ + $(GPGX_DIR)/core/input_hw/terebi_oekaki.c \ + $(GPGX_DIR)/core/input_hw/teamplayer.c \ + $(GPGX_DIR)/core/input_hw/graphic_board.c \ + $(GPGX_DIR)/core/input_hw/lightgun.c \ + $(GPGX_DIR)/core/input_hw/xe_1ap.c \ + $(GPGX_DIR)/core/mem68k.c \ + $(GPGX_DIR)/core/cart_hw/svp/ssp16.c \ + $(GPGX_DIR)/core/cart_hw/svp/svp.c \ + $(GPGX_DIR)/core/cart_hw/areplay.c \ + $(GPGX_DIR)/core/cart_hw/eeprom_spi.c \ + $(GPGX_DIR)/core/cart_hw/sram.c \ + $(GPGX_DIR)/core/cart_hw/eeprom_93c.c \ + $(GPGX_DIR)/core/cart_hw/sms_cart.c \ + $(GPGX_DIR)/core/cart_hw/eeprom_i2c.c \ + $(GPGX_DIR)/core/cart_hw/ggenie.c \ + $(GPGX_DIR)/core/cart_hw/md_cart.c \ + $(GPGX_DIR)/core/cart_hw/megasd.c \ + $(GPGX_DIR)/core/debug/cpuhook.c \ + $(GPGX_DIR)/core/loadrom.c \ + cinterface/cddImpl.c \ + cinterface/cinterface.c \ + util/scrc32.c include ../common.mak diff --git a/waterbox/gpgx/cinterface/callbacks.h b/waterbox/gpgx/cinterface/callbacks.h index b2b37edd34..9234e9ab0c 100644 --- a/waterbox/gpgx/cinterface/callbacks.h +++ b/waterbox/gpgx/cinterface/callbacks.h @@ -10,8 +10,7 @@ typedef ECL_ENTRY void (*CDCallback)(int32 addr, int32 addrtype, int32 flags); extern ECL_ENTRY void (*biz_execcb)(unsigned addr); extern ECL_ENTRY void (*biz_readcb)(unsigned addr); extern ECL_ENTRY void (*biz_writecb)(unsigned addr); -extern CDCallback biz_cdcallback; -extern unsigned biz_lastpc; +extern CDCallback biz_cdcb; extern ECL_ENTRY void (*cdd_readcallback)(int lba, void *dest, int audio); diff --git a/waterbox/gpgx/cinterface/cddImpl.c b/waterbox/gpgx/cinterface/cddImpl.c new file mode 100644 index 0000000000..6a4c6c1527 --- /dev/null +++ b/waterbox/gpgx/cinterface/cddImpl.c @@ -0,0 +1,524 @@ +#include "shared.h" +#include "megasd.h" +#include + +static int sampleLba = 0; +static int sampleOffset = 0; +static int tocLba = 0; + +void cdd_reset(void) +{ + /* reset drive access latency */ + cdd.latency = 0; + + /* reset track index */ + cdd.index = 0; + + /* reset logical block address */ + cdd.lba = 0; + + /* reset logical block address for audio*/ + sampleLba = 0; + sampleOffset = 0; + + /* reset logical block address for Toc*/ + tocLba = 0; + + /* reset status */ + cdd.status = cdd.loaded ? CD_TOC : NO_DISC; + + /* reset CD-DA fader (full volume) */ + cdd.fader[0] = cdd.fader[1] = 0x400; + + /* clear CD-DA output */ + cdd.audio[0] = cdd.audio[1] = 0; +} + +typedef struct +{ + toc_t toc; +} frontendcd_t; + +int cdd_load(const char *key, char *header) +{ + frontendcd_t fecd; + char data[2048]; + int startoffs; + + int bytes = sizeof(frontendcd_t); + if (load_archive(key, (unsigned char *)&fecd, bytes, NULL) != bytes) + return 0; + + // look for valid header + cdd_readcallback(0, data, 0); + if (memcmp("SEGADISCSYSTEM", data, 14) == 0) + startoffs = 0; + else if (memcmp("SEGADISCSYSTEM", data + 16, 14) == 0) + startoffs = 16; + else + return 0; + // copy security block + memcpy(header, data + startoffs, 0x210); + + // copy disk information + memcpy(&cdd.toc, &fecd.toc, sizeof(toc_t)); + + /* Valid CD-ROM Mode 1 track found ? */ + if (cdd.toc.tracks[0].type == TYPE_MODE1) + { + /* simulate audio tracks if none found */ + if (cdd.toc.last == 1) + { + /* some games require exact TOC infos */ + if (strstr(header + 0x180,"T-95035") != NULL) + { + /* Snatcher */ + cdd.toc.last = cdd.toc.end = 0; + do + { + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end; + cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + toc_snatcher[cdd.toc.last]; + cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; + cdd.toc.last++; + } + while (cdd.toc.last < 21); + } + else if (strstr(header + 0x180,"T-127015") != NULL) + { + /* Lunar - The Silver Star */ + cdd.toc.last = cdd.toc.end = 0; + do + { + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end; + cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + toc_lunar[cdd.toc.last]; + cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; + cdd.toc.last++; + } + while (cdd.toc.last < 52); + } + else if (strstr(header + 0x180,"T-113045") != NULL) + { + /* Shadow of the Beast II */ + cdd.toc.last = cdd.toc.end = 0; + do + { + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end; + cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + toc_shadow[cdd.toc.last]; + cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; + cdd.toc.last++; + } + while (cdd.toc.last < 15); + } + else if (strstr(header + 0x180,"T-143025") != NULL) + { + /* Dungeon Explorer */ + cdd.toc.last = cdd.toc.end = 0; + do + { + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end; + cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + toc_dungeon[cdd.toc.last]; + cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; + cdd.toc.last++; + } + while (cdd.toc.last < 13); + } + else if (strstr(header + 0x180,"MK-4410") != NULL) + { + /* Final Fight CD (USA, Europe) */ + cdd.toc.last = cdd.toc.end = 0; + do + { + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end; + cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + toc_ffight[cdd.toc.last]; + cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; + cdd.toc.last++; + } + while (cdd.toc.last < 26); + } + else if (strstr(header + 0x180,"G-6013") != NULL) + { + /* Final Fight CD (Japan) */ + cdd.toc.last = cdd.toc.end = 0; + do + { + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end; + cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + toc_ffightj[cdd.toc.last]; + cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; + cdd.toc.last++; + } + while (cdd.toc.last < 29); + } + else if (strstr(header + 0x180,"T-06201-01") != NULL) + { + /* Sewer Shark (USA) (REV1) */ + /* no audio track */ + } + else + { + /* default TOC (99 tracks & 2s per audio tracks) */ + do + { + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end + 2*75; + cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + 2*75; + cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; + cdd.toc.last++; + } + while ((cdd.toc.last < 99) && (cdd.toc.end < 56*60*75)); + } + } + } + + cdd.loaded = 1; + return 1; +} + +void cdd_unload(void) +{ + cdd.loaded = 0; + cdd_readcallback = NULL; + + /* reset TOC */ + memset(&cdd.toc, 0x00, sizeof(cdd.toc)); +} + +void cdd_update(void) +{ +#ifdef LOG_CDD + error("LBA = %d (track n�%d)(latency=%d)\n", cdd.lba, cdd.index, cdd.latency); +#endif + + /* seeking disc */ + if (cdd.status == CD_SEEK) + { + /* drive latency */ + if (cdd.latency > 0) + { + cdd.latency--; + return; + } + + /* drive is ready */ + cdd.status = CD_PAUSE; + } + + /* reading disc */ + else if (cdd.status == CD_PLAY) + { + /* drive latency */ + if (cdd.latency > 0) + { + cdd.latency--; + return; + } + + /* track type */ + if (!cdd.index) + { + /* DATA sector header (CD-ROM Mode 1) */ + uint8 header[4]; + uint32 msf = cdd.lba + 150; + header[0] = lut_BCD_8[(msf / 75) / 60]; + header[1] = lut_BCD_8[(msf / 75) % 60]; + header[2] = lut_BCD_8[(msf % 75)]; + header[3] = 0x01; + + /* data track sector read is controlled by CDC */ + cdc_decoder_update(*(uint32 *)(header)); + cdd.lba++; + } + else if (cdd.index < cdd.toc.last) + { + /* check against audio track start index */ + if (cdd.lba >= cdd.toc.tracks[cdd.index].start) + { + /* audio track playing */ + // if it wasn't before, set the audio start position + if (scd.regs[0x36>>1].byte.h) + { + sampleLba = cdd.lba + 1; + sampleOffset = 0; + } + scd.regs[0x36>>1].byte.h = 0x00; + } + + /* audio blocks are still sent to CDC as well as CD DAC/Fader */ + cdc_decoder_update(0); + + /* next audio block is automatically read */ + cdd.lba++; + } + else + { + /* end of disc */ + cdd.status = CD_END; + return; + } + + /* check end of current track */ + if (cdd.lba >= cdd.toc.tracks[cdd.index].end) + { + /* play next track */ + cdd.index++; + + /* PAUSE between tracks */ + scd.regs[0x36>>1].byte.h = 0x01; + } + } + + /* scanning disc */ + else if (cdd.status == CD_SCAN) + { + /* fast-forward or fast-rewind */ + cdd.lba += cdd.scanOffset; + sampleLba += cdd.scanOffset; + + /* check current track limits */ + if (cdd.lba >= cdd.toc.tracks[cdd.index].end) + { + /* next track */ + cdd.index++; + + /* skip directly to track start position */ + cdd.lba = cdd.toc.tracks[cdd.index].start; + + /* AUDIO track playing ? */ + if (cdd.status == CD_PLAY) + { + scd.regs[0x36>>1].byte.h = 0x00; + // set audio start point + sampleLba = cdd.lba; + sampleOffset = 0; + } + } + else if (cdd.lba < cdd.toc.tracks[cdd.index].start) + { + /* previous track */ + cdd.index--; + + /* skip directly to track end position */ + cdd.lba = cdd.toc.tracks[cdd.index].end; + } + + /* check disc limits */ + if (cdd.index < 0) + { + cdd.index = 0; + cdd.lba = 0; + } + else if (cdd.index >= cdd.toc.last) + { + /* no AUDIO track playing */ + scd.regs[0x36>>1].byte.h = 0x01; + + /* end of disc */ + cdd.index = cdd.toc.last; + cdd.lba = cdd.toc.end; + cdd.status = CD_END; + return; + } + } +} + + +void cdd_read_data(uint8 *dst, uint8 *subheader) +{ + /* only allow reading (first) CD-ROM track sectors */ + if (cdd.toc.tracks[cdd.index].type && (cdd.lba >= 0)) + { + /* check sector size */ + if (cdd.sectorSize == 2048) + { + /* read Mode 1 user data (2048 bytes) */ + cdd_readcallback(cdd.lba, dst, 0); + // cdStreamSeek(trackStream[0], cdd.lba * 2048, SEEK_SET); + // cdStreamRead(dst, 2048, 1, trackStream[0]); + } + else + { + /* check if sub-header is required (Mode 2 sector only) */ + if (!subheader) + { + /* skip block sync pattern (12 bytes) + block header (4 bytes) then read Mode 1 user data (2048 bytes) */ + cdd_readcallback(cdd.lba, dst, 0); + // cdStreamSeek(trackStream[0], (cdd.lba * 2352) + 12 + 4, SEEK_SET); + // cdStreamRead(dst, 2048, 1, trackStream[0]); + } + else + { + /* skip block sync pattern (12 bytes) + block header (4 bytes) + Mode 2 sub-header (first 4 bytes) then read Mode 2 sub-header (last 4 bytes) */ + + + uint8_t buffer[2352]; + cdd_readcallback(cdd.lba, buffer, 0); + + // cdStreamSeek(trackStream[0], (cdd.lba * 2352) + 12 + 4 + 4, SEEK_SET); + size_t pos = 12 + 4 + 4; + + // cdStreamRead(subheader, 4, 1, trackStream[0]); + memcpy(subheader, &buffer[pos], 4); pos += 4; + + /* read Mode 2 user data (max 2328 bytes) */ + // cdStreamRead(dst, 2328, 1, trackStream[0]); + memcpy(dst, &buffer[pos], 2328); + } + } + } +} + +void cdd_seek_audio(int index, int lba) +{ + cdd.index = index; + sampleLba = lba; +// /* seek to track position */ +// if (trackStream[index]) +// { +// /* PCM AUDIO track */ +// cdStreamSeek(trackStream[index], (lba * 2352) - trackOffset[index], SEEK_SET); +// } +} + +void cdd_read_audio(unsigned int samples) +{ + /* previous audio outputs */ + int prev_l = cdd.audio[0]; + int prev_r = cdd.audio[1]; + + /* audio track playing ? */ + if (!scd.regs[0x36>>1].byte.h) + { + int i, mul, l, r; + + /* current CD-DA fader volume */ + int curVol = cdd.fader[0]; + + /* CD-DA fader volume setup (0-1024) */ + int endVol = cdd.fader[1]; + + /* read samples from current block */ + { +#ifdef LSB_FIRST + int16 *ptr = (int16 *) (cdc.ram); +#else + uint8 *ptr = cdc.ram; +#endif + { + char scratch[2352]; + // copy the end of current sector + int nsampreq = samples; + unsigned char *dest = cdc.ram; + cdd_readcallback(sampleLba, scratch, 1); + memcpy(cdc.ram, scratch + sampleOffset * 4, 2352 - sampleOffset * 4); + sampleLba++; + nsampreq -= 588 - sampleOffset; + dest += 2352 - sampleOffset * 4; + sampleOffset = 0; + // fill full sectors + while (nsampreq >= 588) + { + cdd_readcallback(sampleLba, scratch, 1); + memcpy(dest, scratch, 2352); + sampleLba++; + nsampreq -= 588; + dest += 2352; + } + // do last partial sector + if (nsampreq > 0) + { + cdd_readcallback(sampleLba, scratch, 1); + memcpy(dest, scratch, nsampreq * 4); + sampleOffset = nsampreq; + dest += nsampreq * 4; + nsampreq = 0; + } + //printf("samples: %i\n", samples); + //memset(cdc.ram, 0, samples * 4); + //fread(cdc.ram, 1, samples * 4, cdd.toc.tracks[cdd.index].fd); + } + + /* process 16-bit (little-endian) stereo samples */ + for (i=0; i endVol) + { + /* fade-out */ + curVol--; + } + else if (!curVol) + { + /* audio will remain muted until next setup */ + break; + } + } + } + + /* save current CD-DA fader volume */ + cdd.fader[0] = curVol; + + /* save last audio output for next frame */ + cdd.audio[0] = prev_l; + cdd.audio[1] = prev_r; + } + else + { + /* no audio output */ + if (prev_l | prev_r) + { + /* update blip buffer */ + blip_add_delta_fast(snd.blips[2], 0, -prev_l, -prev_r); + + /* save audio output for next frame */ + cdd.audio[0] = 0; + cdd.audio[1] = 0; + } + } + + /* end of blip buffer timeframe */ + blip_end_frame(snd.blips[2], samples); +} + +void cdd_seek_toc(int lba) +{ + tocLba = lba; +// if (tocStream == NULL) return; +// cdStreamSeek(tocStream, cdd.lba * 96, SEEK_SET); +} + +void cdd_read_toc(uint8 *dst, size_t size) +{ + if (size > 2352) { fprintf(stderr, "Excessive size requested (%lu) on cdd_read_toc()\n", size); exit(1); } + uint8_t buffer[2352]; + cdd_readcallback(tocLba, buffer, 0); + memcpy(dst, buffer, size); +// if (tocStream == NULL) return; +// cdStreamRead(dst, 1, size, tocStream); +} \ No newline at end of file diff --git a/waterbox/gpgx/cinterface/cinterface.c b/waterbox/gpgx/cinterface/cinterface.c index 1fdd924c7a..f216cc8893 100644 --- a/waterbox/gpgx/cinterface/cinterface.c +++ b/waterbox/gpgx/cinterface/cinterface.c @@ -8,12 +8,15 @@ #define snprintf _snprintf #endif -#include "shared.h" -#include "genesis.h" -#include "md_ntsc.h" -#include "sms_ntsc.h" -#include "eeprom_i2c.h" -#include "vdp_render.h" +#include +#include +#include +#include +#include +#include +#include + +struct config_t config; char GG_ROM[256] = "GG_ROM"; // game genie rom char AR_ROM[256] = "AR_ROM"; // actin replay rom @@ -40,8 +43,6 @@ uint8 cinterface_custom_backdrop = 0; uint32 cinterface_custom_backdrop_color = 0xffff00ff; // pink extern uint8 border; -int cinterface_force_sram = 0; - #define GPGX_EX ECL_EXPORT static int vwidth; @@ -58,8 +59,7 @@ static uint8_t brm_format[0x40] = ECL_ENTRY void (*biz_execcb)(unsigned addr); ECL_ENTRY void (*biz_readcb)(unsigned addr); ECL_ENTRY void (*biz_writecb)(unsigned addr); -CDCallback biz_cdcallback = NULL; -unsigned biz_lastpc = 0; +CDCallback biz_cdcb = NULL; ECL_ENTRY void (*cdd_readcallback)(int lba, void *dest, int audio); uint8 *tempsram; @@ -216,8 +216,8 @@ typedef struct } vdpview_t; -extern uint8 *bg_pattern_cache; -extern uint32 pixel[]; +extern uint8 ALIGNED_(4) bg_pattern_cache[0x80000]; +uint32_t pixel[0x100]; GPGX_EX void gpgx_get_vdp_view(vdpview_t *view) { @@ -467,20 +467,20 @@ GPGX_EX void gpgx_write_m68k_bus(unsigned addr, unsigned data) { cpu_memory_map m = m68k.memory_map[addr >> 16 & 0xff]; if (m.base && !m.write8) - m.base[addr & 0xffff ^ 1] = data; + m.base[(addr & 0xffff) ^ 1] = data; } GPGX_EX void gpgx_write_s68k_bus(unsigned addr, unsigned data) { cpu_memory_map m = s68k.memory_map[addr >> 16 & 0xff]; if (m.base && !m.write8) - m.base[addr & 0xffff ^ 1] = data; + m.base[(addr & 0xffff) ^ 1] = data; } GPGX_EX unsigned gpgx_peek_m68k_bus(unsigned addr) { cpu_memory_map m = m68k.memory_map[addr >> 16 & 0xff]; if (m.base && !m.read8) - return m.base[addr & 0xffff ^ 1]; + return m.base[(addr & 0xffff) ^ 1]; else return 0xff; } @@ -488,11 +488,27 @@ GPGX_EX unsigned gpgx_peek_s68k_bus(unsigned addr) { cpu_memory_map m = s68k.memory_map[addr >> 16 & 0xff]; if (m.base && !m.read8) - return m.base[addr & 0xffff ^ 1]; + return m.base[(addr & 0xffff) ^ 1]; else return 0xff; } +enum SMSFMSoundChipType +{ + YM2413_DISABLED, + YM2413_MAME, + YM2413_NUKED +}; + +enum GenesisFMSoundChipType +{ + MAME_YM2612, + MAME_ASIC_YM3438, + MAME_Enhanced_YM3438, + Nuked_YM2612, + Nuked_YM3438 +}; + struct InitSettings { uint32_t BackdropColor; @@ -508,15 +524,100 @@ struct InitSettings char InputSystemB; char SixButton; char ForceSram; + uint8_t GenesisFMSoundChip; + uint8_t SpritesAlwaysOnTop; }; + +#ifdef HOOK_CPU +#ifdef USE_BIZHAWK_CALLBACKS + +void CDLog68k(uint addr, uint flags) +{ + addr &= 0x00FFFFFF; + + //check for sram region first + if(sram.on) + { + if(addr >= sram.start && addr <= sram.end) + { + biz_cdcb(addr - sram.start, eCDLog_AddrType_SRAM, flags); + return; + } + } + + if(addr < 0x400000) + { + uint block64k_rom; + + //apply memory map to process rom address + unsigned char* block64k = m68k.memory_map[((addr)>>16)&0xff].base; + + //outside the ROM range. complex mapping logic/accessories; not sure how to handle any of this + if(block64k < cart.rom || block64k >= cart.rom + cart.romsize) + return; + + block64k_rom = block64k - cart.rom; + addr = ((addr) & 0xffff) + block64k_rom; + + //outside the ROM range somehow + if(addr >= cart.romsize) + return; + + biz_cdcb(addr, eCDLog_AddrType_MDCART, flags); + return; + } + + if(addr > 0xFF0000) + { + //no memory map needed + biz_cdcb(addr & 0xFFFF, eCDLog_AddrType_RAM68k, flags); + return; + } +} + +void bk_cpu_hook(hook_type_t type, int width, unsigned int address, unsigned int value) +{ + switch(type) + { + case HOOK_M68K_E: + { + if (biz_execcb) + biz_execcb(address); + + if(biz_cdcb) + { + CDLog68k(address, eCDLog_Flags_Exec68k); + CDLog68k(address + 1, eCDLog_Flags_Exec68k); + } + } + break; + case HOOK_M68K_R: + { + if (biz_readcb) + biz_readcb(address); + } + break; + case HOOK_M68K_W: + { + if (biz_writecb) + biz_writecb(address); + } + break; + default: break; + } +} + +#endif // USE_BIZHAWK_CALLBACKS +#endif // HOOK_CPU + GPGX_EX int gpgx_init(const char* feromextension, ECL_ENTRY int (*feload_archive_cb)(const char *filename, unsigned char *buffer, int maxsize), struct InitSettings *settings) { _debug_puts("Initializing GPGX native..."); - cinterface_force_sram = settings->ForceSram; + force_sram = settings->ForceSram; memset(&bitmap, 0, sizeof(bitmap)); @@ -525,53 +626,109 @@ GPGX_EX int gpgx_init(const char* feromextension, load_archive_cb = feload_archive_cb; - bitmap.width = 1024; + bitmap.width = 1024; bitmap.height = 512; - bitmap.pitch = 1024 * 4; - bitmap.data = alloc_invisible(2 * 1024 * 1024); - tempsram = alloc_invisible(24 * 1024); - bg_pattern_cache = alloc_invisible(0x80000); + bitmap.pitch = 1024 * 4; + bitmap.data = alloc_plain(2 * 1024 * 1024); + tempsram = alloc_plain(24 * 1024); - ext.md_cart.rom = alloc_plain(32 * 1024 * 1024); - SZHVC_add = alloc_sealed(131072); - SZHVC_sub = alloc_sealed(131072); - ym2612_lfo_pm_table = alloc_sealed(131072); - vdp_bp_lut = alloc_sealed(262144); - vdp_lut = alloc_sealed(6 * sizeof(*vdp_lut)); - for (int i = 0; i < 6; i++) - vdp_lut[i] = alloc_sealed(65536); + // cd_hw/cd_cart.h + + ext.cd_hw.cartridge.area = alloc_plain(SCD_CARTRIDGE_AREA_SIZE); + + // Initializing ram deepfreeze list +#ifdef USE_RAM_DEEPFREEZE + deepfreeze_list_size = 0; +#endif /* sound options */ - config.psg_preamp = 150; - config.fm_preamp= 100; - config.hq_fm = 1; /* high-quality resampling */ - config.psgBoostNoise = 1; - config.filter = settings->Filter; //0; /* no filter */ - config.lp_range = settings->LowPassRange; //0x9999; /* 0.6 in 16.16 fixed point */ - config.low_freq = settings->LowFreq; //880; - config.high_freq = settings->HighFreq; //5000; - config.lg = settings->LowGain; //100; - config.mg = settings->MidGain; //100; - config.hg = settings->HighGain; //100; - config.dac_bits = 14; /* MAX DEPTH */ - config.ym2413= 2; /* AUTO */ - config.mono = 0; /* STEREO output */ + config.psg_preamp = 150; + config.fm_preamp = 100; + config.cdda_volume = 100; + config.pcm_volume = 100; + config.hq_fm = 1; + config.hq_psg = 1; + config.filter = settings->Filter; //0; /* no filter */ + config.lp_range = settings->LowPassRange; //0x9999; /* 0.6 in 16.16 fixed point */ + config.low_freq = settings->LowFreq; //880; + config.high_freq = settings->HighFreq; //5000; + config.lg = settings->LowGain; //100; + config.mg = settings->MidGain; //100; + config.hg = settings->HighGain; //100; + config.mono = 0; + config.ym3438 = 0; + + // Selecting FM Sound chip to use for SMS / GG emulation. Using a default for now, until we also + // accept this core for SMS/GG emulation in BizHawk + int smsFMChipType = YM2413_NUKED; + switch (smsFMChipType) + { + case YM2413_DISABLED: + config.opll = 0; + config.ym2413 = 0; + break; + + case YM2413_MAME: + config.opll = 0; + config.ym2413 = 1; + break; + + case YM2413_NUKED: + config.opll = 1; + config.ym2413 = 0; + break; + } + + // Selecting FM Sound chip to use for Genesis / Megadrive / CD emulation + switch (settings->GenesisFMSoundChip) + { + case MAME_YM2612: + config.ym2612 = YM2612_DISCRETE; + YM2612Config(YM2612_DISCRETE); + break; + + case MAME_ASIC_YM3438: + config.ym2612 = YM2612_INTEGRATED; + YM2612Config(YM2612_INTEGRATED); + break; + + case MAME_Enhanced_YM3438: + config.ym2612 = YM2612_ENHANCED; + YM2612Config(YM2612_ENHANCED); + break; + + case Nuked_YM2612: + OPN2_SetChipType(ym3438_mode_ym2612); + config.ym3438 = 1; + break; + + case Nuked_YM3438: + OPN2_SetChipType(ym3438_mode_readmode); + config.ym3438 = 2; + break; + } /* system options */ - config.system = 0; /* AUTO */ - config.region_detect = settings->Region; // see loadrom.c - config.vdp_mode = 0; /* AUTO */ - config.master_clock = 0; /* AUTO */ - config.force_dtack = 0; - config.addr_error = 1; - config.bios = 0; - config.lock_on = 0; + config.system = 0; /* = AUTO (or SYSTEM_SG, SYSTEM_SGII, SYSTEM_SGII_RAM_EXT, SYSTEM_MARKIII, SYSTEM_SMS, SYSTEM_SMS2, SYSTEM_GG, SYSTEM_MD) */ + config.region_detect = settings->Region; /* = AUTO (1 = USA, 2 = EUROPE, 3 = JAPAN/NTSC, 4 = JAPAN/PAL) */ + config.vdp_mode = 0; /* = AUTO (1 = NTSC, 2 = PAL) */ + config.master_clock = 0; /* = AUTO (1 = NTSC, 2 = PAL) */ + config.force_dtack = 0; + config.addr_error = 1; + config.bios = 0; + config.lock_on = 0; /* = OFF (or TYPE_SK, TYPE_GG & TYPE_AR) */ + config.add_on = 0; /* = HW_ADDON_AUTO (or HW_ADDON_MEGACD, HW_ADDON_MEGASD & HW_ADDON_ONE) */ + config.cd_latency = 1; - /* video options */ - config.overscan = 0; - config.gg_extra = 0; - config.ntsc = 0; - config.render = 1; + /* display options */ + config.overscan = 0; /* 3 = all borders (0 = no borders , 1 = vertical borders only, 2 = horizontal borders only) */ + config.gg_extra = 0; /* 1 = show extended Game Gear screen (256x192) */ + config.render = 1; /* 1 = double resolution output (only when interlaced mode 2 is enabled) */ + config.ntsc = 0; + config.lcd = 0; /* 0.8 fixed point */ + config.enhanced_vscroll = 0; + config.enhanced_vscroll_limit = 8; + config.sprites_always_on_top = settings->SpritesAlwaysOnTop; // set overall input system type // usual is MD GAMEPAD or NONE @@ -592,7 +749,7 @@ GPGX_EX int gpgx_init(const char* feromextension, config.input[i].padtype = settings->SixButton ? DEVICE_PAD6B : DEVICE_PAD3B; } - if (!load_rom("PRIMARY_ROM")) + if (!load_rom("PRIMARY_ROM", "PRIMARY_CD", "SECONDARY_CD")) return 0; audio_init(44100, 0); @@ -607,6 +764,27 @@ GPGX_EX int gpgx_init(const char* feromextension, return 1; } +#ifdef USE_RAM_DEEPFREEZE + +GPGX_EX int gpgx_add_deepfreeze_list_entry(const int address, const uint8_t value) +{ + // Prevent overflowing + if (deepfreeze_list_size == MAX_DEEP_FREEZE_ENTRIES) return -1; + + deepfreeze_list[deepfreeze_list_size].address = address; + deepfreeze_list[deepfreeze_list_size].value = value; + deepfreeze_list_size++; + + return 0; +} + +GPGX_EX void gpgx_clear_deepfreeze_list() +{ + deepfreeze_list_size = 0; +} + +#endif + GPGX_EX void gpgx_reset(int hard) { if (hard) @@ -620,11 +798,13 @@ GPGX_EX void gpgx_set_mem_callback(ECL_ENTRY void (*read)(unsigned), ECL_ENTRY v biz_readcb = read; biz_writecb = write; biz_execcb = exec; + set_cpu_hook((read || write || exec || biz_cdcb) ? bk_cpu_hook : NULL); } GPGX_EX void gpgx_set_cd_callback(CDCallback cdcallback) { - biz_cdcallback = cdcallback; + biz_cdcb = cdcallback; + set_cpu_hook((biz_readcb || biz_writecb || biz_execcb || biz_cdcb) ? bk_cpu_hook : NULL); } GPGX_EX void gpgx_set_draw_mask(int mask) @@ -691,8 +871,6 @@ GPGX_EX int gpgx_getregs(gpregister_t *regs) MAKEREG(IR); #undef MAKEREG - (regs-6)->value = biz_lastpc; // during read/write callbacks, PC runs away due to prefetch. restore it. - // 13 #define MAKEREG(x) regs->name = "Z80 " #x; regs->value = Z80.x.d; regs++; ret++; MAKEREG(pc); diff --git a/waterbox/gpgx/core/cart_hw/areplay.c b/waterbox/gpgx/core/cart_hw/areplay.c deleted file mode 100644 index 6dc169b88b..0000000000 --- a/waterbox/gpgx/core/cart_hw/areplay.c +++ /dev/null @@ -1,319 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * Action Replay / Pro Action Replay emulation - * - * Copyright (C) 2009-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -#define TYPE_PRO1 0x12 -#define TYPE_PRO2 0x22 - -struct -{ - uint8 enabled; - uint8 status; - uint8 *rom; - uint8 *ram; - uint16 regs[13]; - uint16 old[4]; - uint16 data[4]; - uint32 addr[4]; -} action_replay; - -static void ar_write_regs(uint32 address, uint32 data); -static void ar_write_regs_2(uint32 address, uint32 data); -static void ar_write_ram_8(uint32 address, uint32 data); - -void areplay_init(void) -{ - int size; - FILE *f; - - memset(&action_replay,0,sizeof(action_replay)); - - /* store Action replay ROM (max. 128KB) & RAM (64KB) above cartridge ROM (max. 8MB) */ - if (cart.romsize > 0x800000) return; - action_replay.rom = cart.rom + 0x800000; - action_replay.ram = cart.rom + 0x820000; - - /* Open Action Replay ROM */ - f = fopen(AR_ROM,"rb"); - if (f == NULL) return; - - /* ROM size */ - fseek(f, 0, SEEK_END); - size = ftell(f); - fseek(f, 0, SEEK_SET); - - /* detect Action Replay board type */ - switch (size) - { - case 0x8000: - { - /* normal Action Replay (32K) */ - action_replay.enabled = TYPE_AR; - - /* internal registers mapped at $010000-$01ffff */ - m68k.memory_map[0x01].write16 = ar_write_regs; - break; - } - - case 0x10000: - case 0x20000: - { - /* read Stack Pointer */ - uint8 sp[4]; - fread(&sp, 4, 1, f); - fseek(f, 0, SEEK_SET); - - /* Detect board version */ - if (sp[1] == 0x42) - { - /* PRO Action Replay 1 (64/128K) */ - action_replay.enabled = TYPE_PRO1; - - /* internal registers mapped at $010000-$01ffff */ - m68k.memory_map[0x01].write16 = ar_write_regs; - } - else if (sp[1] == 0x60) - { - /* PRO Action Replay 2 (64K) */ - action_replay.enabled = TYPE_PRO2; - - /* internal registers mapped at $100000-$10ffff */ - m68k.memory_map[0x10].write16 = ar_write_regs_2; - } - - /* internal RAM (64k), mapped at $420000-$42ffff or $600000-$60ffff */ - if (action_replay.enabled) - { - m68k.memory_map[sp[1]].base = action_replay.ram; - m68k.memory_map[sp[1]].read8 = NULL; - m68k.memory_map[sp[1]].read16 = NULL; - m68k.memory_map[sp[1]].write8 = ar_write_ram_8; - m68k.memory_map[sp[1]].write16 = NULL; - } - break; - } - - default: - { - break; - } - } - - if (action_replay.enabled) - { - /* Load ROM */ - int i = 0; - for (i=0; i> 1; - if (offset > 12) - { - m68k_unused_16_w(address,data); - return; - } - - /* update internal register */ - action_replay.regs[offset] = data; - - /* MODE register */ - if (action_replay.regs[3] == 0xffff) - { - /* check switch status */ - if (action_replay.status == AR_SWITCH_ON) - { - /* reset existing patches */ - areplay_set_status(AR_SWITCH_OFF); - areplay_set_status(AR_SWITCH_ON); - } - - /* enable Cartridge ROM */ - m68k.memory_map[0].base = cart.rom; - } -} - -static void ar_write_regs_2(uint32 address, uint32 data) -{ - /* enable Cartridge ROM */ - if (((address & 0xff) == 0x78) && (data == 0xffff)) - { - m68k.memory_map[0].base = cart.rom; - } -} - -static void ar_write_ram_8(uint32 address, uint32 data) -{ - /* byte writes are handled as word writes, with LSB duplicated in MSB (/LWR is not used) */ - *(uint16 *)(action_replay.ram + (address & 0xfffe)) = (data | (data << 8)); -} - diff --git a/waterbox/gpgx/core/cart_hw/areplay.h b/waterbox/gpgx/core/cart_hw/areplay.h deleted file mode 100644 index 4dc487105b..0000000000 --- a/waterbox/gpgx/core/cart_hw/areplay.h +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * DATEL Action Replay / Pro Action Replay emulation - * - * Copyright (C) 2009-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _AREPLAY_H_ -#define _AREPLAY_H_ - -#define AR_SWITCH_OFF (0) -#define AR_SWITCH_ON (1) -#define AR_SWITCH_TRAINER (2) - -extern void areplay_init(void); -extern void areplay_shutdown(void); -extern void areplay_reset(int hard); -extern void areplay_set_status(int status); -extern int areplay_get_status(void); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/eeprom_93c.c b/waterbox/gpgx/core/cart_hw/eeprom_93c.c deleted file mode 100644 index 5dd0ca054f..0000000000 --- a/waterbox/gpgx/core/cart_hw/eeprom_93c.c +++ /dev/null @@ -1,249 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * Microwire Serial EEPROM (93C46 only) support - * - * Copyright (C) 2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "eeprom_93c.h" - -/* fixed board implementation */ -#define BIT_DATA (0) -#define BIT_CLK (1) -#define BIT_CS (2) - - -T_EEPROM_93C eeprom_93c; - -void eeprom_93c_init() -{ - /* default eeprom state */ - memset(&eeprom_93c, 0, sizeof(T_EEPROM_93C)); - eeprom_93c.data = 1; - eeprom_93c.state = WAIT_START93; - sram.custom = 3; -} - -void eeprom_93c_write(unsigned char data) -{ - /* Make sure CS is HIGH */ - if (data & (1 << BIT_CS)) - { - /* Data latched on CLK postive edge */ - if ((data & (1 << BIT_CLK)) && !eeprom_93c.clk) - { - /* Current EEPROM state */ - switch (eeprom_93c.state) - { - case WAIT_START93: - { - /* Wait for START bit */ - if (data & (1 << BIT_DATA)) - { - eeprom_93c.opcode = 0; - eeprom_93c.cycles = 0; - eeprom_93c.state = GET_OPCODE93; - } - break; - } - - case GET_OPCODE93: - { - /* 8-bit buffer (opcode + address) */ - eeprom_93c.opcode |= ((data >> BIT_DATA) & 1) << (7 - eeprom_93c.cycles); - eeprom_93c.cycles++; - - if (eeprom_93c.cycles == 8) - { - /* Decode instruction */ - switch ((eeprom_93c.opcode >> 6) & 3) - { - case 1: - { - /* WRITE */ - eeprom_93c.buffer = 0; - eeprom_93c.cycles = 0; - eeprom_93c.state = WRITE_WORD93; - break; - } - - case 2: - { - /* READ */ - eeprom_93c.buffer = *(uint16 *)(sram.sram + ((eeprom_93c.opcode & 0x3F) << 1)); - eeprom_93c.cycles = 0; - eeprom_93c.state = READ_WORD93; - - /* Force DATA OUT */ - eeprom_93c.data = 0; - break; - } - - case 3: - { - /* ERASE */ - if (eeprom_93c.we) - { - *(uint16 *)(sram.sram + ((eeprom_93c.opcode & 0x3F) << 1)) = 0xFFFF; - } - - /* wait for next command */ - eeprom_93c.state = WAIT_STANDBY93; - break; - } - - default: - { - /* special command */ - switch ((eeprom_93c.opcode >> 4) & 3) - { - case 1: - { - /* WRITE ALL */ - eeprom_93c.buffer = 0; - eeprom_93c.cycles = 0; - eeprom_93c.state = WRITE_WORD93; - break; - } - - case 2: - { - /* ERASE ALL */ - if (eeprom_93c.we) - { - memset(sram.sram, 0xFF, 128); - } - - /* wait for next command */ - eeprom_93c.state = WAIT_STANDBY93; - break; - } - - default: - { - /* WRITE ENABLE/DISABLE */ - eeprom_93c.we = (eeprom_93c.opcode >> 4) & 1; - - /* wait for next command */ - eeprom_93c.state = WAIT_STANDBY93; - break; - } - } - break; - } - } - } - break; - } - - case WRITE_WORD93: - { - /* 16-bit data buffer */ - eeprom_93c.buffer |= ((data >> BIT_DATA) & 1) << (15 - eeprom_93c.cycles); - eeprom_93c.cycles++; - - if (eeprom_93c.cycles == 16) - { - /* check EEPROM write protection */ - if (eeprom_93c.we) - { - if (eeprom_93c.opcode & 0x40) - { - /* write one word */ - *(uint16 *)(sram.sram + ((eeprom_93c.opcode & 0x3F) << 1)) = eeprom_93c.buffer; - } - else - { - /* write 64 words */ - int i; - for (i=0; i<64; i++) - { - *(uint16 *)(sram.sram + (i << 1)) = eeprom_93c.buffer; - - } - } - } - - /* wait for next command */ - eeprom_93c.state = WAIT_STANDBY93; - } - break; - } - - case READ_WORD93: - { - /* set DATA OUT */ - eeprom_93c.data = ((eeprom_93c.buffer >> (15 - eeprom_93c.cycles)) & 1); - eeprom_93c.cycles++; - - if (eeprom_93c.cycles == 16) - { - /* read next word (93C46B) */ - eeprom_93c.opcode++; - eeprom_93c.cycles = 0; - eeprom_93c.buffer = *(uint16 *)(sram.sram + ((eeprom_93c.opcode & 0x3F) << 1)); - } - break; - } - - default: - { - /* wait for STANDBY mode */ - break; - } - } - } - } - else - { - /* CS HIGH->LOW transition */ - if (eeprom_93c.cs) - { - /* standby mode */ - eeprom_93c.data = 1; - eeprom_93c.state = WAIT_START93; - } - } - - /* Update input lines */ - eeprom_93c.cs = (data >> BIT_CS) & 1; - eeprom_93c.clk = (data >> BIT_CLK) & 1; -} - -unsigned char eeprom_93c_read(void) -{ - return ((eeprom_93c.cs << BIT_CS) | (eeprom_93c.data << BIT_DATA) | (1 << BIT_CLK)); -} - diff --git a/waterbox/gpgx/core/cart_hw/eeprom_93c.h b/waterbox/gpgx/core/cart_hw/eeprom_93c.h deleted file mode 100644 index 7dcf4e5beb..0000000000 --- a/waterbox/gpgx/core/cart_hw/eeprom_93c.h +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * Microwire Serial EEPROM (93C46 only) support - * - * Copyright (C) 2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _EEPROM_93C_H_ -#define _EEPROM_93C_H_ - -typedef enum -{ - WAIT_STANDBY93, - WAIT_START93, - GET_OPCODE93, - WRITE_WORD93, - READ_WORD93 -} T_STATE_93C; - -typedef struct -{ - uint8 enabled; /* 1: chip enabled */ - uint8 cs; /* CHIP SELECT line state */ - uint8 clk; /* CLK line state */ - uint8 data; /* DATA OUT line state */ - uint8 cycles; /* current operation cycle */ - uint8 we; /* 1: write enabled */ - uint8 opcode; /* 8-bit opcode + address */ - uint16 buffer; /* 16-bit data buffer */ - T_STATE_93C state; /* current operation state */ -} T_EEPROM_93C; - -/* global variables */ -extern T_EEPROM_93C eeprom_93c; - -/* Function prototypes */ -extern void eeprom_93c_init(); -extern void eeprom_93c_write(unsigned char data); -extern unsigned char eeprom_93c_read(void); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/eeprom_i2c.c b/waterbox/gpgx/core/cart_hw/eeprom_i2c.c deleted file mode 100644 index 699162ea5e..0000000000 --- a/waterbox/gpgx/core/cart_hw/eeprom_i2c.c +++ /dev/null @@ -1,583 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * I2C Serial EEPROM (24Cxx) support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "eeprom_i2c.h" - -#define GAME_CNT 28 - -/* this defines the type of EEPROM inside the game cartridge as Backup RAM - * - * Here are some notes from 8BitWizard (http://www.spritesmind.net/_GenDev/forum): - * - * Mode 1 (7-bit) - the chip takes a single byte with a 7-bit memory address and a R/W bit (24C01) - * Mode 2 (8-bit) - the chip takes a 7-bit device address and R/W bit followed by an 8-bit memory address; - * the device address may contain up to three more memory address bits (24C01 - 24C16). - * You can also string eight 24C01, four 24C02, two 24C08, or various combinations, set their address config lines correctly, - * and the result appears exactly the same as a 24C16 - * Mode 3 (16-bit) - the chip takes a 7-bit device address and R/W bit followed by a 16-bit memory address (24C32 and larger) - * - * Also, while most 24Cxx are addressed at 200000-2FFFFF, I have found two different ways of mapping the control lines. - * EA uses SDA on D7 (read/write) and SCL on D6 (write only), and I have found boards using different mapping (I think Accolade) - * which uses D1-read=SDA, D0-write=SDA, D1-write=SCL. Accolade also has a custom-chip mapper which may even use a third method. - */ - -typedef struct -{ - char game_id[16]; - uint16 chk; - T_CONFIG_I2C config; -} T_GAME_ENTRY; - -static const T_GAME_ENTRY database[GAME_CNT] = -{ - /* ACCLAIM mappers */ - /* 24C02 (old mapper) */ - {{"T-081326" }, 0, {8, 0xFF, 0xFF, 0x200001, 0x200001, 0x200001, 0, 1, 1}}, /* NBA Jam (UE) */ - {{"T-81033" }, 0, {8, 0xFF, 0xFF, 0x200001, 0x200001, 0x200001, 0, 1, 1}}, /* NBA Jam (J) */ - /* 24C02 */ - {{"T-081276" }, 0, {8, 0xFF, 0xFF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* NFL Quarterback Club */ - /* 24C04 */ - {{"T-81406" }, 0, {8, 0x1FF, 0x1FF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* NBA Jam TE */ - /* 24C16 */ - {{"T-081586" }, 0, {8, 0x7FF, 0x7FF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* NFL Quarterback Club '96 */ - /* 24C65 */ - {{"T-81576" }, 0, {16, 0x1FFF, 0x1FFF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* College Slam */ - {{"T-81476" }, 0, {16, 0x1FFF, 0x1FFF, 0x200001, 0x200001, 0x200000, 0, 0, 0}}, /* Frank Thomas Big Hurt Baseball */ - - /* EA mapper (X24C01 only) */ - {{"T-50176" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 7, 7, 6}}, /* Rings of Power */ - {{"T-50396" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 7, 7, 6}}, /* NHLPA Hockey 93 */ - {{"T-50446" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 7, 7, 6}}, /* John Madden Football 93 */ - {{"T-50516" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 7, 7, 6}}, /* John Madden Football 93 (Championship Ed.) */ - {{"T-50606" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 7, 7, 6}}, /* Bill Walsh College Football */ - - /* SEGA mapper (X24C01 only) */ - {{"T-12046" }, 0xAD23, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Megaman - The Wily Wars */ - {{"T-12053" }, 0xEA80, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Rockman Mega World [Alt] */ - {{"MK-1215" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Evander 'Real Deal' Holyfield's Boxing */ - {{"MK-1228" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Greatest Heavyweights of the Ring (U) */ - {{"G-5538" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Greatest Heavyweights of the Ring (J) */ - {{"PR-1993" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Greatest Heavyweights of the Ring (E) */ - {{"G-4060" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Wonderboy in Monster World */ - {{"00001211-00"}, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Sports Talk Baseball */ - {{"00004076-00"}, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Honoo no Toukyuuji Dodge Danpei */ - {{"G-4524" }, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Ninja Burai Densetsu */ - {{"00054503-00"}, 0, {7, 0x7F, 0x7F, 0x200001, 0x200001, 0x200001, 0, 0, 1}}, /* Game Toshokan */ - - /* CODEMASTERS mapper */ - /* 24C08 */ - {{"T-120106" }, 0, {8, 0x3FF, 0x3FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Brian Lara Cricket */ - {{"00000000-00"}, 0xCEE0, {8, 0x3FF, 0x3FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Micro Machines Military */ - /* 24C16 */ - {{"T-120096" }, 0, {8, 0x7FF, 0x7FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Micro Machines 2 - Turbo Tournament */ - {{"00000000-00"}, 0x2C41, {8, 0x7FF, 0x7FF, 0x300000, 0x380001, 0x300000, 0, 7, 1}}, /* Micro Machines Turbo Tournament 96 */ - /* 24C65 */ - {{"T-120146-50"}, 0, {16, 0x1FFF, 0x1FFF, 0x300000, 0x380001, 0x300000, 0, 7, 1}} /* Brian Lara Cricket 96, Shane Warne Cricket */ -}; - -T_EEPROM_I2C eeprom_i2c; - -static unsigned int eeprom_i2c_read_byte(unsigned int address); -static unsigned int eeprom_i2c_read_word(unsigned int address); -static void eeprom_i2c_write_byte(unsigned int address, unsigned int data); -static void eeprom_i2c_write_word(unsigned int address, unsigned int data); - -void eeprom_i2c_init() -{ - int i = 0; - - /* initialize eeprom */ - memset(&eeprom_i2c, 0, sizeof(T_EEPROM_I2C)); - eeprom_i2c.sda = eeprom_i2c.old_sda = 1; - eeprom_i2c.scl = eeprom_i2c.old_scl = 1; - eeprom_i2c.state = STAND_BY; - - /* no eeprom by default */ - sram.custom = 0; - - /* look into game database */ - while (i> 16].read8 = eeprom_i2c_read_byte; - m68k.memory_map[eeprom_i2c.config.sda_out_adr >> 16].read16 = eeprom_i2c_read_word; - m68k.memory_map[eeprom_i2c.config.sda_in_adr >> 16].read8 = eeprom_i2c_read_byte; - m68k.memory_map[eeprom_i2c.config.sda_in_adr >> 16].read16 = eeprom_i2c_read_word; - m68k.memory_map[eeprom_i2c.config.scl_adr >> 16].write8 = eeprom_i2c_write_byte; - m68k.memory_map[eeprom_i2c.config.scl_adr >> 16].write16 = eeprom_i2c_write_word; - zbank_memory_map[eeprom_i2c.config.sda_out_adr >> 16].read = eeprom_i2c_read_byte; - zbank_memory_map[eeprom_i2c.config.sda_in_adr >> 16].read = eeprom_i2c_read_byte; - zbank_memory_map[eeprom_i2c.config.scl_adr >> 16].write = eeprom_i2c_write_byte; - } -} - -INLINE void Detect_START() -{ - if (eeprom_i2c.old_scl && eeprom_i2c.scl) - { - if (eeprom_i2c.old_sda && !eeprom_i2c.sda) - { - eeprom_i2c.cycles = 0; - eeprom_i2c.slave_mask = 0; - if (eeprom_i2c.config.address_bits == 7) - { - eeprom_i2c.word_address = 0; - eeprom_i2c.state = GET_WORD_ADR_7BITS; - } - else eeprom_i2c.state = GET_SLAVE_ADR; - } - } -} - -INLINE void Detect_STOP() -{ - if (eeprom_i2c.old_scl && eeprom_i2c.scl) - { - if (!eeprom_i2c.old_sda && eeprom_i2c.sda) - { - eeprom_i2c.state = STAND_BY; - } - } -} - -static void eeprom_i2c_update(void) -{ - /* EEPROM current state */ - switch (eeprom_i2c.state) - { - /* Standby Mode */ - case STAND_BY: - { - Detect_START(); - Detect_STOP(); - break; - } - - /* Suspended Mode */ - case WAIT_STOP: - { - Detect_STOP(); - break; - } - - /* Get Word Address 7 bits: MODE-1 only (24C01) - * and R/W bit - */ - case GET_WORD_ADR_7BITS: - { - Detect_START(); - Detect_STOP(); - - /* look for SCL LOW to HIGH transition */ - if (!eeprom_i2c.old_scl && eeprom_i2c.scl) - { - if (eeprom_i2c.cycles == 0) eeprom_i2c.cycles ++; - } - - - /* look for SCL HIGH to LOW transition */ - if (eeprom_i2c.old_scl && !eeprom_i2c.scl && (eeprom_i2c.cycles > 0)) - { - if (eeprom_i2c.cycles < 8) - { - eeprom_i2c.word_address |= (eeprom_i2c.old_sda << (7 - eeprom_i2c.cycles)); - } - else if (eeprom_i2c.cycles == 8) - { - eeprom_i2c.rw = eeprom_i2c.old_sda; - } - else - { /* ACK CYCLE */ - eeprom_i2c.cycles = 0; - eeprom_i2c.word_address &= eeprom_i2c.config.size_mask; - eeprom_i2c.state = eeprom_i2c.rw ? READ_DATA : WRITE_DATA; - } - - eeprom_i2c.cycles ++; - } - break; - } - - /* Get Slave Address (3bits) : MODE-2 & MODE-3 only (24C01 - 24C512) (0-3bits, depending on the array size) - * or/and Word Address MSB: MODE-2 only (24C04 - 24C16) (0-3bits, depending on the array size) - * and R/W bit - */ - case GET_SLAVE_ADR: - { - Detect_START(); - Detect_STOP(); - - /* look for SCL LOW to HIGH transition */ - if (!eeprom_i2c.old_scl && eeprom_i2c.scl) - { - if (eeprom_i2c.cycles == 0) eeprom_i2c.cycles ++; - } - - /* look for SCL HIGH to LOW transition */ - if (eeprom_i2c.old_scl && !eeprom_i2c.scl && (eeprom_i2c.cycles > 0)) - { - if ((eeprom_i2c.cycles > 4) && (eeprom_i2c.cycles <8)) - { - if ((eeprom_i2c.config.address_bits == 16) || - (eeprom_i2c.config.size_mask < (1 << (15 - eeprom_i2c.cycles)))) - { - /* this is a SLAVE ADDRESS bit */ - eeprom_i2c.slave_mask |= (eeprom_i2c.old_sda << (7 - eeprom_i2c.cycles)); - } - else - { - /* this is a WORD ADDRESS high bit */ - if (eeprom_i2c.old_sda) eeprom_i2c.word_address |= (1 << (15 - eeprom_i2c.cycles)); - else eeprom_i2c.word_address &= ~(1 << (15 - eeprom_i2c.cycles)); - } - } - else if (eeprom_i2c.cycles == 8) eeprom_i2c.rw = eeprom_i2c.old_sda; - else if (eeprom_i2c.cycles > 8) - { - /* ACK CYCLE */ - eeprom_i2c.cycles = 0; - if (eeprom_i2c.config.address_bits == 16) - { - /* two ADDRESS bytes */ - eeprom_i2c.state = eeprom_i2c.rw ? READ_DATA : GET_WORD_ADR_HIGH; - eeprom_i2c.slave_mask <<= 16; - } - else - { - /* one ADDRESS byte */ - eeprom_i2c.state = eeprom_i2c.rw ? READ_DATA : GET_WORD_ADR_LOW; - eeprom_i2c.slave_mask <<= 8; - } - } - - eeprom_i2c.cycles ++; - } - break; - } - - /* Get Word Address MSB (4-8bits depending on the array size) - * MODE-3 only (24C32 - 24C512) - */ - case GET_WORD_ADR_HIGH: - { - Detect_START(); - Detect_STOP(); - - /* look for SCL HIGH to LOW transition */ - if (eeprom_i2c.old_scl && !eeprom_i2c.scl) - { - if (eeprom_i2c.cycles < 9) - { - if ((eeprom_i2c.config.size_mask + 1) < (1 << (17 - eeprom_i2c.cycles))) - { - /* ignored bit: slave mask should be right-shifted by one */ - eeprom_i2c.slave_mask >>= 1; - } - else - { - /* this is a WORD ADDRESS high bit */ - if (eeprom_i2c.old_sda) eeprom_i2c.word_address |= (1 << (16 - eeprom_i2c.cycles)); - else eeprom_i2c.word_address &= ~(1 << (16 - eeprom_i2c.cycles)); - } - - eeprom_i2c.cycles ++; - } - else - { - /* ACK CYCLE */ - eeprom_i2c.cycles = 1; - eeprom_i2c.state = GET_WORD_ADR_LOW; - } - } - break; - } - - /* Get Word Address LSB: 7bits (24C01) or 8bits (24C02-24C512) - * MODE-2 and MODE-3 only (24C01 - 24C512) - */ - case GET_WORD_ADR_LOW: - { - Detect_START(); - Detect_STOP(); - - /* look for SCL HIGH to LOW transition */ - if (eeprom_i2c.old_scl && !eeprom_i2c.scl) - { - if (eeprom_i2c.cycles < 9) - { - if ((eeprom_i2c.config.size_mask + 1) < (1 << (9 - eeprom_i2c.cycles))) - { - /* ignored bit (X24C01): slave mask should be right-shifted by one */ - eeprom_i2c.slave_mask >>= 1; - } - else - { - /* this is a WORD ADDRESS high bit */ - if (eeprom_i2c.old_sda) eeprom_i2c.word_address |= (1 << (8 - eeprom_i2c.cycles)); - else eeprom_i2c.word_address &= ~(1 << (8 - eeprom_i2c.cycles)); - } - - eeprom_i2c.cycles ++; - } - else - { - /* ACK CYCLE */ - eeprom_i2c.cycles = 1; - eeprom_i2c.word_address &= eeprom_i2c.config.size_mask; - eeprom_i2c.state = WRITE_DATA; - } - } - break; - } - - /* - * Read Cycle - */ - case READ_DATA: - { - Detect_START(); - Detect_STOP(); - - /* look for SCL HIGH to LOW transition */ - if (eeprom_i2c.old_scl && !eeprom_i2c.scl) - { - if (eeprom_i2c.cycles < 9) eeprom_i2c.cycles ++; - else - { - eeprom_i2c.cycles = 1; - - /* ACK not received */ - if (eeprom_i2c.old_sda) eeprom_i2c.state = WAIT_STOP; - } - } - break; - } - - /* - * Write Cycle - */ - case WRITE_DATA: - { - Detect_START(); - Detect_STOP(); - - /* look for SCL HIGH to LOW transition */ - if (eeprom_i2c.old_scl && !eeprom_i2c.scl) - { - if (eeprom_i2c.cycles < 9) - { - /* Write DATA bits (max 64kBytes) */ - uint16 sram_address = (eeprom_i2c.slave_mask | eeprom_i2c.word_address) & 0xFFFF; - if (eeprom_i2c.old_sda) sram.sram[sram_address] |= (1 << (8 - eeprom_i2c.cycles)); - else sram.sram[sram_address] &= ~(1 << (8 - eeprom_i2c.cycles)); - - if (eeprom_i2c.cycles == 8) - { - /* WORD ADDRESS is incremented (roll up at maximum pagesize) */ - eeprom_i2c.word_address = (eeprom_i2c.word_address & (0xFFFF - eeprom_i2c.config.pagewrite_mask)) | - ((eeprom_i2c.word_address + 1) & eeprom_i2c.config.pagewrite_mask); - } - - eeprom_i2c.cycles ++; - } - else eeprom_i2c.cycles = 1; /* ACK cycle */ - } - break; - } - } - - eeprom_i2c.old_scl = eeprom_i2c.scl; - eeprom_i2c.old_sda = eeprom_i2c.sda; -} - -static unsigned char eeprom_i2c_out(void) -{ - uint8 sda_out = eeprom_i2c.sda; - - /* EEPROM state */ - switch (eeprom_i2c.state) - { - case READ_DATA: - { - if (eeprom_i2c.cycles < 9) - { - /* Return DATA bits (max 64kBytes) */ - uint16 sram_address = (eeprom_i2c.slave_mask | eeprom_i2c.word_address) & 0xffff; - sda_out = (sram.sram[sram_address] >> (8 - eeprom_i2c.cycles)) & 1; - - if (eeprom_i2c.cycles == 8) - { - /* WORD ADDRESS is incremented (roll up at maximum array size) */ - eeprom_i2c.word_address ++; - eeprom_i2c.word_address &= eeprom_i2c.config.size_mask; - } - } - break; - } - - case GET_WORD_ADR_7BITS: - case GET_SLAVE_ADR: - case GET_WORD_ADR_HIGH: - case GET_WORD_ADR_LOW: - case WRITE_DATA: - { - if (eeprom_i2c.cycles == 9) sda_out = 0; - break; - } - - default: - { - break; - } - } - - return (sda_out << eeprom_i2c.config.sda_out_bit); -} - -static unsigned int eeprom_i2c_read_byte(unsigned int address) -{ - if (address == eeprom_i2c.config.sda_out_adr) - { - return eeprom_i2c_out(); - } - - return READ_BYTE(cart.rom, address); -} - -static unsigned int eeprom_i2c_read_word(unsigned int address) -{ - if (address == eeprom_i2c.config.sda_out_adr) - { - return (eeprom_i2c_out() << 8); - } - - if (address == (eeprom_i2c.config.sda_out_adr ^ 1)) - { - return eeprom_i2c_out(); - } - - return *(uint16 *)(cart.rom + address); -} - -static void eeprom_i2c_write_byte(unsigned int address, unsigned int data) -{ - int do_update = 0; - - if (address == eeprom_i2c.config.sda_in_adr) - { - eeprom_i2c.sda = (data >> eeprom_i2c.config.sda_in_bit) & 1; - do_update = 1; - } - - if (address == eeprom_i2c.config.scl_adr) - { - eeprom_i2c.scl = (data >> eeprom_i2c.config.scl_bit) & 1; - do_update = 1; - } - - if (do_update) - { - eeprom_i2c_update(); - return; - } - - m68k_unused_8_w(address, data); -} - -static void eeprom_i2c_write_word(unsigned int address, unsigned int data) -{ - int do_update = 0; - - if (address == eeprom_i2c.config.sda_in_adr) - { - eeprom_i2c.sda = (data >> (8 + eeprom_i2c.config.sda_in_bit)) & 1; - do_update = 1; - } - else if (address == (eeprom_i2c.config.sda_in_adr ^1)) - { - eeprom_i2c.sda = (data >> eeprom_i2c.config.sda_in_bit) & 1; - do_update = 1; - } - - if (address == eeprom_i2c.config.scl_adr) - { - eeprom_i2c.scl = (data >> (8 + eeprom_i2c.config.scl_bit)) & 1; - do_update = 1; - } - else if (address == (eeprom_i2c.config.scl_adr ^1)) - { - eeprom_i2c.scl = (data >> eeprom_i2c.config.scl_bit) & 1; - do_update = 1; - } - - if (do_update) - { - eeprom_i2c_update(); - return; - } - - m68k_unused_16_w(address, data); -} diff --git a/waterbox/gpgx/core/cart_hw/eeprom_i2c.h b/waterbox/gpgx/core/cart_hw/eeprom_i2c.h deleted file mode 100644 index 0740587f8f..0000000000 --- a/waterbox/gpgx/core/cart_hw/eeprom_i2c.h +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * I2C Serial EEPROM (24Cxx) support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _EEPROM_I2C_H_ -#define _EEPROM_I2C_H_ - -typedef struct -{ - uint8 address_bits; /* number of bits needed to address memory: 7, 8 or 16 */ - uint16 size_mask; /* depends on the max size of the memory (in bytes) */ - uint16 pagewrite_mask; /* depends on the maximal number of bytes that can be written in a single write cycle */ - uint32 sda_in_adr; /* 68000 memory address mapped to SDA_IN */ - uint32 sda_out_adr; /* 68000 memory address mapped to SDA_OUT */ - uint32 scl_adr; /* 68000 memory address mapped to SCL */ - uint8 sda_in_bit; /* bit offset for SDA_IN */ - uint8 sda_out_bit; /* bit offset for SDA_OUT */ - uint8 scl_bit; /* bit offset for SCL */ -} T_CONFIG_I2C; - -typedef enum -{ - STAND_BY = 0, - WAIT_STOP, - GET_SLAVE_ADR, - GET_WORD_ADR_7BITS, - GET_WORD_ADR_HIGH, - GET_WORD_ADR_LOW, - WRITE_DATA, - READ_DATA -} T_STATE_I2C; - -typedef struct -{ - uint8 sda; /* current /SDA line state */ - uint8 scl; /* current /SCL line state */ - uint8 old_sda; /* previous /SDA line state */ - uint8 old_scl; /* previous /SCL line state */ - uint8 cycles; /* current operation cycle number (0-9) */ - uint8 rw; /* operation type (1:READ, 0:WRITE) */ - uint16 slave_mask; /* device address (shifted by the memory address width)*/ - uint16 word_address; /* memory address */ - T_STATE_I2C state; /* current operation state */ - T_CONFIG_I2C config; /* EEPROM characteristics for this game */ -} T_EEPROM_I2C; - -extern T_EEPROM_I2C eeprom_i2c; - -/* Function prototypes */ -extern void eeprom_i2c_init(); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/eeprom_spi.c b/waterbox/gpgx/core/cart_hw/eeprom_spi.c deleted file mode 100644 index 268046b9c0..0000000000 --- a/waterbox/gpgx/core/cart_hw/eeprom_spi.c +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * SPI Serial EEPROM (25xxx/95xxx) support - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "eeprom_spi.h" - -/* max supported size 64KB (25x512/95x512) */ -#define SIZE_MASK 0xffff -#define PAGE_MASK 0x7f - -/* hard-coded board implementation (!WP pin not used) */ -#define BIT_DATA (0) -#define BIT_CLK (1) -#define BIT_HOLD (2) -#define BIT_CS (3) - -T_EEPROM_SPI spi_eeprom; - -void eeprom_spi_init() -{ - /* reset eeprom state */ - memset(&spi_eeprom, 0, sizeof(T_EEPROM_SPI)); - spi_eeprom.out = 1; - spi_eeprom.state = GET_OPCODE; - - /* enable backup RAM */ - sram.custom = 2; - sram.on = 1; -} - -void eeprom_spi_write(unsigned char data) -{ - /* Make sure !HOLD is high */ - if (data & (1 << BIT_HOLD)) - { - /* Check !CS state */ - if (data & (1 << BIT_CS)) - { - /* !CS high -> end of current operation */ - spi_eeprom.cycles = 0; - spi_eeprom.out = 1; - spi_eeprom.opcode = 0; - spi_eeprom.state = GET_OPCODE; - } - else - { - /* !CS low -> process current operation */ - switch (spi_eeprom.state) - { - case GET_OPCODE: - { - /* latch data on CLK positive edge */ - if ((data & (1 << BIT_CLK)) && !spi_eeprom.clk) - { - /* 8-bit opcode buffer */ - spi_eeprom.opcode |= ((data >> BIT_DATA) & 1); - spi_eeprom.cycles++; - - /* last bit ? */ - if (spi_eeprom.cycles == 8) - { - /* reset cycles count */ - spi_eeprom.cycles = 0; - - /* Decode instruction */ - switch (spi_eeprom.opcode) - { - case 0x01: - { - /* WRITE STATUS */ - spi_eeprom.buffer = 0; - spi_eeprom.state = WRITE_BYTE; - break; - } - - case 0x02: - { - /* WRITE BYTE */ - spi_eeprom.addr = 0; - spi_eeprom.state = GET_ADDRESS; - break; - } - - case 0x03: - { - /* READ BYTE */ - spi_eeprom.addr = 0; - spi_eeprom.state = GET_ADDRESS; - break; - } - - case 0x04: - { - /* WRITE DISABLE */ - spi_eeprom.status &= ~0x02; - spi_eeprom.state = STANDBY; - break; - } - - case 0x05: - { - /* READ STATUS */ - spi_eeprom.buffer = spi_eeprom.status; - spi_eeprom.state = READ_BYTE; - break; - } - - case 0x06: - { - /* WRITE ENABLE */ - spi_eeprom.status |= 0x02; - spi_eeprom.state = STANDBY; - break; - } - - default: - { - /* specific instructions (not supported) */ - spi_eeprom.state = STANDBY; - break; - } - } - } - else - { - /* shift opcode value */ - spi_eeprom.opcode = spi_eeprom.opcode << 1; - } - } - break; - } - - case GET_ADDRESS: - { - /* latch data on CLK positive edge */ - if ((data & (1 << BIT_CLK)) && !spi_eeprom.clk) - { - /* 16-bit address */ - spi_eeprom.addr |= ((data >> BIT_DATA) & 1); - spi_eeprom.cycles++; - - /* last bit ? */ - if (spi_eeprom.cycles == 16) - { - /* reset cycles count */ - spi_eeprom.cycles = 0; - - /* mask unused address bits */ - spi_eeprom.addr &= SIZE_MASK; - - /* operation type */ - if (spi_eeprom.opcode & 0x01) - { - /* READ operation */ - spi_eeprom.buffer = sram.sram[spi_eeprom.addr]; - spi_eeprom.state = READ_BYTE; - } - else - { - /* WRITE operation */ - spi_eeprom.buffer = 0; - spi_eeprom.state = WRITE_BYTE; - } - } - else - { - /* shift address value */ - spi_eeprom.addr = spi_eeprom.addr << 1; - } - } - break; - } - - case WRITE_BYTE: - { - /* latch data on CLK positive edge */ - if ((data & (1 << BIT_CLK)) && !spi_eeprom.clk) - { - /* 8-bit data buffer */ - spi_eeprom.buffer |= ((data >> BIT_DATA) & 1); - spi_eeprom.cycles++; - - /* last bit ? */ - if (spi_eeprom.cycles == 8) - { - /* reset cycles count */ - spi_eeprom.cycles = 0; - - /* write data to destination */ - if (spi_eeprom.opcode & 0x01) - { - /* update status register */ - spi_eeprom.status = (spi_eeprom.status & 0x02) | (spi_eeprom.buffer & 0x0c); - - /* wait for operation end */ - spi_eeprom.state = STANDBY; - } - else - { - /* Memory Array (write-protected) */ - if (spi_eeprom.status & 2) - { - /* check array protection bits (BP0, BP1) */ - switch ((spi_eeprom.status >> 2) & 0x03) - { - case 0x01: - { - /* $C000-$FFFF (sector #3) is protected */ - if (spi_eeprom.addr < 0xC000) - { - sram.sram[spi_eeprom.addr] = spi_eeprom.buffer; - } - break; - } - - case 0x02: - { - /* $8000-$FFFF (sectors #2 and #3) is protected */ - if (spi_eeprom.addr < 0x8000) - { - sram.sram[spi_eeprom.addr] = spi_eeprom.buffer; - } - break; - } - - case 0x03: - { - /* $0000-$FFFF (all sectors) is protected */ - break; - } - - default: - { - /* no sectors protected */ - sram.sram[spi_eeprom.addr] = spi_eeprom.buffer; - break; - } - } - } - - /* reset data buffer */ - spi_eeprom.buffer = 0; - - /* increase array address (sequential writes are limited within the same page) */ - spi_eeprom.addr = (spi_eeprom.addr & ~PAGE_MASK) | ((spi_eeprom.addr + 1) & PAGE_MASK); - } - } - else - { - /* shift data buffer value */ - spi_eeprom.buffer = spi_eeprom.buffer << 1; - } - } - break; - } - - case READ_BYTE: - { - /* output data on CLK positive edge */ - if ((data & (1 << BIT_CLK)) && !spi_eeprom.clk) - { - /* read out bits */ - spi_eeprom.out = (spi_eeprom.buffer >> (7 - spi_eeprom.cycles)) & 1; - spi_eeprom.cycles++; - - /* last bit ? */ - if (spi_eeprom.cycles == 8) - { - /* reset cycles count */ - spi_eeprom.cycles = 0; - - /* read from memory array ? */ - if (spi_eeprom.opcode == 0x03) - { - /* read next array byte */ - spi_eeprom.addr = (spi_eeprom.addr + 1) & SIZE_MASK; - spi_eeprom.buffer = sram.sram[spi_eeprom.addr]; - } - } - } - break; - } - - default: - { - /* wait for !CS low->high transition */ - break; - } - } - } - } - - /* update input lines */ - spi_eeprom.cs = (data >> BIT_CS) & 1; - spi_eeprom.clk = (data >> BIT_CLK) & 1; -} - -unsigned int eeprom_spi_read(unsigned int address) -{ - return (spi_eeprom.out << BIT_DATA); -} - diff --git a/waterbox/gpgx/core/cart_hw/eeprom_spi.h b/waterbox/gpgx/core/cart_hw/eeprom_spi.h deleted file mode 100644 index 4604383a7c..0000000000 --- a/waterbox/gpgx/core/cart_hw/eeprom_spi.h +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * SPI Serial EEPROM (25XX512 only) support - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _EEPROM_SPI_H_ -#define _EEPROM_SPI_H_ - -typedef enum -{ - STANDBY, - GET_OPCODE, - GET_ADDRESS, - WRITE_BYTE, - READ_BYTE -} T_STATE_SPI; - -typedef struct -{ - uint8 cs; /* !CS line state */ - uint8 clk; /* SCLK line state */ - uint8 out; /* SO line state */ - uint8 status; /* status register */ - uint8 opcode; /* 8-bit opcode */ - uint8 buffer; /* 8-bit data buffer */ - uint16 addr; /* 16-bit address */ - uint32 cycles; /* current operation cycle */ - T_STATE_SPI state; /* current operation state */ -} T_EEPROM_SPI; - -extern T_EEPROM_SPI spi_eeprom; - -/* Function prototypes */ -extern void eeprom_spi_init(); -extern void eeprom_spi_write(unsigned char data); -extern unsigned int eeprom_spi_read(unsigned int address); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/ggenie.c b/waterbox/gpgx/core/cart_hw/ggenie.c deleted file mode 100644 index 156864abba..0000000000 --- a/waterbox/gpgx/core/cart_hw/ggenie.c +++ /dev/null @@ -1,283 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * Game Genie Hardware emulation - * - * Copyright (C) 2009-2011 Eke-Eke (Genesis Plus GX) - * - * Based on documentation from Charles McDonald - * (http://cgfm2.emuviews.com/txt/genie.txt) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 enabled; - uint8 *rom; - uint16 regs[0x20]; - uint16 old[6]; - uint16 data[6]; - uint32 addr[6]; -} ggenie; - -static unsigned int ggenie_read_byte(unsigned int address); -static unsigned int ggenie_read_word(unsigned int address); -static void ggenie_write_byte(unsigned int address, unsigned int data); -static void ggenie_write_word(unsigned int address, unsigned int data); -static void ggenie_write_regs(unsigned int offset, unsigned int data); - -void ggenie_init(void) -{ - int i; - FILE *f; - - memset(&ggenie,0,sizeof(ggenie)); - - /* Store Game Genie ROM (32KB) above cartridge ROM (max. 8MB) */ - if (cart.romsize > 0x800000) return; - ggenie.rom = cart.rom + 0x800000; - - /* Open Game Genie ROM file */ - f = fopen(GG_ROM,"rb"); - if (f == NULL) return; - - /* Load ROM */ - for (i=0; i<0x8000; i+=0x1000) - { - fread(ggenie.rom + i, 0x1000, 1, f); - } - - /* Close ROM file */ - fclose(f); - -#ifdef LSB_FIRST - for (i=0; i<0x8000; i+=2) - { - /* Byteswap ROM */ - uint8 temp = ggenie.rom[i]; - ggenie.rom[i] = ggenie.rom[i+1]; - ggenie.rom[i+1] = temp; - } -#endif - - /* $0000-$7fff mirrored into $8000-$ffff */ - memcpy(ggenie.rom + 0x8000, ggenie.rom, 0x8000); - - /* set flag */ - ggenie.enabled = 1; -} - -void ggenie_shutdown(void) -{ - if (ggenie.enabled) - { - ggenie_switch(0); - ggenie.enabled = 0; - } -} - -void ggenie_reset(int hard) -{ - if (ggenie.enabled) - { - if (hard) - { - /* clear codes */ - ggenie_switch(0); - - /* reset internal state */ - memset(ggenie.regs,0,sizeof(ggenie.regs)); - memset(ggenie.old,0,sizeof(ggenie.old)); - memset(ggenie.data,0,sizeof(ggenie.data)); - memset(ggenie.addr,0,sizeof(ggenie.addr)); - } - - /* Game Genie ROM is mapped at $000000-$007fff */ - m68k.memory_map[0].base = ggenie.rom; - - /* Internal registers are mapped at $000000-$00001f */ - m68k.memory_map[0].write8 = ggenie_write_byte; - m68k.memory_map[0].write16 = ggenie_write_word; - - /* Disable registers reads */ - m68k.memory_map[0].read16 = NULL; - } -} - -void ggenie_switch(int enable) -{ - int i; - if (enable) - { - /* enable cheats */ - for (i=0; i<6; i++) - { - /* patch is enabled ? */ - if (ggenie.regs[0] & (1 << i)) - { - /* save old value and patch ROM if enabled */ - ggenie.old[i] = *(uint16 *)(cart.rom + ggenie.addr[i]); - *(uint16 *)(cart.rom + ggenie.addr[i]) = ggenie.data[i]; - } - } - } - else - { - /* disable cheats in reversed order in case the same address is used by multiple patches */ - for (i=5; i>=0; i--) - { - /* patch is enabled ? */ - if (ggenie.regs[0] & (1 << i)) - { - /* restore original ROM value */ - *(uint16 *)(cart.rom + ggenie.addr[i]) = ggenie.old[i]; - } - } - } -} - -static unsigned int ggenie_read_byte(unsigned int address) -{ - unsigned int data = ggenie.regs[(address >> 1) & 0x1f]; - return ((address & 1) ? (data & 0xff) : ((data >> 8) & 0xff)); -} - -static unsigned int ggenie_read_word(unsigned int address) -{ - return ggenie.regs[(address >> 1) & 0x1f]; -} - -static void ggenie_write_byte(unsigned int address, unsigned int data) -{ - /* Register offset */ - uint8 offset = (address >> 1) & 0x1f; - - /* /LWR and /UWR are used to decode writes */ - if (address & 1) - { - data = (ggenie.regs[offset] & 0xff00) | (data & 0xff); - } - else - { - data = (ggenie.regs[offset] & 0x00ff) | ((data & 0xff) << 8); - } - - /* Update internal register */ - ggenie_write_regs(offset,data); -} - -static void ggenie_write_word(unsigned int address, unsigned int data) -{ - /* Register offset */ - uint8 offset = (address >> 1) & 0x1f; - - /* Write internal register (full WORD) */ - ggenie_write_regs(offset,data); -} - -static void ggenie_write_regs(unsigned int offset, unsigned int data) -{ - /* update internal register */ - ggenie.regs[offset] = data; - - /* Mode Register */ - if (offset == 0) - { - /* MODE bit */ - if (data & 0x400) - { - /* $0000-$7ffff reads mapped to Cartridge ROM */ - m68k.memory_map[0].base = cart.rom; - m68k.memory_map[0].read8 = NULL; - m68k.memory_map[0].read16 = NULL; - } - else - { - /* $0000-$7ffff reads mapped to Game Genie ROM */ - m68k.memory_map[0].base = ggenie.rom; - m68k.memory_map[0].read8 = NULL; - m68k.memory_map[0].read16 = NULL; - - /* READ_ENABLE bit */ - if (data & 0x200) - { - /* $0000-$7ffff reads mapped to Game Genie Registers */ - /* code doing this should execute in RAM so we don't need to modify base address */ - m68k.memory_map[0].read8 = ggenie_read_byte; - m68k.memory_map[0].read16 = ggenie_read_word; - } - } - - /* LOCK bit */ - if (data & 0x100) - { - /* decode patch address (ROM area only)*/ - /* note: Charles's doc is wrong, first register holds bits 23-16 of patch address */ - ggenie.addr[0] = ((ggenie.regs[2] & 0x3f) << 16) | ggenie.regs[3]; - ggenie.addr[1] = ((ggenie.regs[5] & 0x3f) << 16) | ggenie.regs[6]; - ggenie.addr[2] = ((ggenie.regs[8] & 0x3f) << 16) | ggenie.regs[9]; - ggenie.addr[3] = ((ggenie.regs[11] & 0x3f) << 16) | ggenie.regs[12]; - ggenie.addr[4] = ((ggenie.regs[14] & 0x3f) << 16) | ggenie.regs[15]; - ggenie.addr[5] = ((ggenie.regs[17] & 0x3f) << 16) | ggenie.regs[18]; - - /* decode patch data */ - ggenie.data[0] = ggenie.regs[4]; - ggenie.data[1] = ggenie.regs[7]; - ggenie.data[2] = ggenie.regs[10]; - ggenie.data[3] = ggenie.regs[13]; - ggenie.data[4] = ggenie.regs[16]; - ggenie.data[5] = ggenie.regs[19]; - - /* disable internal registers */ - m68k.memory_map[0].write8 = m68k_unused_8_w; - m68k.memory_map[0].write16 = m68k_unused_16_w; - - /* patch ROM when GG program exits (LOCK bit set) */ - /* this is done here to handle patched program reads faster & more easily */ - /* on real HW, address decoding would be done on each reads */ - ggenie_switch(1); - } - else - { - m68k.memory_map[0].write8 = ggenie_write_byte; - m68k.memory_map[0].write16 = ggenie_write_word; - } - } - - /* RESET register */ - else if (offset == 1) - { - ggenie.regs[1] |= 1; - } -} diff --git a/waterbox/gpgx/core/cart_hw/ggenie.h b/waterbox/gpgx/core/cart_hw/ggenie.h deleted file mode 100644 index 45b9cd8965..0000000000 --- a/waterbox/gpgx/core/cart_hw/ggenie.h +++ /dev/null @@ -1,51 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * Game Genie Hardware emulation - * - * Copyright (C) 2009-2011 Eke-Eke (Genesis Plus GX) - * - * Based on documentation from Charles McDonald - * (http://cgfm2.emuviews.com/txt/genie.txt) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _GGENIE_H_ -#define _GGENIE_H_ - -/* Function prototypes */ -extern void ggenie_init(void); -extern void ggenie_shutdown(void); -extern void ggenie_reset(int hard); -extern void ggenie_switch(int enable); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/md_cart.c b/waterbox/gpgx/core/cart_hw/md_cart.c deleted file mode 100644 index ae6acb2771..0000000000 --- a/waterbox/gpgx/core/cart_hw/md_cart.c +++ /dev/null @@ -1,2101 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * Mega Drive cartridge hardware support - * - * Copyright (C) 2007-2020 Eke-Eke (Genesis Plus GX) - * - * Many cartridge protections were initially documented by Haze - * (http://haze.mameworld.info/) - * - * Realtec mapper was documented by TascoDeluxe - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "eeprom_i2c.h" -#include "eeprom_spi.h" -#include "gamepad.h" -#include - -/* Cart database entry */ -typedef struct -{ - uint16 chk_1; /* header checksum */ - uint16 chk_2; /* real checksum */ - uint8 bank_start; /* first mapped bank in $400000-$7fffff region */ - uint8 bank_end; /* last mapped bank in $400000-$7fffff region */ - cart_hw_t cart_hw; /* hardware description */ -} md_entry_t; - -/* Function prototypes */ -static void mapper_sega_w(uint32 data); -static void mapper_512k_w(uint32 address, uint32 data); -static void mapper_ssf2_w(uint32 address, uint32 data); -static void mapper_sf001_w(uint32 address, uint32 data); -static void mapper_sf002_w(uint32 address, uint32 data); -static void mapper_sf004_w(uint32 address, uint32 data); -static uint32 mapper_sf004_r(uint32 address); -static void mapper_t5740_w(uint32 address, uint32 data); -static uint32 mapper_t5740_r(uint32 address); -static void mapper_flashkit_w(uint32 address, uint32 data); -static uint32 mapper_flashkit_r(uint32 address); -static uint32 mapper_smw_64_r(uint32 address); -static void mapper_smw_64_w(uint32 address, uint32 data); -static void mapper_realtec_w(uint32 address, uint32 data); -static void mapper_seganet_w(uint32 address, uint32 data); -static void mapper_32k_w(uint32 data); -static void mapper_64k_w(uint32 data); -static void mapper_64k_multi_w(uint32 address); -static uint32 mapper_128k_multi_r(uint32 address); -static void mapper_256k_multi_w(uint32 address, uint32 data); -static void mapper_wd1601_w(uint32 address, uint32 data); -static uint32 mapper_64k_radica_r(uint32 address); -static uint32 mapper_128k_radica_r(uint32 address); -static void default_time_w(uint32 address, uint32 data); -static void default_regs_w(uint32 address, uint32 data); -static uint32 default_regs_r(uint32 address); -static uint32 default_regs_r_16(uint32 address); -static uint32 custom_regs_r(uint32 address); -static void custom_regs_w(uint32 address, uint32 data); -static void custom_alt_regs_w(uint32 address, uint32 data); -static uint32 topshooter_r(uint32 address); -static void topshooter_w(uint32 address, uint32 data); -static uint32 tekken_regs_r(uint32 address); -static void tekken_regs_w(uint32 address, uint32 data); - -/* Games that need extra hardware emulation: - - copy protection device - - custom ROM banking device -*/ -static const md_entry_t rom_database[] = -{ -/* Funny World & Balloon Boy */ - {0x0000,0x06ab,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},1,0,NULL,NULL,NULL,mapper_realtec_w}}, -/* Whac-a-Critter */ - {0xffff,0xf863,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},1,0,NULL,NULL,NULL,mapper_realtec_w}}, -/* Earth Defense */ - {0xffff,0x44fb,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},1,0,NULL,NULL,NULL,mapper_realtec_w}}, -/* Tom Clown */ - {0x0000,0xc0cd,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},1,0,NULL,NULL,NULL,mapper_realtec_w}}, - -/* 1800-in-1 */ - {0x3296,0x2370,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,1,mapper_128k_multi_r,m68k_unused_8_w,NULL,NULL}}, - -/* Golden Mega 250-in-1 */ - {0xe43c,0x886f,0x08,0x08,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,1,NULL,m68k_unused_8_w,NULL,mapper_256k_multi_w}}, - -/* RADICA (Volume 1) (bad dump ?) */ - {0x0000,0x2326,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,1,mapper_64k_radica_r,m68k_unused_8_w,NULL,NULL}}, -/* RADICA (Volume 1) */ - {0x24f4,0xfc84,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,mapper_64k_radica_r,m68k_unused_8_w,NULL,NULL}}, -/* RADICA (Volume 2) */ - {0xd951,0x78d0,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,mapper_64k_radica_r,m68k_unused_8_w,NULL,NULL}}, -/* RADICA (Volume 3 - Super Sonic Gold edition) */ - {0x0000,0x1f25,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,mapper_64k_radica_r,m68k_unused_8_w,NULL,NULL}}, -/* RADICA (Street Fighter II CE edition) */ - {0x1add,0xa838,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,mapper_64k_radica_r,m68k_unused_8_w,NULL,NULL}}, -/* RADICA (Street Fighter II CE edition) (PAL) */ - {0x104f,0x32e9,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,mapper_64k_radica_r,m68k_unused_8_w,NULL,NULL}}, -/* RADICA (Sensible Soccer Plus edition) (PAL) */ - {0x0000,0x1f7f,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,mapper_128k_radica_r,m68k_unused_8_w,NULL,NULL}}, - - -/* Tenchi wo Kurau III: Sangokushi Gaiden - Chinese Fighter */ - {0x9490,0x8180,0x40,0x6f,{{0x00,0x00,0x00,0x00},{0xf0000c,0xf0000c,0xf0000c,0xf0000c},{0x400000,0x400004,0x400008,0x40000c},0,1,NULL,NULL,default_regs_r,custom_alt_regs_w}}, - - -/* Top Fighter */ - {0x4eb9,0x5d8b,0x60,0x7f,{{0x00,0x00,0x00,0x00},{0xf00007,0xf00007,0xf00007,0xffffff},{0x600001,0x600003,0x600005,0x000000},0,1,NULL,NULL,default_regs_r,custom_regs_w}}, -/* Soul Edge VS Samurai Spirits */ - {0x00ff,0x5d34,0x60,0x7f,{{0x00,0x00,0x00,0x00},{0xf00007,0xf00007,0xf00007,0xffffff},{0x600001,0x600003,0x600005,0x000000},0,1,NULL,NULL,default_regs_r,custom_regs_w}}, -/* Mulan */ - {0x0404,0x1b40,0x60,0x7f,{{0x00,0x00,0x00,0x00},{0xf00007,0xf00007,0xf00007,0xffffff},{0x600001,0x600003,0x600005,0x000000},0,1,NULL,NULL,default_regs_r,custom_regs_w}}, -/* Pocket Monsters II */ - {0x47f9,0x17e5,0x60,0x7f,{{0x00,0x00,0x00,0x00},{0xf00007,0xf00007,0xf00007,0xffffff},{0x600001,0x600003,0x600005,0x000000},0,1,NULL,NULL,default_regs_r,custom_regs_w}}, -/* Lion King 3 */ - {0x0000,0x507c,0x60,0x7f,{{0x00,0x00,0x00,0x00},{0xf00007,0xf00007,0xf00007,0xffffff},{0x600001,0x600003,0x600005,0x000000},0,1,NULL,NULL,default_regs_r,custom_regs_w}}, -/* Super King Kong 99 */ - {0x0000,0x7d6e,0x60,0x7f,{{0x00,0x00,0x00,0x00},{0xf00007,0xf00007,0xf00007,0xffffff},{0x600001,0x600003,0x600005,0x000000},0,1,NULL,NULL,default_regs_r,custom_regs_w}}, -/* Gunfight 3-in-1 */ - {0x0000,0x6ff8,0x60,0x7f,{{0x00,0x00,0x00,0x00},{0xf00007,0xf00007,0xf00007,0xffffff},{0x600001,0x600003,0x600005,0x000000},0,1,NULL,NULL,default_regs_r,custom_regs_w}}, -/* Pokemon Stadium */ - {0x0000,0x843c,0x70,0x7f,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,1,NULL,NULL,NULL,custom_regs_w}}, - - -/* Tekken 3 Special (original dump) (a bootleg version also exists, with patched protection & different boot routine which reads unused !TIME mapped area) */ - {0x0000,0xc2f0,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,NULL,NULL,tekken_regs_r,tekken_regs_w}}, - - -/* Lion King 2 */ - {0xffff,0x1d9b,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xfffffd,0xfffffd,0xffffff,0xffffff},{0x400000,0x400004,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,default_regs_w}}, -/* Squirell King */ - {0x0000,0x8ec8,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xfffffd,0xfffffd,0xffffff,0xffffff},{0x400000,0x400004,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,default_regs_w}}, -/* Tiny Toon Adventures 3 */ - {0x2020,0xed9c,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xfffffd,0xfffffd,0xffffff,0xffffff},{0x400000,0x400004,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,default_regs_w}}, -/* Lian Huan Pao - Barver Battle Saga (registers accessed by Z80, related to sound engine ?) */ - {0x30b9,0x1c2a,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xfffffd,0xfffffd,0xffffff,0xffffff},{0x400000,0x400004,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,default_regs_w}}, -/* Shui Hu Zhuan (registers accessed by Z80, related to sound engine ?) */ - {0x6001,0x0211,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xfffffd,0xfffffd,0xffffff,0xffffff},{0x400000,0x400004,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,default_regs_w}}, -/* Feng Shen Ying Jie Chuan (registers accessed by Z80, related to sound engine ?) */ - {0xffff,0x5d98,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xfffffd,0xfffffd,0xffffff,0xffffff},{0x400000,0x400004,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,default_regs_w}}, -/* (*) Shui Hu - Feng Yun Zhuan (patched ROM, unused registers) */ - {0x3332,0x872b,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xfffffd,0xfffffd,0xffffff,0xffffff},{0x400000,0x400004,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,default_regs_w}}, - - -/* (*) Chao Ji Da Fu Weng (patched ROM, various words witten to register, long word also read from $7E0000, unknown banking hardware ?) */ - {0xa697,0xa697,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x000000,0x000000,0x000000},0,0,NULL,NULL,NULL,default_regs_w}}, - -/* (*) Aq Renkan Awa (patched ROM, ON/OFF bit sequence is written to register, unknown banking hardware ?) */ - {0x8104,0x0517,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400001,0x000000,0x000000,0x000000},0,0,NULL,NULL,NULL,default_regs_w}}, - - -/* (*) Tun Shi Tian Di III (patched ROM, unused register) */ - {0x0000,0x9c5e,0x40,0x40,{{0xab,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400046,0x000000,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,NULL}}, - - -/* Ma Jiang Qing Ren - Ji Ma Jiang Zhi */ - {0x0000,0x7037,0x40,0x40,{{0x90,0xd3,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x401000,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Super Majon Club */ - {0x0000,0x3b95,0x40,0x40,{{0x90,0xd3,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x401000,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Feng Kuang Tao Hua Yuan (original version from Creaton Softec Inc) (a bootleg version also exists with patched protection and minor title screen variations) */ - {0x0000,0x9dc4,0x40,0x40,{{0x90,0xd3,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x401000,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,NULL}}, - - -/* (*) Jiu Ji Ma Jiang II - Ye Yan Bian (patched ROM, using expected register value - $0f - crashes the game) (uses 16-bits reads) */ - {0x0c44,0xba81,0x40,0x40,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x400006},0,0,NULL,NULL,default_regs_r_16,NULL}}, -/* 16 Zhang Ma Jiang (uses 16-bits reads) */ - {0xfb40,0x4bed,0x40,0x40,{{0x00,0xaa,0x00,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x400002,0x000000,0x400006},0,0,NULL,NULL,default_regs_r_16,NULL}}, -/* 16 Tiles Mahjong II (uses 16-bits reads) */ - {0xffff,0x0903,0x40,0x40,{{0x00,0x00,0xc9,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x400004,0x000000},0,0,NULL,NULL,default_regs_r_16,NULL}}, -/* Thunderbolt II (uses 16-bits reads) */ - {0x0000,0x1585,0x40,0x40,{{0x55,0x0f,0xaa,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r_16,NULL}}, - - -/* Chaoji Puke - Super Poker (correct ROM dump, original release is an overdump) */ - {0xffff,0xd7b0,0x40,0x40,{{0x55,0x0f,0xaa,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Super Bubble Bobble */ - {0x0000,0x16cd,0x40,0x40,{{0x55,0x0f,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x000000,0x000000},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Tenchi wo Kurau II - The Battle of Red Cliffs (Unl) */ - {0x0000,0xed61,0x40,0x40,{{0x55,0x0f,0xaa,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Huan Le Tao Qi Shu - Smart Mouse */ - {0x0000,0x1a28,0x40,0x40,{{0x55,0x0f,0xaa,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* (*) Hei Tao 2 - Super Big 2 (patched ROM, unused registers) */ - {0x0000,0x5843,0x40,0x40,{{0x55,0x0f,0xaa,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Mighty Morphin Power Rangers - The Fighting Edition */ - {0x0000,0x2288,0x40,0x40,{{0x55,0x0f,0xc9,0x18},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Elf Wor */ - {0x0080,0x3dba,0x40,0x40,{{0x55,0x0f,0xc9,0x18},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Ya-Se Chuanshuo */ - {0xffff,0xd472,0x40,0x40,{{0x63,0x98,0xc9,0x18},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* 777 Casino (For first one, 0x55 works as well. Other values are never used so they are guessed from on other unlicensed games using similar mapper) */ - {0x0000,0xf8d9,0x40,0x40,{{0x63,0x98,0xc9,0x18},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Wu Kong Wai Zhuan (original) (a bootleg version also exists, with patched protection & modified SRAM test routine ?) */ - {0x0000,0x19ff,0x40,0x40,{{0x63,0x98,0xc9,0x18},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, -/* Soul Blade */ - {0x0000,0x0c5b,0x40,0x40,{{0x63,0x98,0xc9,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r,NULL}}, - - -/* King of Fighter 98 */ - {0x0000,0xd0a0,0x48,0x4f,{{0x00,0x00,0xaa,0xf0},{0xffffff,0xffffff,0xfc0000,0xfc0000},{0x000000,0x000000,0x480000,0x4c0000},0,0,NULL,NULL,default_regs_r,NULL}}, - - -/* Rockman X3 (bootleg version ? two last register returned values are ignored, note that 0xaa/0x18 would work as well) */ - {0x0000,0x9d0e,0x40,0x40,{{0x0c,0x00,0xc9,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0x000000,0x400004,0x400006},0,0,default_regs_r,NULL,default_regs_r,NULL}}, - - -/* (*) Dragon Ball Final Bout (patched ROM, in original code, different switches occurs depending on returned value $00-$0f) */ - {0xc65a,0xc65a,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0x000000,0x000000,0x000000},0,0,default_regs_r,NULL,NULL,NULL}}, -/* (*) Yang Jia Jiang - Yang Warrior Family (patched ROM, register value unused) */ - {0x0000,0x96b0,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0x000000,0x000000,0x000000},0,0,default_regs_r,NULL,NULL,NULL}}, -/* Super Mario 2 1998 */ - {0xffff,0x0474,0x00,0x00,{{0x0a,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0x000000,0x000000,0x000000},0,0,default_regs_r,NULL,NULL,NULL}}, -/* Super Mario World */ - {0x2020,0xb4eb,0x00,0x00,{{0x1c,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0x000000,0x000000,0x000000},0,0,default_regs_r,NULL,NULL,NULL}}, - - -/* King of Fighter 99 */ - {0x0000,0x021e,0x00,0x00,{{0x00,0x01,0x1f,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0xa13002,0xa1303e,0x000000},0,0,custom_regs_r,default_regs_w,NULL,NULL}}, -/* Pocket Monster */ - {0xd6fc,0x1eb1,0x00,0x00,{{0x00,0x01,0x1f,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0xa13002,0xa1303e,0x000000},0,0,custom_regs_r,default_regs_w,NULL,NULL}}, -/* Pocket Monster (bootleg version ? two last register returned values are ignored & first register test has been modified) */ - {0xd6fc,0x6319,0x00,0x00,{{0x14,0x01,0x1f,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0xa13002,0xa1303e,0x000000},0,0,default_regs_r,m68k_unused_8_w,NULL,NULL}}, -/* A Bug's Life (bootleg version ? two last register returned values are ignored & first register test has been modified ?) */ - {0x7f7f,0x2aad,0x00,0x00,{{0x28,0x01,0x1f,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0xa13000,0xa13002,0xa1303e,0x000000},0,0,default_regs_r,m68k_unused_8_w,NULL,NULL}}, - - -/* Game no Kanzume Otokuyou */ - {0x0000,0xf9d1,0x00,0x00,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,NULL,mapper_seganet_w,NULL,NULL}}, - - -/* Top Shooter (arcade hardware) */ - {0xffff,0x3632,0x20,0x20,{{0x00,0x00,0x00,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x000000,0x000000},0,0,NULL,NULL,topshooter_r,topshooter_w}} -}; - - -/************************************************************ - Cart Hardware initialization -*************************************************************/ - -void md_cart_init(void) -{ - int i; - - /*************************************************************************************************************** - CARTRIDGE ROM MIRRORING - *************************************************************************************************************** - - MD Cartridge area is mapped to $000000-$3fffff: - - -> when accessing ROM, 68k address lines A1 to A21 can be used by the internal cartridge hardware to decode - full 4MB address range. - -> depending on ROM total size and additional decoding hardware, some address lines might be ignored, - resulting in ROM mirroring. - - Cartridges can use either 8-bits (x2) or 16-bits (x1, x2) Mask ROM chips, each chip size is a factor of 2 bytes: - - -> two 8-bits chips are equivalent to one 16-bits chip, no specific address decoding is required, needed - address lines are simply connected to each chip, upper address lines are ignored and data lines are - connected appropriately to each chip (D0-D7 to one chip, D8-D15 to the other one). - ROM is generally mirrored each N bytes where N=2^(k+1) is the total ROM size (ROM1+ROM2,ROM1+ROM2,...) - - -> one single 16-bits chip do not need specific address decoding, address lines are simply connected - depending on the ROM size, upper address lines being ignored. - ROM is generally mirrored each N bytes where N=2^k is the size of the ROM chip (ROM1,ROM1,ROM1,...) - - -> two 16-bits chips of the same size are equivalent to one chip of double size, address decoding generally - is the same except that specific hardware is used (one address line is generally used for chip selection, - lower ones being used to address the chips and upper ones being ignored). - ROM is generally mirrored each N bytes where N=2^(k+1) is the total ROM size (ROM1,ROM2,ROM1,ROM2,...) - - -> two 16-bits chips with different size are mapped differently. Address decoding is done the same way as - above (one address line used for chip selection) but the ignored & required address lines differ from - one chip to another, which makes ROM mirroring different. - ROM2 size is generally half of ROM1 size and upper half ignored (ROM1,ROM2,XXXX,ROM1,ROM2,XXXX,...) - - From the emulator point of view, we only need to distinguish 2 cases: - - 1/ total ROM size is a factor of 2: ROM is mirrored each 2^k bytes. - - 2/ total ROM size is not a factor of 2: ROM is padded up to 2^k then mirrored each 2^k bytes. - - ******************************************************************************************************************/ - - /* calculate nearest size with factor of 2 */ - unsigned int size = 0x10000; - while (cart.romsize > size) - size <<= 1; - - /* Sonic & Knuckles */ - if (strstr(rominfo.international,"SONIC & KNUCKLES")) - { - /* disable ROM mirroring at $200000-$3fffff (normally mapped to external cartridge) */ - size = 0x400000; - } - - /* total ROM size is not a factor of 2 */ - /* TODO: handle all possible ROM configurations using cartridge database */ - if (cart.romsize < size) - { - if (size < MAXROMSIZE) - { - /* ROM is padded up to 2^k bytes */ - memset(cart.rom + cart.romsize, 0xff, size - cart.romsize); - } - else - { - /* ROM is padded up to max ROM size */ - memset(cart.rom + cart.romsize, 0xff, MAXROMSIZE - cart.romsize); - } - } - - /* ROM is mirrored each 2^k bytes */ - cart.mask = size - 1; - - /* no special external hardware required by default */ - cart.special = 0; - - /********************************************** - DEFAULT CARTRIDGE MAPPING - ***********************************************/ - for (i=0; i<0x40; i++) - { - /* cartridge ROM */ - m68k.memory_map[i].base = cart.rom + ((i<<16) & cart.mask); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = NULL; - zbank_memory_map[i].write = zbank_unused_w; - } - - for (i=0x40; i<0x80; i++) - { - /* unused area */ - m68k.memory_map[i].base = cart.rom + (i<<16); - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = zbank_unused_r; - zbank_memory_map[i].write = zbank_unused_w; - } - - /* support for Quackshot REV 01 (real) dump */ - if (strstr(rominfo.product,"00004054-01") && (cart.romsize == 0x80000)) - { - /* $000000-$0fffff: first 256K mirrored (A18 not connected to ROM chip, A19 not decoded) */ - for (i=0x00; i<0x10; i++) - { - /* $200000-$3fffff: mirror of $000000-$1fffff (A21 not decoded) */ - m68k.memory_map[i].base = m68k.memory_map[i + 0x20].base = cart.rom + ((i & 0x03) << 16); - } - - /* $100000-$1fffff: second 256K mirrored (A20 connected to ROM chip A18) */ - for (i=0x10; i<0x20; i++) - { - /* $200000-$3fffff: mirror of $000000-$1fffff (A21 not decoded) */ - m68k.memory_map[i].base = m68k.memory_map[i + 0x20].base = cart.rom + 0x40000 + ((i & 0x03) << 16); - } - } - - /********************************************** - BACKUP MEMORY - ***********************************************/ - sram_init(); - eeprom_i2c_init(); - - /* memory-mapped SRAM */ - if (sram.on && !sram.custom) - { - /* SRAM is mapped by default unless it overlaps with ROM area (Phantasy Star 4, Beyond Oasis/Legend of Thor, World Series Baseball 9x, Duke Nukem 3D,...) */ - if (sram.start >= cart.romsize) - { - m68k.memory_map[sram.start >> 16].base = sram.sram; - m68k.memory_map[sram.start >> 16].read8 = sram_read_byte; - m68k.memory_map[sram.start >> 16].read16 = sram_read_word; - m68k.memory_map[sram.start >> 16].write8 = sram_write_byte; - m68k.memory_map[sram.start >> 16].write16 = sram_write_word; - zbank_memory_map[sram.start >> 16].read = sram_read_byte; - zbank_memory_map[sram.start >> 16].write = sram_write_byte; - } - - /* support for Triple Play 96 & Triple Play - Gold Edition mapping */ - else if ((strstr(rominfo.product,"T-172026") != NULL) || (strstr(rominfo.product,"T-172116") != NULL)) - { - /* $000000-$1fffff: cartridge ROM (lower 2MB) */ - /* $200000-$2fffff: SRAM (32KB mirrored) */ - /* NB: existing 4MB ROM dumps include SRAM data at ROM offsets 0x200000-0x2fffff */ - for (i=0x20; i<0x30; i++) - { - m68k.memory_map[i].base = sram.sram; - m68k.memory_map[i].read8 = sram_read_byte; - m68k.memory_map[i].read16 = sram_read_word; - m68k.memory_map[i].write8 = sram_write_byte; - m68k.memory_map[i].write16 = sram_write_word; - zbank_memory_map[i].read = sram_read_byte; - zbank_memory_map[i].write = sram_write_byte; - } - - /* $300000-$3fffff: cartridge ROM (upper 1MB) */ - /* NB: only real (3MB) Mask ROM dumps need ROM offsets 0x200000-0x2fffff to be remapped to this area */ - if (READ_BYTE(cart.rom, 0x200000) != 0xFF) - { - for (i=0x30; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + ((i - 0x10) << 16); - } - } - } - } - - /********************************************** - SVP CHIP - ***********************************************/ - svp = NULL; - if (strstr(rominfo.international,"Virtua Racing")) - { - svp_init(); - } - - /********************************************** - LOCK-ON - ***********************************************/ - - /* clear existing patches */ - ggenie_shutdown(); - areplay_shutdown(); - - /* initialize extra hardware */ - switch (config.lock_on) - { - case TYPE_GG: - { - ggenie_init(); - break; - } - - case TYPE_AR: - { - areplay_init(); - break; - } - - case TYPE_SK: - { - /* store Sonic & Knuckles ROM files after cartridge ROM area */ - if (cart.romsize > 0x400000) break; - - /* try to load Sonic & Knuckles ROM file (2MB) */ - if (load_archive(SK_ROM, cart.rom + 0x400000, 0x200000, NULL) == 0x200000) - { - /* check ROM header */ - if (!memcmp(cart.rom + 0x400000 + 0x120, "SONIC & KNUCKLES",16)) - { - /* try to load Sonic 2 & Knuckles upmem ROM file (256KB) */ - if (load_archive(SK_UPMEM, cart.rom + 0x600000, 0x40000, NULL) == 0x40000) - { - /* $000000-$1FFFFF is mapped to S&K ROM */ - for (i=0x00; i<0x20; i++) - { - m68k.memory_map[i].base = cart.rom + 0x400000 + (i << 16); - } - -#ifdef LSB_FIRST - for (i=0; i<0x200000; i+=2) - { - /* Byteswap ROM */ - uint8 temp = cart.rom[i + 0x400000]; - cart.rom[i + 0x400000] = cart.rom[i + 0x400000 + 1]; - cart.rom[i + 0x400000 + 1] = temp; - } - - for (i=0; i<0x40000; i+=2) - { - /* Byteswap ROM */ - uint8 temp = cart.rom[i + 0x600000]; - cart.rom[i + 0x600000] = cart.rom[i + 0x600000 + 1]; - cart.rom[i + 0x600000 + 1] = temp; - } -#endif - cart.special |= HW_LOCK_ON; - } - } - } - break; - } - - default: - { - break; - } - } - - /********************************************** - CARTRIDGE EXTRA HARDWARE - ***********************************************/ - memset(&cart.hw, 0, sizeof(cart.hw)); - - /* search for game into database */ - for (i=0; i<(sizeof(rom_database)/sizeof(md_entry_t)); i++) - { - /* known cart found ! */ - if ((rominfo.checksum == rom_database[i].chk_1) && - (rominfo.realchecksum == rom_database[i].chk_2)) - { - int j = rom_database[i].bank_start; - - /* retrieve hardware information */ - memcpy(&cart.hw, &(rom_database[i].cart_hw), sizeof(cart.hw)); - - /* initialize memory handlers for $400000-$7FFFFF region */ - while (j <= rom_database[i].bank_end) - { - if (cart.hw.regs_r) - { - m68k.memory_map[j].read8 = cart.hw.regs_r; - m68k.memory_map[j].read16 = cart.hw.regs_r; - zbank_memory_map[j].read = cart.hw.regs_r; - } - if (cart.hw.regs_w) - { - m68k.memory_map[j].write8 = cart.hw.regs_w; - m68k.memory_map[j].write16 = cart.hw.regs_w; - zbank_memory_map[j].write = cart.hw.regs_w; - } - j++; - } - - /* leave loop */ - break; - } - } - - /* Realtec mapper */ - if (cart.hw.realtec) - { - /* copy 8KB Boot ROM after cartridge ROM area */ - for (i=0; i<8; i++) - { - memcpy(cart.rom + 0x400000 + i*0x2000, cart.rom + 0x7e000, 0x2000); - } - - /* Boot ROM (8KB mirrored) is mapped to $000000-$3FFFFF */ - for (i=0x00; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + 0x400000; - } - } - - /* detect specific mappers */ - if (strstr(rominfo.consoletype,"SEGA SSF")) - { - /* Everdrive extended SSF mapper */ - cart.hw.time_w = mapper_512k_w; - - /* cartridge ROM mapping is reinitialized on /VRES */ - cart.hw.bankshift = 1; - } - else if (strstr(rominfo.domestic,"SUPER STREET FIGHTER2")) - { - /* SSF2 mapper */ - cart.hw.time_w = mapper_ssf2_w; - - /* cartridge ROM mapping is reinitialized on /VRES */ - cart.hw.bankshift = 1; - } - else if (strstr(rominfo.product,"T-5740")) - { - /* T-5740XX-XX mapper */ - cart.hw.bankshift = 1; - m68k.memory_map[0x01].read8 = mapper_t5740_r; - zbank_memory_map[0x01].read = mapper_t5740_r; - - /* specific !TIME handlers */ - cart.hw.time_w = mapper_t5740_w; - cart.hw.time_r = eeprom_spi_read; - - /* initialize SPI EEPROM board */ - eeprom_spi_init(); - } - else if (strstr(rominfo.ROMType,"SF") && strstr(rominfo.product,"001")) - { - /* SF-001 mapper */ - m68k.memory_map[0x00].write8 = mapper_sf001_w; - m68k.memory_map[0x00].write16 = mapper_sf001_w; - zbank_memory_map[0x00].write = mapper_sf001_w; - - /* no !TIME handler */ - cart.hw.time_w = m68k_unused_8_w; - - /* cartridge ROM is mapped to $3C0000-$3FFFFF on reset */ - for (i=0x3c; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + (i << 16); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = NULL; - zbank_memory_map[i].write = m68k_unused_8_w; - } - } - else if (strstr(rominfo.ROMType,"SF") && strstr(rominfo.product,"002")) - { - /* SF-002 mapper */ - m68k.memory_map[0x00].write8 = mapper_sf002_w; - m68k.memory_map[0x00].write16 = mapper_sf002_w; - zbank_memory_map[0x00].write = mapper_sf002_w; - - /* no !TIME handler */ - cart.hw.time_w = m68k_unused_8_w; - } - else if (strstr(rominfo.ROMType,"SF") && strstr(rominfo.product,"004")) - { - /* SF-004 mapper */ - m68k.memory_map[0x00].write8 = mapper_sf004_w; - m68k.memory_map[0x00].write16 = mapper_sf004_w; - zbank_memory_map[0x00].write = mapper_sf004_w; - - /* specific !TIME handlers */ - cart.hw.time_r = mapper_sf004_r; - cart.hw.time_w = m68k_unused_8_w; - - /* first 256K ROM bank is mirrored into $000000-$1FFFFF on reset */ - for (i=0x00; i<0x20; i++) - { - m68k.memory_map[i].base = cart.rom + ((i & 0x03) << 16); - } - - /* 32K static RAM mapped to $200000-$2FFFFF is disabled on reset */ - for (i=0x20; i<0x30; i++) - { - m68k.memory_map[i].base = sram.sram; - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = m68k_read_bus_8; - zbank_memory_map[i].write = zbank_unused_w; - } - - /* $300000-$3FFFFF is not mapped */ - for (i=0x30; i<0x40; i++) - { - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = m68k_read_bus_8; - zbank_memory_map[i].write = zbank_unused_w; - } - } - else if (strstr(rominfo.ROMType,"GM") && strstr(rominfo.product,"00000000-42")) - { - /* Flashkit MD mapper */ - m68k.memory_map[0x00].write8 = mapper_flashkit_w; - m68k.memory_map[0x00].write16 = mapper_flashkit_w; - zbank_memory_map[0x00].write = mapper_flashkit_w; - } - else if ((cart.romsize = 0x400000) && - (READ_BYTE(cart.rom, 0x200150) == 'C') && - (READ_BYTE(cart.rom, 0x200151) == 'A') && - (READ_BYTE(cart.rom, 0x200152) == 'N') && - (READ_BYTE(cart.rom, 0x200153) == 'O') && - (READ_BYTE(cart.rom, 0x200154) == 'N')) - { - /* Canon - Legend of the new Gods (4MB dump) */ - cart.hw.time_w = mapper_wd1601_w; - cart.hw.bankshift = 1; - sram.on = 1; - sram.start = 0x200000; - sram.end = 0x201fff; - } - else if ((*(uint16 *)(cart.rom + 0x08) == 0x6000) && (*(uint16 *)(cart.rom + 0x0a) == 0x01f6) && (rominfo.realchecksum == 0xf894)) - { - /* Super Mario World 64 (unlicensed) mapper */ - for (i=0x08; i<0x10; i++) - { - /* lower 512KB mirrored */ - m68k.memory_map[i].base = cart.rom + ((i & 7) << 16); - } - - for (i=0x10; i<0x40; i++) - { - /* unused area */ - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = m68k_read_bus_8; - zbank_memory_map[i].write = zbank_unused_w; - } - - for (i=0x60; i<0x70; i++) - { - /* custom hardware */ - m68k.memory_map[i].base = cart.rom + 0x0f0000; - m68k.memory_map[i].read8 = ((i & 0x07) < 0x04) ? NULL : mapper_smw_64_r; - m68k.memory_map[i].read16 = ((i & 0x07) < 0x04) ? NULL : mapper_smw_64_r; - m68k.memory_map[i].write8 = mapper_smw_64_w; - m68k.memory_map[i].write16 = mapper_smw_64_w; - zbank_memory_map[i].read = ((i & 0x07) < 0x04) ? NULL : mapper_smw_64_r; - zbank_memory_map[i].write = mapper_smw_64_w; - } - } - else if (cart.romsize > 0x400000) - { - /* assume linear ROM mapping by default (max. 10MB) */ - for (i=0x40; i<0xA0; i++) - { - m68k.memory_map[i].base = cart.rom + (i<<16); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - zbank_memory_map[i].read = NULL; - } - } - - /* default write handler for !TIME range ($A130xx)*/ - if (!cart.hw.time_w) - { - cart.hw.time_w = default_time_w; - } -} - -/* hardware that need to be reseted on power on */ -void md_cart_reset(int hard_reset) -{ - int i; - - /* reset cartridge mapping */ - if (cart.hw.bankshift) - { - for (i=0x00; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + ((i<<16) & cart.mask); - } - } - - /* SVP chip */ - if (svp) - { - svp_reset(); - } - - /* Lock-ON */ - switch (config.lock_on) - { - case TYPE_GG: - { - ggenie_reset(hard_reset); - break; - } - - case TYPE_AR: - { - areplay_reset(hard_reset); - break; - } - - case TYPE_SK: - { - if (cart.special & HW_LOCK_ON) - { - /* disable UPMEM chip at $300000-$3fffff */ - for (i=0x30; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + ((i<<16) & cart.mask); - } - } - break; - } - - default: - { - break; - } - } -} - - -/************************************************************ - MAPPER handlers -*************************************************************/ - -/* - "official" ROM/SRAM bankswitch (Phantasy Star IV, Story of Thor/Beyond Oasis, Sonic 3 & Knuckles) -*/ -static void mapper_sega_w(uint32 data) -{ - int i; - - if (data & 1) - { - if (sram.on) - { - /* Backup RAM mapped to $200000-$20ffff (normally mirrored up to $3fffff but this breaks Sonic Megamix and no game need it) */ - m68k.memory_map[0x20].base = sram.sram; - m68k.memory_map[0x20].read8 = sram_read_byte; - m68k.memory_map[0x20].read16 = sram_read_word; - zbank_memory_map[0x20].read = sram_read_byte; - - /* Backup RAM write protection */ - if (data & 2) - { - m68k.memory_map[0x20].write8 = m68k_unused_8_w; - m68k.memory_map[0x20].write16 = m68k_unused_16_w; - zbank_memory_map[0x20].write = zbank_unused_w; - } - else - { - m68k.memory_map[0x20].write8 = sram_write_byte; - m68k.memory_map[0x20].write16 = sram_write_word; - zbank_memory_map[0x20].write = sram_write_byte; - } - } - - /* S&K lock-on chip */ - if (cart.special & HW_LOCK_ON) - { - /* S2K upmem chip mapped to $300000-$3fffff (256KB mirrored) */ - for (i=0x30; i<0x40; i++) - { - m68k.memory_map[i].base = (cart.rom + 0x600000) + ((i & 3) << 16); - } - } - } - else - { - /* cartridge ROM mapped to $200000-$3fffff */ - for (i=0x20; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + ((i<<16) & cart.mask); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - zbank_memory_map[i].read = NULL; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].write = zbank_unused_w; - } - } -} - -/* - Everdrive extended SSF ROM bankswitch - documented by Krikzz (http://krikzz.com/pub/support/mega-ed/dev/extended_ssf.txt) -*/ -static void mapper_512k_w(uint32 address, uint32 data) -{ - uint32 i; - - /* 512K ROM paging */ - uint8 *src = cart.rom + ((data << 19) & cart.mask); - - /* cartridge area ($000000-$3FFFFF) is divided into 8 x 512K banks */ - address = (address << 2) & 0x38; - - /* remap selected ROM page to selected bank */ - for (i=0; i<8; i++) - { - m68k.memory_map[address++].base = src + (i<<16); - } -} - -/* - Super Street Fighter 2 ROM bankswitch - documented by Bart Trzynadlowski (http://emu-docs.org/Genesis/ssf2.txt) -*/ -static void mapper_ssf2_w(uint32 address, uint32 data) -{ - /* only banks 1-7 are remappable, bank 0 remains unchanged */ - if (address & 0x0E) - { - mapper_512k_w(address, data); - } -} - -/* - SF-001 mapper -*/ -static void mapper_sf001_w(uint32 address, uint32 data) -{ - switch ((address >> 8) & 0xf) - { - case 0xe: - { - int i; - - /* bit 6: enable / disable cartridge access */ - if (data & 0x40) - { - /* $000000-$3FFFFF is not mapped */ - for (i=0x00; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + (i << 16); - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - m68k.memory_map[i].write8 = (i > 0x00) ? m68k_unused_8_w : mapper_sf001_w; - m68k.memory_map[i].write16 = (i > 0x00) ? m68k_unused_16_w : mapper_sf001_w; - zbank_memory_map[i].read = zbank_unused_r; - zbank_memory_map[i].write = (i > 0x00) ? m68k_unused_8_w : mapper_sf001_w; - } - } - - /* bit 7: enable / disable SRAM & ROM bankswitching */ - else if (data & 0x80) - { - /* 256K ROM bank #15 mapped to $000000-$03FFFF */ - for (i=0x00; i<0x04; i++) - { - m68k.memory_map[i].base = cart.rom + ((0x38 + i) << 16); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - zbank_memory_map[i].read = NULL; - } - - /* 256K ROM banks #2 to #15 mapped to $040000-$3BFFFF (last revision) or $040000-$3FFFFF (older revisions) */ - for (i=0x04; i<(sram.start >> 16); i++) - { - m68k.memory_map[i].base = cart.rom + (i << 16); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - zbank_memory_map[i].read = NULL; - } - - /* 32K static RAM mirrored into $3C0000-$3FFFFF (odd bytes only) (last revision only) */ - while (i<0x40) - { - m68k.memory_map[i].base = sram.sram; - m68k.memory_map[i].read8 = sram_read_byte; - m68k.memory_map[i].read16 = sram_read_word; - m68k.memory_map[i].write8 = sram_write_byte; - m68k.memory_map[i].write16 = sram_write_word; - zbank_memory_map[i].read = sram_read_byte; - zbank_memory_map[i].write = sram_write_byte; - i++; - } - } - else - { - /* 256K ROM banks #1 to #16 mapped to $000000-$3FFFFF (default) */ - for (i=0x00; i<0x40; i++) - { - m68k.memory_map[i].base = cart.rom + (i << 16); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - m68k.memory_map[i].write8 = (i > 0x00) ? m68k_unused_8_w : mapper_sf001_w; - m68k.memory_map[i].write16 = (i > 0x00) ? m68k_unused_16_w : mapper_sf001_w; - zbank_memory_map[i].read = NULL; - zbank_memory_map[i].write = (i > 0x00) ? m68k_unused_8_w : mapper_sf001_w; - } - } - - /* bit 5: lock bankswitch hardware when set */ - if (data & 0x20) - { - /* disable bankswitch hardware access until hard reset */ - m68k.memory_map[0x00].write8 = m68k_unused_8_w; - m68k.memory_map[0x00].write16 = m68k_unused_16_w; - zbank_memory_map[0x00].write = m68k_unused_8_w; - } - - return; - } - - default: - { - m68k_unused_8_w(address, data); - return; - } - } -} - -/* - SF-002 mapper -*/ -static void mapper_sf002_w(uint32 address, uint32 data) -{ - int i; - if (data & 0x80) - { - /* $000000-$1BFFFF mapped to $200000-$3BFFFF */ - for (i=0x20; i<0x3C; i++) - { - m68k.memory_map[i].base = cart.rom + ((i & 0x1F) << 16); - } - } - else - { - /* $200000-$3BFFFF mapped to $200000-$3BFFFF */ - for (i=0x20; i<0x3C; i++) - { - m68k.memory_map[i].base = cart.rom + (i << 16); - } - } -} - -/* - SF-004 mapper -*/ -static void mapper_sf004_w(uint32 address, uint32 data) -{ - int i; - switch ((address >> 8) & 0xf) - { - case 0xd: - { - /* bit 7: enable/disable static RAM access */ - if (data & 0x80) - { - /* 32KB static RAM mirrored into $200000-$2FFFFF (odd bytes only) */ - for (i=0x20; i<0x30; i++) - { - m68k.memory_map[i].read8 = sram_read_byte; - m68k.memory_map[i].read16 = sram_read_word; - m68k.memory_map[i].write8 = sram_write_byte; - m68k.memory_map[i].write16 = sram_write_word; - zbank_memory_map[i].read = sram_read_byte; - zbank_memory_map[i].write = sram_write_byte; - } - } - else - { - /* 32KB static RAM disabled at $200000-$2FFFFF */ - for (i=0x20; i<0x30; i++) - { - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = m68k_read_bus_8; - zbank_memory_map[i].write = m68k_unused_8_w; - } - } - - return; - } - - case 0x0e: - { - /* bit 5: enable / disable cartridge ROM access */ - if (data & 0x20) - { - /* $000000-$1FFFFF is not mapped */ - for (i=0x00; i<0x20; i++) - { - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - zbank_memory_map[i].read = m68k_read_bus_8; - } - } - - /* bit 6: enable / disable first page mirroring */ - else if (data & 0x40) - { - /* first page ROM bank */ - uint8 base = (m68k.memory_map[0x00].base - cart.rom) >> 16; - - /* 5 x 256K ROM banks mapped to $000000-$13FFFF, starting from first page ROM bank */ - for (i=0x00; i<0x14; i++) - { - m68k.memory_map[i].base = cart.rom + (((base + i) & 0x1f) << 16); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - zbank_memory_map[i].read = NULL; - } - - /* $140000-$1FFFFF is not mapped */ - for (i=0x14; i<0x20; i++) - { - m68k.memory_map[i].read8 = m68k_read_bus_8; - m68k.memory_map[i].read16 = m68k_read_bus_16; - zbank_memory_map[i].read = m68k_read_bus_8; - } - } - else - { - /* first page 256K ROM bank mirrored into $000000-$1FFFFF */ - for (i=0x00; i<0x20; i++) - { - m68k.memory_map[i].base = m68k.memory_map[0].base + ((i & 0x03) << 16); - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - zbank_memory_map[i].read = NULL; - } - } - - /* bit 7: lock ROM bankswitching hardware when cleared */ - if (!(data & 0x80)) - { - /* disable bankswitch hardware access */ - m68k.memory_map[0x00].write8 = m68k_unused_8_w; - m68k.memory_map[0x00].write16 = m68k_unused_16_w; - zbank_memory_map[0x00].write = m68k_unused_8_w; - } - - return; - } - - case 0x0f: - { - /* bits 6-4: select first page ROM bank (8 x 256K ROM banks) */ - uint8 base = ((data >> 4) & 7) << 2; - - if (m68k.memory_map[0].base == m68k.memory_map[4].base) - { - /* selected 256K ROM bank mirrored into $000000-$1FFFFF */ - for (i=0x00; i<0x20; i++) - { - m68k.memory_map[i].base = cart.rom + ((base + (i & 0x03)) << 16); - } - } - else - { - /* 5 x 256K ROM banks mapped to $000000-$13FFFF, starting from selected bank */ - for (i=0x00; i<0x14; i++) - { - m68k.memory_map[i].base = cart.rom + (((base + i) & 0x1f) << 16); - } - } - - return; - } - - default: - { - m68k_unused_8_w(address, data); - return; - } - } -} - -static uint32 mapper_sf004_r(uint32 address) -{ - /* return first page 256K bank index ($00,$10,$20,...,$70) */ - return (((m68k.memory_map[0x00].base - cart.rom) >> 18) << 4); -} - -/* - T-5740xx-xx mapper -*/ -static void mapper_t5740_w(uint32 address, uint32 data) -{ - int i; - uint8 *base; - - switch (address & 0xff) - { - case 0x01: /* mode register */ - { - /* bits 7-4: unused ? */ - /* bit 3: enable SPI registers access ? */ - /* bit 2: not used ? */ - /* bit 1: enable bankswitch registers access ? */ - /* bit 0: always set, enable hardware access ? */ - return; - } - - case 0x03: /* page #5 register */ - { - /* map any of 16 x 512K ROM banks to $280000-$2FFFFF */ - base = cart.rom + ((data & 0x0f) << 19); - for (i=0x28; i<0x30; i++) - { - m68k.memory_map[i].base = base + ((i & 0x07) << 16); - } - return; - } - - case 0x05: /* page #6 register */ - { - /* map any of 16 x 512K ROM banks to $300000-$37FFFF */ - base = cart.rom + ((data & 0x0f) << 19); - for (i=0x30; i<0x38; i++) - { - m68k.memory_map[i].base = base + ((i & 0x07) << 16); - } - return; - } - - case 0x07: /* page #7 register */ - { - /* map any of 16 x 512K ROM banks to $380000-$3FFFFF */ - base = cart.rom + ((data & 0x0f) << 19); - for (i=0x38; i<0x40; i++) - { - m68k.memory_map[i].base = base + ((i & 0x07) << 16); - } - return; - } - - case 0x09: /* serial EEPROM SPI board support */ - { - eeprom_spi_write(data); - return; - } - - default: - { - /* unknown registers */ - m68k_unused_8_w(address, data); - return; - } - } -} - -static uint32 mapper_t5740_r(uint32 address) -{ - /* By default, first 32K of each eight 512K pages mapped in $000000-$3FFFFF are mirrored in the 512K page */ - /* mirroring is disabled/enabled when a specific number of words is being read from specific ROM addresses */ - /* Exact decoding isn't known but mirrored data is expected on startup when reading a few times from $181xx */ - /* this area doesn't seem to be accessed as byte later so it seems safe to always return mirrored data here */ - if ((address & 0xff00) == 0x8100) - { - return READ_BYTE(cart.rom , (address & 0x7fff)); - } - - return READ_BYTE(cart.rom, address); -} - -/* - FlashKit MD mapper (very limited M29W320xx Flash memory support -- enough for unlicensed games using device signature as protection) -*/ -static void mapper_flashkit_w(uint32 address, uint32 data) -{ - /* Increment Bus Write counter */ - cart.hw.regs[0]++; - - /* Wait for 3 consecutive bus writes */ - if (cart.hw.regs[0] == 3) - { - /* assume 'Auto Select' command */ - m68k.memory_map[0x0].read16 = mapper_flashkit_r; - } - else if (cart.hw.regs[0] == 4) - { - /* assume 'Read/Reset' command */ - m68k.memory_map[0x0].read16 = NULL; - - /* reset Bus Write counter */ - cart.hw.regs[0] = 0; - } -} - -static uint32 mapper_flashkit_r(uint32 address) -{ - /* hard-coded device signature */ - switch (address & 0x06) - { - case 0x00: /* Manufacturer Code (STMicroelectronics) */ - return 0x0020; - case 0x02: /* Device Code (M29W320EB) */ - return 0x2257; - default: /* not supported */ - return 0xffff; - } -} - -/* - Super Mario World 64 (unlicensed) mapper -*/ -static void mapper_smw_64_w(uint32 address, uint32 data) -{ - /* internal registers (saved to backup RAM) */ - switch ((address >> 16) & 0x07) - { - case 0x00: /* $60xxxx */ - { - if (address & 2) - { - /* $600003 data write mode ? */ - switch (sram.sram[0x00] & 0x07) - { - case 0x00: - { - /* update value returned at $660001-$660003 */ - sram.sram[0x06] = ((sram.sram[0x06] ^ sram.sram[0x01]) ^ data) & 0xFE; - break; - } - - case 0x01: - { - /* update value returned at $660005-$660007 */ - sram.sram[0x07] = data & 0xFE; - break; - } - - case 0x07: - { - /* update selected ROM bank (upper 512K) mapped at $610000-$61ffff */ - m68k.memory_map[0x61].base = m68k.memory_map[0x69].base = cart.rom + 0x080000 + ((data & 0x1c) << 14); - break; - } - - default: - { - /* unknown mode */ - break; - } - } - - /* $600003 data register */ - sram.sram[0x01] = data; - } - else - { - /* $600001 ctrl register */ - sram.sram[0x00] = data; - } - return; - } - - case 0x01: /* $61xxxx */ - { - if (address & 2) - { - /* $610003 ctrl register */ - sram.sram[0x02] = data; - } - return; - } - - case 0x04: /* $64xxxx */ - { - if (address & 2) - { - /* $640003 data register */ - sram.sram[0x04] = data; - } - else - { - /* $640001 data register */ - sram.sram[0x03] = data; - } - return; - } - - case 0x06: /* $66xxxx */ - { - /* unknown */ - return; - } - - case 0x07: /* $67xxxx */ - { - if (!(address & 2)) - { - /* $670001 ctrl register */ - sram.sram[0x05] = data; - - /* upper 512K ROM bank-switching enabled ? */ - if (sram.sram[0x02] & 0x80) - { - /* update selected ROM bank (upper 512K) mapped at $600000-$60ffff */ - m68k.memory_map[0x60].base = m68k.memory_map[0x68].base = cart.rom + 0x080000 + ((data & 0x1c) << 14); - } - } - return; - } - - default: /* not used */ - { - m68k_unused_8_w(address, data); - return; - } - } -} - -static uint32 mapper_smw_64_r(uint32 address) -{ - /* internal registers (saved to backup RAM) */ - switch ((address >> 16) & 0x03) - { - case 0x02: /* $66xxxx */ - { - switch ((address >> 1) & 7) - { - case 0x00: return sram.sram[0x06]; - case 0x01: return sram.sram[0x06] + 1; - case 0x02: return sram.sram[0x07]; - case 0x03: return sram.sram[0x07] + 1; - case 0x04: return sram.sram[0x08]; - case 0x05: return sram.sram[0x08] + 1; - case 0x06: return sram.sram[0x08] + 2; - case 0x07: return sram.sram[0x08] + 3; - } - } - - case 0x03: /* $67xxxx */ - { - uint8 data = (sram.sram[0x02] & 0x80) ? ((sram.sram[0x05] & 0x40) ? (sram.sram[0x03] & sram.sram[0x04]) : (sram.sram[0x03] ^ 0xFF)) : 0x00; - - if (address & 2) - { - /* $670003 */ - data &= 0x7f; - } - else - { - /* $66xxxx data registers update */ - if (sram.sram[0x05] & 0x80) - { - if (sram.sram[0x05] & 0x20) - { - /* update $660009-$66000f data register */ - sram.sram[0x08] = (sram.sram[0x04] << 2) & 0xFC; - } - else - { - /* update $660001-$660003 data register */ - sram.sram[0x06] = (sram.sram[0x01] ^ (sram.sram[0x03] << 1)) & 0xFE; - } - } - } - - return data; - } - - default: /* 64xxxx-$65xxxx */ - { - return 0x00; - } - } -} - -/* - Realtec ROM bankswitch (Earth Defend, Balloon Boy & Funny World, Whac-A-Critter) - (Note: register usage is inverted in TascoDlx documentation) -*/ -static void mapper_realtec_w(uint32 address, uint32 data) -{ - switch (address) - { - case 0x402000: - { - /* number of mapped 64k blocks (the written value is a number of 128k blocks) */ - cart.hw.regs[2] = data << 1; - return; - } - - case 0x404000: - { - /* 00000xxx */ - cart.hw.regs[0] = data & 7; - return; - } - - case 0x400000: - { - /* 00000yy1 */ - cart.hw.regs[1] = data & 6; - - /* ensure mapped size is not null */ - if (cart.hw.regs[2]) - { - /* mapped start address is 00yy xxx0 0000 0000 0000 0000 */ - uint32 base = (cart.hw.regs[0] << 1) | (cart.hw.regs[1] << 3); - - /* selected blocks are mirrored into the whole cartridge area */ - int i; - for (i=0x00; i<0x40; i++) - { - m68k.memory_map[i].base = &cart.rom[(base + (i % cart.hw.regs[2])) << 16]; - } - } - return; - } - } -} - -/* Game no Kanzume Otokuyou ROM Mapper */ -static void mapper_seganet_w(uint32 address, uint32 data) -{ - if ((address & 0xff) == 0xf1) - { - int i; - if (data & 1) - { - /* ROM Write protected */ - for (i=0; i<0x40; i++) - { - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].write = zbank_unused_w; - } - } - else - { - /* ROM Write enabled */ - for (i=0; i<0x40; i++) - { - m68k.memory_map[i].write8 = NULL; - m68k.memory_map[i].write16 = NULL; - zbank_memory_map[i].write = NULL; - } - } - } -} - -/* - Custom ROM Bankswitch used in Soul Edge VS Samurai Spirits, Top Fighter, Mulan, Pocket Monsters II, Lion King 3, Super King Kong 99, Pokemon Stadium -*/ -static void mapper_32k_w(uint32 data) -{ - int i; - - /* 64 x 32k banks */ - if (data) - { - for (i=0; i<0x10; i++) - { - /* Remap to unused ROM area */ - m68k.memory_map[i].base = &cart.rom[0x400000 + (i << 16)]; - - /* address = address OR (value << 15) */ - memcpy(m68k.memory_map[i].base, cart.rom + ((i << 16) | (data & 0x3f) << 15), 0x8000); - memcpy(m68k.memory_map[i].base + 0x8000, cart.rom + ((i << 16) | ((data | 1) & 0x3f) << 15), 0x8000); - } - } - else - { - /* reset default $000000-$0FFFFF mapping */ - for (i=0; i<16; i++) - { - m68k.memory_map[i].base = &cart.rom[i << 16]; - } - } -} - -/* - Custom ROM Bankswitch used in Chinese Fighter III -*/ -static void mapper_64k_w(uint32 data) -{ - int i; - - /* 16 x 64k banks */ - if (data) - { - /* bank is mapped at $000000-$0FFFFF */ - for (i=0; i<16; i++) - { - m68k.memory_map[i].base = &cart.rom[(data & 0xf) << 16]; - } - } - else - { - /* reset default $000000-$0FFFFF mapping */ - for (i=0; i<16; i++) - { - m68k.memory_map[i].base = &cart.rom[(i & 0xf) << 16]; - } - } -} - -/* - Custom ROM Bankswitch used in pirate "Multi-in-1" cartridges, A Bug's Life, King of Fighter 99, Pocket Monster, Rockman X3 - */ -static void mapper_64k_multi_w(uint32 address) -{ - int i; - - /* 64 x 64k banks */ - for (i=0; i<64; i++) - { - m68k.memory_map[i].base = &cart.rom[((address + i) & 0x3f) << 16]; - } -} - -/* - Custom ROM Bankswitch used in pirate "1800-in-1" cartridge - */ -static uint32 mapper_128k_multi_r(uint32 address) -{ - int i; - - /* 16 x 128k banks (2MB ROM) */ - /* Bank index (B3 B2 B1 B0) is encoded in address lower byte = {0 X B0 B1 X B2 B3 0} */ - /* Note: {0 B0 X B1 X B2 B3 0} also works, see below for the 9 unique values being used for all menu entries - read16 00A13000 (0002FBEE) => 0x000000-0x03ffff (2x128KB) - read16 00A13018 (00FF2056) => 0x040000-0x07ffff (2x128KB) - read16 00A13004 (00FF2120) => 0x080000-0x0bffff (2x128KB) - read16 00A1301C (00FF20A6) => 0x0c0000-0x0fffff (2x128KB) - read16 00A1300A (00FF20BA) => 0x100000-0x13ffff (2x128KB) - read16 00A1301A (00FF20CE) => 0x140000-0x17ffff (2x128KB) - read16 00A1300E (00FF20F4) => 0x180000-0x1bffff (2x128KB) - read16 00A1301E (00FF2136) => 0x1c0000-0x1dffff (1x128KB) - read16 00A1307E (00FF2142) => 0x1e0000-0x1fffff (1x128KB) - */ - int bank = ((address & 0x02) << 2) | (address & 0x04) | ((address & 0x10) >> 3) | ((address & 0x20) >> 5); - - /* remap cartridge area (64 x 64k banks) */ - address = bank << 1; - for (i=0x00; i<0x40; i++) - { - m68k.memory_map[i].base = &cart.rom[((address + i) & 0x3f) << 16]; - } - - /* returned value changes the menu title and number of entries in the 'game' list (the number of distinct games does not change though) */ - /* 0x00 => 9-in-1 */ - /* 0x01 => 190-in-1 */ - /* 0x02 => 888-in-1 */ - /* 0x03 => 1800-in-1 */ - /* real cartridge board has switches to select between the four different menus but here we force the largest menu selection (each other menus being a subset of the next larger menu) */ - return 0x03; -} - -/* - Custom ROM Bankswitch used in pirate "Golden Mega 250-in-1" cartridge - */ -static void mapper_256k_multi_w(uint32 address, uint32 data) -{ - int i; - - /* 8 x 256k banks (2MB ROM) */ - /* Bank index (B2 B1 B0) is encoded in data lower byte = {B1 B0 X X 0 0 0 B2} */ - /* Note: {X B0 B1 B2 0 0 0 X}, {B1 B0 X B2 0 0 0 X} or {X B0 B1 X 0 0 0 B2} also work, see below for the 4 unique values being used for all menu entries - write16 00089000 = 0000 (00FF0006) => 0x000000-0x03ffff (1x256KB) - write16 00089000 = 0040 (00FF0006) => 0x040000-0x07ffff (1x256KB) - write16 00089000 = 00A0 (00FF0006) => 0x080000-0x0fffff (2x256KB) - write16 00089000 = 0011 (00FF0006) => 0x100000-0x1fffff (4x256KB) - */ - int bank = ((data & 0x01) << 2) | ((data & 0xc0) >> 6); - - /* remap cartridge area (64 x 64k banks) */ - address = bank << 2; - for (i=0x00; i<0x40; i++) - { - m68k.memory_map[i].base = &cart.rom[((address + i) & 0x3f) << 16]; - } -} - -/* - Custom ROM Bankswitch used in "Canon - Legend of the New Gods" - (uses WD1601 QFPL V1.01 board also used in chinese X-in-1 pirates sold by mindkids) - */ -static void mapper_wd1601_w(uint32 address, uint32 data) -{ - int i; - - /* !TIME write16 0xA13002 = 0x3002 (00FFFE0C) */ - /* The board probably allows up to 256MB Flash ROM remapping but this game only has 4MB ROM chip */ - if ((address & 0xfe) == 0x02) - { - /* upper 2MB ROM mapped to $000000-$1fffff */ - for (i=0; i<0x20; i++) - { - m68k.memory_map[i].base = &cart.rom[(0x20 + i) << 16]; - } - - /* backup RAM (8KB) mapped to $2000000-$3fffff */ - for (i=0x20; i<0x40; i++) - { - m68k.memory_map[i].base = sram.sram; - m68k.memory_map[i].read8 = sram_read_byte; - m68k.memory_map[i].read16 = sram_read_word; - m68k.memory_map[i].write8 = sram_write_byte; - m68k.memory_map[i].write16 = sram_write_word; - zbank_memory_map[i].read = sram_read_byte; - zbank_memory_map[i].write = sram_write_byte; - } - } -} - -/* - Custom ROM Bankswitch used in RADICA cartridges - +++++++++++++++++++++++++++++++++++++++++++++++ - Two different boards seem to exist (one with support for 64KB banks mapping and another one supporting 128KB banks + battery-RAM). - Radica Volume 1 requires 64KB banks mapping as the menu is located at a 64KB boundary. - Sensible Soccer Plus edition requires 128KB banks mapping with only VA6-VA2 being used to select bank index (VA1 is ignored). - Sensible Soccer Plus edition also requires 8KB backup RAM to be mapped in higher 2MB range. - Other games support both 64KB or 128KB mapping so it's not clear what exact board they are using but none require SRAM so we use 64KB mapper by default. - Note that Radica Volume 3 uses similar ROM mapping as Sensible Soccer Plus edition so it might be using same 128KB board, without any SRAM chip connected. -*/ -static uint32 mapper_64k_radica_r(uint32 address) -{ - int i = 0; - - /* 64 x 64k banks */ - /* - Volume 1 - -------- - 000000h-0fffffh: Kid Chameleon : !TIME read16 0xA13000 (00FF103A) - 100000h-1fffffh: Dr Robotnik's Mean Bean Machine : !TIME read16 0xA13020 (00FF101E) - 200000h-27ffffh: Sonic The Hedgehog : !TIME read16 0xA13040 (00FF101E) - 280000h-2fffffh: Golden Axe : !TIME read16 0xA13050 (00FF101E) - 300000h-37ffffh: Altered Beast : !TIME read16 0xA13060 (00FF101E) - 380000h-39ffffh: Flicky : !TIME read16 0xA13070 (00FF101E) - 3a0000h-3effffh: N/A : N/A - 3f0000h-3fffffh: Radica Menu (64 KB) : !TIME read16 0xA1307E (00FF1006) - - Volume 2 - -------- - 000000h-0fffffh: Sonic The Hedgehog 2 : !TIME read16 0xA13000 (00FF103A) - 100000h-1fffffh: The Ooze : !TIME read16 0xA13020 (00FF101E) - 200000h-2fffffh: Ecco The Dolphin : !TIME read16 0xA13040 (00FF101E) - 300000h-37ffffh: Gain Ground : !TIME read16 0xA13060 (00FF101E) - 380000h-3bffffh: Alex Kidd in Enchanted Castle : !TIME read16 0xA13070 (00FF101E) - 3c0000h-3dffffh: Columns : !TIME read16 0xA13078 (00FF101E) - 3e0000h-3fffffh: Radica Menu (128 KB) : !TIME read16 0xA1307C (00FF1006) - - Volume 3 - Super Sonic Gold edition - ----------------------------------- - 000000h-01ffffh: Radica Menu (128 KB) : N/A - 020000h-07ffffh: N/A : N/A - 080000h-0fffffh: Sonic The Hedgehog : !TIME read16 0xA13010 (00FF1012) - 100000h-1fffffh: Sonic The Hedgehog 2 : !TIME read16 0xA13020 (00FF1012) - 200000h-2fffffh: Sonic Spinball : !TIME read16 0xA13040 (00FF1012) - 300000h-3fffffh: Dr Robotnik's Mean Bean Machine : !TIME read16 0xA13060 (00FF1012) - - Street Fighter 2 CE edition - --------------------------- - 000000h-2fffffh: Street Fighter 2 CE : !TIME read16 0xA13000 (00FF103A) - 300000h-3bffffh: Ghouls'n Ghosts : !TIME read16 0xA13060 (00FF101E) - 3c0000h-3dffffh: Radica Menu (128 KB) : !TIME read16 0xA13078 (00FF1006) - 3e0000h-3fffffh: N/A : N/A - */ - int index = (address >> 1) & 0x3F; - - /* $000000-$3fffff area is mapped to selected banks (OR gates between VA21-VA16 and selected index) */ - for (i = 0x00; i < 0x40; i++) - { - m68k.memory_map[i].base = &cart.rom[(index | i) << 16]; - } - - return 0xffff; -} - -static uint32 mapper_128k_radica_r(uint32 address) -{ - int i = 0; - - /* 32 x 128k banks */ - /* - Sensible Soccer Plus edition - ---------------------------- - 000000h-01ffffh: Radica Menu (128 KB) : N/A - 020000h-07ffffh: N/A : N/A - 080000h-0fffffh: Sensible Soccer : !TIME read16 0xA13010 (00FF1012) - 100000h-1fffffh: Mega-Lo-Mania : !TIME read16 0xA13022 (00FF1012) - 200000h-37ffffh: Cannon Fodder : !TIME read16 0xA13042 (00FF1012) - 380000h-3fffffh: N/A : N/A - - Note: address bit 1 is ignored for bank selection but might be used to enable/disable SRAM mapping ? - */ - int index = (address >> 1) & 0x3E; - - /* $000000-$1fffff area is mapped to selected banks (OR gates between VA20-VA17 and selected index) */ - for (i = 0x00; i < 0x20; i++) - { - m68k.memory_map[i].base = &cart.rom[(index | i) << 16]; - } - - /* $200000-$3fffff area is mapped to 8KB SRAM (mirrored) */ - for (i = 0x20; i < 0x40; i++) - { - m68k.memory_map[i].base = sram.sram; - m68k.memory_map[i].read8 = sram_read_byte; - m68k.memory_map[i].read16 = sram_read_word; - m68k.memory_map[i].write8 = sram_write_byte; - m68k.memory_map[i].write16 = sram_write_word; - zbank_memory_map[i].read = sram_read_byte; - zbank_memory_map[i].write = sram_write_byte; - } - - return 0xffff; -} - -/************************************************************ - default !TIME signal handler -*************************************************************/ - -static void default_time_w(uint32 address, uint32 data) -{ - /* enable multi-game cartridge mapper by default */ - if (address < 0xa13060) - { - mapper_64k_multi_w(address); - return; - } - - /* enable "official" cartridge mapper by default */ - if (address > 0xa130f1) - { - mapper_512k_w(address, data); - } - else - { - mapper_sega_w(data); - } -} - - -/************************************************************ - Internal register handlers -*************************************************************/ - -static uint32 default_regs_r(uint32 address) -{ - int i; - for (i=0; i<4; i++) - { - if ((address & cart.hw.mask[i]) == cart.hw.addr[i]) - { - return cart.hw.regs[i]; - } - } - return m68k_read_bus_8(address); -} - -static uint32 default_regs_r_16(uint32 address) -{ - int i; - for (i=0; i<4; i++) - { - if ((address & cart.hw.mask[i]) == cart.hw.addr[i]) - { - return (cart.hw.regs[i] << 8); - } - } - return m68k_read_bus_16(address); -} - -static void default_regs_w(uint32 address, uint32 data) -{ - int i; - for (i=0; i<4; i++) - { - if ((address & cart.hw.mask[i]) == cart.hw.addr[i]) - { - cart.hw.regs[i] = data; - return; - } - } - m68k_unused_8_w(address, data); -} - -/* basic register shifting hardware (Bug's Life, Pocket Monster) */ -static uint32 custom_regs_r(uint32 address) -{ - int i; - for (i=0; i<4; i++) - { - if ((address & cart.hw.mask[i]) == cart.hw.addr[i]) - { - return cart.hw.regs[i] >> 1; - } - } - - return m68k_read_bus_8(address); -} - -/* custom register hardware (Top Fighter, Lion King III, Super Donkey Kong 99, Mulan, Pocket Monsters II, Pokemon Stadium) */ -static void custom_regs_w(uint32 address, uint32 data) -{ - uint8 temp; - - /* ROM bankswitch */ - if ((address >> 16) > 0x6f) - { - mapper_32k_w(data); - return; - } - - /* write register */ - default_regs_w(address, data); - - /* bitswapping */ - temp = cart.hw.regs[0]; - switch (cart.hw.regs[1] & 3) - { - case 0: - cart.hw.regs[2] = (temp << 1); - break; - - case 1: - cart.hw.regs[2] = (temp >> 1); - return; - - case 2: - cart.hw.regs[2] = ((temp >> 4) | ((temp & 0x0F) << 4)); - return; - - default: - cart.hw.regs[2] = (((temp >> 7) & 0x01) | ((temp >> 5) & 0x02) | - ((temp >> 3) & 0x04) | ((temp >> 1) & 0x08) | - ((temp << 1) & 0x10) | ((temp << 3) & 0x20) | - ((temp << 5) & 0x40) | ((temp << 7) & 0x80)); - return; - } -} - -/* alternate custom register hardware (Chinese Fighters III) */ -static void custom_alt_regs_w(uint32 address, uint32 data) -{ - /* ROM bankswitch */ - if ((address >> 16) > 0x5f) - { - mapper_64k_w(data); - return; - } - - /* write regs */ - default_regs_w(address, data); -} - - -/* "Tekken 3 Special" custom register hardware */ -static uint32 tekken_regs_r(uint32 address) -{ - /* data output */ - if ((address & 0x0e) == 0x02) - { - /* maybe depends on mode bits ? */ - return (cart.hw.regs[0] - 1); - } - - return m68k_read_bus_16(address); -} - -static void tekken_regs_w(uint32 address, uint32 data) -{ - switch (address & 0x0e) - { - case 0x00: - { - /* data output reset ? (game writes $FF before & after protection check) */ - cart.hw.regs[0]= 0x00; - break; - } - - case 0x02: - { - /* read only ? */ - break; - } - - case 0x0c: - { - /* data output mode bit 0 ? (game writes $01) */ - break; - } - - case 0x0e: - { - /* data output mode bit 1 ? (never written by game) */ - break; - } - - default: - { - /* data input (only connected to D0 ?)*/ - if (data & 1) - { - /* 4-bit hardware register ($400004 corresponds to bit0, $400006 to bit1, etc) */ - cart.hw.regs[0] |= 1 << (((address - 0x04) >> 1) & 3); - } - break; - } - } -} - -/* "Top Shooter" arcade board hardware */ -static uint32 topshooter_r(uint32 address) -{ - if (address < 0x202000) - { - uint8 temp = 0xff; - - switch (address & 0xff) - { - case 0x43: - { - if (input.pad[0] & INPUT_A) temp &= ~0x80; /* Shoot */ - if (input.pad[0] & INPUT_B) temp &= ~0x10; /* Bet */ - if (input.pad[0] & INPUT_START) temp &= ~0x20; /* Start */ - break; - } - - case 0x45: /* ??? (DOWN) & Service Mode (UP) */ - { - if (input.pad[0] & INPUT_UP) temp &= ~0x08; /* Service Mode */ - if (input.pad[0] & INPUT_DOWN) temp &= ~0x10; /* ???, used in service menu to select next option */ - break; - } - - case 0x47: - { - if (input.pad[0] & INPUT_RIGHT) temp &= ~0x03; /* Insert 10 coins */ - break; - } - - case 0x49: - { - if (input.pad[0] & INPUT_LEFT) temp &= ~0x03; /* Clear coins */ - if (input.pad[0] & INPUT_C) temp &= ~0x01; /* Insert XXX coins */ - break; - } - - case 0x51: - { - temp = 0xA5; - break; - } - - default: - { - temp = m68k_read_bus_8(address); - break; - } - } - return temp; - } - - return READ_BYTE(sram.sram , address & 0xffff); -} - -static void topshooter_w(uint32 address, uint32 data) -{ - if (address >= 0x202000) - { - WRITE_BYTE(sram.sram , address & 0xffff, data); - return; - } - - m68k_unused_8_w(address, data); -} - - -/* Sega Channel hardware (not emulated) */ -/* - -$A13004: BUSY ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - -Unused read16 00A13004 (00005B54) -Unused read16 00A13004 (00005B70) -Unused read16 00A13006 (00005B7C) - -Unused read16 00A13004 (00005BC4) -Unused read16 00A13004 (00005BDA) - -Unused write16 00A13032 = 0004 (00005706) -Unused write16 00A130F0 = 0000 (0000570E) - -Unused write16 00A130F0 = 0000 (0000463E) -Unused write16 00A130F2 = 0001 (00004646) -Unused write16 00A130F4 = 0002 (0000464E) -Unused write16 00A130F6 = 0003 (00004656) -Unused write16 00A130F8 = 0004 (0000465E) -Unused write16 00A130FA = 0005 (00004666) - -Unused write16 00A13032 = 0004 (00005706) -Unused write16 00A13032 = 0104 (0000579E) - -Unused write16 00380000 = ACDC (00005718) -Unused write16 00380002 = 0000 (00005722) -Unused read16 00380000 (0000572C) -Unused write16 00A13032 = 0104 (0000579E) -Unused write16 00300000 = ACDC (000057B2) -Unused write16 00380000 = 0000 (000057BC) -Unused read16 00300000 (000057C6) - -static uint32 sega_channel_r(uint32 address) -{ - return m68k_read_bus_16(address);; -} - -static void sega_channel_w(uint32 address, uint32 data) -{ - m68k_unused_16_w(address, data); -} -*/ diff --git a/waterbox/gpgx/core/cart_hw/md_cart.h b/waterbox/gpgx/core/cart_hw/md_cart.h deleted file mode 100644 index 911991083b..0000000000 --- a/waterbox/gpgx/core/cart_hw/md_cart.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * Mega Drive cartridge hardware support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Most cartridge protections were initially documented by Haze - * (http://haze.mameworld.info/) - * - * Realtec mapper was documented by TascoDeluxe - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _MD_CART_H_ -#define _MD_CART_H_ - -#define cart ext.md_cart - -/* Lock-On cartridge type */ -#define TYPE_GG 0x01 /* Game Genie */ -#define TYPE_AR 0x02 /* (Pro) Action Replay */ -#define TYPE_SK 0x03 /* Sonic & Knuckles */ - -/* Special hardware (0x01 & 0x02 reserved for Master System 3-D glasses & Terebi Oekaki) */ -#define HW_J_CART 0x04 -#define HW_LOCK_ON 0x08 - -/* Cartridge extra hardware */ -typedef struct -{ - uint8 regs[4]; /* internal registers (R/W) */ - uint32 mask[4]; /* registers address mask */ - uint32 addr[4]; /* registers address */ - uint16 realtec; /* realtec mapper */ - uint16 bankshift; /* cartridge with bankshift mecanism reseted on software reset */ - unsigned int (*time_r)(unsigned int address); /* !TIME signal ($a130xx) read handler */ - void (*time_w)(unsigned int address, unsigned int data); /* !TIME signal ($a130xx) write handler */ - unsigned int (*regs_r)(unsigned int address); /* cart hardware registers read handler */ - void (*regs_w)(unsigned int address, unsigned int data); /* cart hardware registers write handler */ -} cart_hw_t; - -/* Cartridge type */ -typedef struct -{ - uint8 *rom; /* ROM area */ - uint8 *base; /* ROM base (saved for OS/Cartridge ROM swap) */ - uint32 romsize; /* ROM size */ - uint32 mask; /* ROM mask */ - uint8 special; /* Lock-On, J-Cart or SMS 3-D glasses hardware */ - cart_hw_t hw; /* Extra mapping hardware */ -} md_cart_t; - - -/* Function prototypes */ -extern void md_cart_init(void); -extern void md_cart_reset(int hard_reset); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/sms_cart.c b/waterbox/gpgx/core/cart_hw/sms_cart.c deleted file mode 100644 index 05a8e35595..0000000000 --- a/waterbox/gpgx/core/cart_hw/sms_cart.c +++ /dev/null @@ -1,1324 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * SG-1000, Master System & Game Gear cartridge hardware support - * - * Copyright (C) 2007-2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "eeprom_93c.h" -#include "terebi_oekaki.h" -#include "scrc32.h" - -#define MAPPER_NONE (0x00) -#define MAPPER_TEREBI (0x01) -#define MAPPER_RAM_8K_EXT1 (0x02) -#define MAPPER_RAM_8K_EXT2 (0x03) -#define MAPPER_OMV (0x04) -#define MAPPER_SEGA (0x10) -#define MAPPER_SEGA_X (0x11) -#define MAPPER_93C46 (0x12) -#define MAPPER_CODIES (0x13) -#define MAPPER_MULTI (0x14) -#define MAPPER_KOREA (0x15) -#define MAPPER_KOREA_16K (0x16) -#define MAPPER_KOREA_8K (0x20) -#define MAPPER_MSX (0x21) -#define MAPPER_MSX_NEMESIS (0x22) - -#define GAME_DATABASE_CNT (214) - -typedef struct -{ - uint32 crc; - uint8 g_3d; - uint8 fm; - uint8 peripheral; - uint8 mapper; - uint8 system; - uint8 region; -} rominfo_t; - -typedef struct -{ - uint8 fcr[4]; - uint8 mapper; - uint8 pages; -} romhw_t; - -static const rominfo_t game_list[GAME_DATABASE_CNT] = -{ - /* program requiring Mega Drive VDP (Mode 5) */ - {0x47FA618D, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_PBC, REGION_USA}, /* Charles MacDonald's Mode 5 Demo Program */ - - /* game requiring SEGA mapper */ - {0xFF67359B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* DataStorm (homebrew) */ - - /* games requiring 315-5124 VDP (Mark-III, Master System I) */ - {0x32759751, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Y's (J) */ - - /* games requiring Sega 315-5235 mapper without bank shifting */ - {0x23BAC434, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA_X, SYSTEM_GG, REGION_USA}, /* Shining Force Gaiden - Final Conflict (JP) [T-Eng] */ - - /* games using various Korean mappers */ - {0x17AB6883, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* FA Tetris (KR) */ - {0x61E8806F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Flash Point (KR) */ - {0x445525E2, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Penguin Adventure (KR) */ - {0x83F0EEDE, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Street Master (KR) */ - {0xA05258F5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Won-Si-In (KR) */ - {0x06965ED9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* F-1 Spirit - The way to Formula-1 (KR) */ - {0x77EFE84A, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Cyborg Z (KR) */ - {0xF89AF3CC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Knightmare II - The Maze of Galious (KR) */ - {0x9195C34C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Boy 3 (KR) */ - {0xE316C06D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX_NEMESIS, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis (KR) */ - {0x0A77FA5E, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis 2 (KR) */ - {0xA67F2A5C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MULTI, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* 4-Pak All Action (KR) */ - {0x89B79E77, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Dodgeball King (KR) */ - {0x18FB98A3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Jang Pung 3 (KR) */ - {0x97D03541, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Sangokushi 3 (KR) */ - {0x67C2F0FF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Boy 2 (KR) */ - {0x192949D5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Janggun-ui Adeul (KR) */ - {0x9FA727A0, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 0] [SMS-GG] (US) */ - {0xFB481971, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 1] [SMS-GG] (US) */ - - /* games using Codemaster mapper */ - {0x29822980, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Cosmic Spacehead */ - {0x8813514B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Excellent Dizzy Collection, The [Proto] */ - {0xB9664AE1, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Fantastic Dizzy */ - {0xA577CE46, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Micro Machines */ - {0xEA5C3A6F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_USA}, /* Dinobasher - Starring Bignose the Caveman [Proto] */ - {0xAA140C9C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Excellent Dizzy Collection, The [SMS-GG] */ - {0xC888222B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Fantastic Dizzy [SMS-GG] */ - {0x76C5BDFB, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Jang Pung 2 [SMS-GG] */ - {0x6CAA625B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Cosmic Spacehead [GG]*/ - {0x152F0DCC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Drop Zone" */ - {0x5E53C7F7, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Ernie Els Golf */ - {0xD9A7F170, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Man Overboard! */ - {0xF7C524F6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Micro Machines [GG] */ - {0xDBE8895C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Micro Machines 2 - Turbo Tournament */ - {0xC1756BEE, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Pete Sampras Tennis */ - {0x72981057, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* CJ Elephant Fugitive */ - - /* games using serial EEPROM */ - {0x36EBCD6D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* Majors Pro Baseball */ - {0x3D8D0DD6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v0] */ - {0xBB38CFD7, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v1] */ - {0x578A8A38, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball '95 */ - - /* games using Terebi Oekaki graphic board */ - {0xDD4A661B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_TEREBI, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Terebi Oekaki */ - - /* games requiring 8K RAM extension adapter */ - {0xCE5648C3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Bomberman Special [DahJee] (TW) */ - {0x223397A1, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* King's Valley (TW) */ - {0x281D2888, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Knightmare (TW) */ - {0x306D5F78, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Rally-X [DahJee] (TW) */ - {0x29E047CC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */ - {0x5CBD1163, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Tank Battalion (TW) */ - {0x2E7166D5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* The Legend of Kage (TW) */ - {0xC550B4F0, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* TwinBee (TW) */ - {0xFC87463C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Yie Ar Kung-Fu II (TW) */ - {0x69FC1494, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Bomberman Special (TW) */ - {0xFFC4EE3F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Magical Kid Wiz (TW) */ - {0x2E366CCF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* The Castle (TW) */ - {0xAAAC12CF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Rally-X (TW) */ - {0xD2EDD329, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */ - - /* games requiring 2K internal RAM (Othello Multivision hardware) */ - {0x7F7F009D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_OMV, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Circus Charlie (KR) */ - {0x77DB4704, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_OMV, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Q*Bert */ - {0xC5A67B95, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_OMV, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Othello Multivision BIOS */ - - /* games requiring Japanese region setting */ - {0x71DEBA5A, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GG, REGION_JAPAN_NTSC}, /* Pop Breaker */ - {0xC9DD4E5F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Woody Pop (Super Arkanoid) */ - - /* games requiring Mark-III hardware (no Memory Control port) */ - {0xBD1CC7DF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Super Tetris (KR) */ - {0x6D309AC5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Power Boggle Boggle (KR) */ - - /* games requiring random RAM pattern initialization */ - {0x08BF3DE3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Alibaba and 40 Thieves (KR) */ - {0x643B6B76, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Block Hole (KR) */ - - /* games requiring PAL timings */ - {0x72420F38, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Addams Familly */ - {0x2D48C1D3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Back to the Future Part III */ - {0x1CBB7BF1, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Battlemaniacs (BR) */ - {0x1B10A951, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Bram Stoker's Dracula */ - {0xC0E25D62, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* California Games II */ - {0x45C50294, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Jogos de Verao II (BR) */ - {0xC9DBF936, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Home Alone */ - {0x0047B615, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Predator2 */ - {0xF42E145C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Quest for the Shaven Yak Starring Ren Hoek & Stimpy (BR) */ - {0x9F951756, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* RoboCop 3 */ - {0xF8176918, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sensible Soccer */ - {0x1575581D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Shadow of the Beast */ - {0x96B3F29E, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic Blast (BR) */ - {0x5B3B922C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic the Hedgehog 2 [V0] */ - {0xD6F2BFCA, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic the Hedgehog 2 [V1] */ - {0xCA1D3752, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Space Harrier [50 Hz] */ - {0x85CFC9C9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Taito Chase H.Q. */ - {0x332A847D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* NBA Jam [Proto] */ - - /* games running in Game Gear MS compatibility mode */ - {0x59840FD6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Castle of Illusion - Starring Mickey Mouse [SMS-GG] */ - {0x9C76FB3A, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Rastan Saga [SMS-GG] */ - {0xC8381DEF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Taito Chase H.Q [SMS-GG] */ - {0xDA8E95A9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* WWF Wrestlemania Steel Cage Challenge [SMS-GG] */ - {0x1D93246E, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Olympic Gold [A][SMS-GG] */ - {0xA2F9C7AF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Olympic Gold [B][SMS-GG] */ - {0x01EAB89D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Out Run Europa [SMS-GG] */ - {0xF037EC00, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Out Run Europa (US) [SMS-GG] */ - {0xE5F789B9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Predator 2 [SMS-GG] */ - {0x311D2863, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Prince of Persia [A][SMS-GG] */ - {0x45F058D6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Prince of Persia [B][SMS-GG] */ - {0x56201996, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* R.C. Grand Prix [SMS-GG] */ - {0x10DBBEF4, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Super Kick Off [SMS-GG] */ - {0x9942B69B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Castle of Illusion - Starring Mickey Mouse (J) [SMS-GG] */ - {0x7BB81E3D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Taito Chase H.Q (J) [SMS-GG] */ - {0x6F8E46CF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Alex Kidd in Miracle World (TW) [SMS-GG] */ - {0x3382D73F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Olympic Gold (TW) [SMS-GG] */ - - /* games requiring 3-D Glasses */ - {0x6BD5C2BF, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Space Harrier 3-D */ - {0x8ECD201C, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D */ - {0xFBF96C81, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D (BR) */ - {0x58D5FC48, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D [Proto] */ - {0x31B8040B, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Maze Hunter 3-D */ - {0xABD48AD2, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Poseidon Wars 3-D */ - {0xA3EF13CB, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zaxxon 3-D */ - {0xBBA74147, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zaxxon 3-D [Proto] */ - {0xD6F43DDA, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Out Run 3-D */ - {0x871562b0, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maze Walker */ - {0x156948f9, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Space Harrier 3-D (J) */ - - /* games requiring 3-D Glasses & Sega Light Phaser */ - {0xFBE5CFBB, 1, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Missile Defense 3D */ - {0xE79BB689, 1, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Missile Defense 3D [BIOS] */ - - /* games requiring Sega Light Phaser */ - {0x861B6E79, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Assault City [Light Phaser] */ - {0x5FC74D2A, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Gangster Town */ - {0xE167A561, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Hang-On / Safari Hunt */ - {0x91E93385, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Hang-On / Safari Hunt [BIOS] */ - {0xE8EA842C, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Marksman Shooting / Trap Shooting */ - {0xE8215C2E, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Marksman Shooting / Trap Shooting / Safari Hunt */ - {0x205CAAE8, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Operation Wolf */ - {0x23283F37, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Operation Wolf [A] */ - {0xDA5A7013, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rambo 3 */ - {0x79AC8E7F, 0, 1, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rescue Mission */ - {0x4B051022, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Shooting Gallery */ - {0xA908CFF5, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Spacegun */ - {0x5359762D, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Wanted */ - {0x0CA95637, 0, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Laser Ghost */ - - /* games requiring Sega Paddle */ - {0xF9DBB533, 0, 1, SYSTEM_PADDLE, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Alex Kidd BMX Trial */ - {0xA6FA42D0, 0, 1, SYSTEM_PADDLE, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Galactic Protector */ - {0x29BC7FAD, 0, 1, SYSTEM_PADDLE, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Megumi Rescue */ - {0x315917D4, 0, 0, SYSTEM_PADDLE, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Woody Pop */ - - /* games requiring Sega Sport Pad */ - {0x0CB7E21F, 0, 0, SYSTEM_SPORTSPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Great Ice Hockey */ - {0xE42E4998, 0, 0, SYSTEM_SPORTSPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Sports Pad Football */ - {0x41C948BF, 0, 0, SYSTEM_SPORTSPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Sports Pad Soccer */ - - /* games supporting YM2413 FM */ - {0x1C951F8E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* After Burner */ - {0xC13896D5, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Alex Kidd: The Lost Stars */ - {0x5CBFE997, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Alien Syndrome */ - {0xBBA2FE98, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Altered Beast */ - {0xFF614EB3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Aztec Adventure */ - {0x3084CF11, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Bomber Raid */ - {0xAC6009A7, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* California Games */ - {0xA4852757, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Captain Silver */ - {0xB81F6FA5, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Captain Silver (U) */ - {0x3CFF6E80, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Casino Games */ - {0xE7F62E6D, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Cloud Master */ - {0x908E7524, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Cyborg Hunter */ - {0xA55D89F3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Double Dragon */ - {0xB8B141F9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Fantasy Zone II */ - {0xD29889AD, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Fantasy Zone: The Maze */ - {0xA4AC35D8, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Galaxy Force */ - {0x6C827520, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Galaxy Force (U) */ - {0x1890F407, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Game Box Série Esportes Radicais (BR) */ - {0xB746A6F5, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Global Defense */ - {0x91A0FC4E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Global Defense [Proto] */ - {0x48651325, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golfamania */ - {0x5DABFDC3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golfamania [Proto] */ - {0xA51376FE, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golvellius - Valley of Doom */ - {0x98E4AE4A, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Great Golf */ - {0x516ED32E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Kenseiden */ - {0xE8511B08, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Lord of The Sword */ - {0x0E333B6E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Miracle Warriors - Seal of The Dark Lord */ - {0x301A59AA, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Miracle Warriors - Seal of The Dark Lord [Proto] */ - {0x01D67C0B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Mônica no Castelo do Dragão (BR) */ - {0x5589D8D2, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Out Run */ - {0xE030E66C, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Parlour Games */ - {0xF97E9875, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Penguin Land */ - {0x4077EFD9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Power Strike */ - {0xBB54B6B0, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* R-Type */ - {0x42FC47EE, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rampage */ - {0xC547EB1B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rastan */ - {0x9A8B28EC, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Scramble Spirits */ - {0xAAB67EC3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Shanghai */ - {0x0C6FAC4E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Shinobi */ - {0x4752CAE7, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* SpellCaster */ - {0x1A390B93, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Tennis Ace */ - {0xAE920E4B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Thunder Blade */ - {0x51BD14BE, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Time Soldiers */ - {0x22CCA9BB, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Turma da Mônica em: O Resgate (BR) */ - {0xB52D60C8, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Ultima IV */ - {0xDE9F8517, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Ultima IV [Proto] */ - {0xDFB0B161, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Vigilante */ - {0x679E1676, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Wonder Boy III: The Dragon's Trap */ - {0x8CBEF0C1, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Wonder Boy in Monster Land */ - {0x2F2E3BC9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zillion II - The Tri Formation */ - {0x48D44A13, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* BIOS (J) */ - {0xD8C4165B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Aleste */ - {0x4CC11DF9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Alien Syndrome (J) */ - {0xE421E466, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Chouon Senshi Borgman */ - {0x2BCDB8FA, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Doki Doki Penguin Land - Uchuu-Daibouken */ - {0x56BD2455, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Doki Doki Penguin Land - Uchuu-Daibouken [Proto] */ - {0xC722FB42, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Fantasy Zone II (J) */ - {0x7ABC70E9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Family Games (Party Games) */ - {0x6586BD1F, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Masters Golf */ - {0x4847BC91, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Masters Golf [Proto] */ - {0xB9FDF6D9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Haja no Fuuin */ - {0x955A009E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hoshi wo Sagashite */ - {0x05EA5353, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Kenseiden (J) */ - {0xD11D32E4, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Kujakuou */ - {0xAA7D6F45, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Lord of Sword */ - {0xBF0411AD, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maou Golvellius */ - {0x21A21352, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maou Golvellius [Proto] */ - {0x5B5F9106, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nekyuu Kousien */ - {0xBEA27D5C, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Opa Opa */ - {0x6605D36A, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Phantasy Star (J) */ - {0xE1FFF1BB, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Shinobi (J) */ - {0x11645549, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Solomon no Kagi - Oujo Rihita no Namida */ - {0x7E0EF8CB, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Racing */ - {0xB1DA6A30, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Wonder Boy Monster World */ - {0x8132AB2C, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Tensai Bakabon */ - {0xC0CE19B1, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Thunder Blade (J) */ - {0x07301F83, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_PBC, REGION_JAPAN_NTSC} /* Phantasy Star [Megadrive] (J) */ -}; - -/* Cartridge & BIOS ROM hardware */ -static romhw_t cart_rom; -static romhw_t bios_rom; - -/* Current slot */ -static struct -{ - uint8 *rom; - uint8 *fcr; - uint8 mapper; - uint8 pages; -} slot; - -/* Function prototypes */ -static void mapper_reset(void); -static void mapper_8k_w(int offset, unsigned int data); -static void mapper_16k_w(int offset, unsigned int data); -static void write_mapper_none(unsigned int address, unsigned char data); -static void write_mapper_sega(unsigned int address, unsigned char data); -static void write_mapper_codies(unsigned int address, unsigned char data); -static void write_mapper_korea(unsigned int address, unsigned char data); -static void write_mapper_korea_8k(unsigned int address, unsigned char data); -static void write_mapper_korea_16k(unsigned int address, unsigned char data); -static void write_mapper_msx(unsigned int address, unsigned char data); -static void write_mapper_multi(unsigned int address, unsigned char data); -static void write_mapper_93c46(unsigned int address, unsigned char data); -static void write_mapper_terebi(unsigned int address, unsigned char data); -static unsigned char read_mapper_93c46(unsigned int address); -static unsigned char read_mapper_terebi(unsigned int address); -static unsigned char read_mapper_korea_8k(unsigned int address); -static unsigned char read_mapper_default(unsigned int address); - -void sms_cart_init(void) -{ - int i; - - /* game CRC */ - uint32 crc = crc32(0, cart.rom, cart.romsize); - - /* use Master System controller by default */ - uint8 device = SYSTEM_MS_GAMEPAD; - - /* unmapped memory return $FF on read (mapped to unused cartridge areas $510000-$5103FF & $510400-$5107FF) */ - memset(cart.rom + 0x510000, 0xFF, 0x800); - - /* default cartridge ROM mapper */ - cart_rom.mapper = (cart.romsize > 0xC000) ? MAPPER_SEGA : MAPPER_NONE; - - /* disable 3-D Glasses by default */ - cart.special = 0; - - /* YM2413 chip in AUTO mode */ - if (config.ym2413 & 2) - { - if ((system_hw & SYSTEM_SMS) && (region_code == REGION_JAPAN_NTSC)) - { - /* japanese Master System has built-in FM chip */ - config.ym2413 = 3; - } - else - { - /* by default, FM chip is disabled */ - config.ym2413 = 2; - } - } - - /* auto-detect game settings */ - for (i=0; i> 10; - } - else if (cart_rom.mapper & MAPPER_KOREA_8K) - { - /* 8k ROM banks */ - cart_rom.pages = (cart.romsize + (1 << 13) - 1) >> 13; - } - else - { - /* 16k ROM banks */ - cart_rom.pages = (cart.romsize + (1 << 14) - 1) >> 14; - } - - /* initialize extra hardware */ - if (cart_rom.mapper == MAPPER_93C46) - { - /* 93C46 eeprom */ - eeprom_93c_init(); - } - else if (cart_rom.mapper == MAPPER_TEREBI) - { - /* Terebi Oekaki tablet */ - cart.special |= HW_TEREBI_OEKAKI; - } - - /* initialize SRAM */ - sram_init(); - - /* enable cartridge backup memory by default */ - sram.on = 1; - - /* save current settings */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force port A & port B configuration */ - input.system[0] = device; - input.system[1] = SYSTEM_MS_GAMEPAD; - - /* default gun offset */ - input.x_offset = 20; - input.y_offset = 0; - - /* SpaceGun & Gangster Town use different gun offset */ - if ((crc == 0x5359762D) || (crc == 0x5FC74D2A)) - { - input.x_offset = 16; - } - - /* BIOS support */ - if (config.bios & 1) - { - /* load BIOS file */ - int bios_size = load_bios(); - - if (bios_size > 0xC000) - { - /* assume SEGA mapper if BIOS ROM is larger than 48k */ - bios_rom.mapper = MAPPER_SEGA; - bios_rom.pages = bios_size >> 14; - } - else if (bios_size >= 0) - { - /* default BIOS ROM mapper */ - bios_rom.mapper = MAPPER_NONE; - bios_rom.pages = bios_size >> 10; - } - - /* unload cartridge if required & BIOS ROM is loaded */ - if (!(config.bios & 2) && bios_rom.pages) - { - cart_rom.pages = 0; - } - } - else - { - /* mark Master System & Game Gear BIOS as unloaded */ - system_bios &= ~(SYSTEM_SMS | SYSTEM_GG); - - /* BIOS ROM is disabled */ - bios_rom.pages = 0; - } -} - -void sms_cart_reset(void) -{ - /* reset BIOS ROM paging (SEGA mapper by default) */ - bios_rom.fcr[0] = 0; - bios_rom.fcr[1] = 0; - bios_rom.fcr[2] = 1; - bios_rom.fcr[3] = 2; - - /* reset cartridge ROM paging */ - switch (cart_rom.mapper) - { - case MAPPER_SEGA: - case MAPPER_SEGA_X: - cart_rom.fcr[0] = 0; - cart_rom.fcr[1] = 0; - cart_rom.fcr[2] = 1; - cart_rom.fcr[3] = 2; - break; - - case MAPPER_KOREA_8K: - case MAPPER_MSX: - case MAPPER_MSX_NEMESIS: - cart_rom.fcr[0] = 0; - cart_rom.fcr[1] = 0; - cart_rom.fcr[2] = 0; - cart_rom.fcr[3] = 0; - break; - - default: - cart_rom.fcr[0] = 0; - cart_rom.fcr[1] = 0; - cart_rom.fcr[2] = 1; - cart_rom.fcr[3] = 0; - break; - } - - /* check if BIOS is larger than 1k */ - if (bios_rom.pages > 1) - { - /* enable BIOS ROM */ - slot.rom = cart.rom + 0x400000; - slot.fcr = bios_rom.fcr; - slot.mapper = bios_rom.mapper; - slot.pages = bios_rom.pages; - } - else - { - /* enable cartridge ROM */ - slot.rom = cart.rom; - slot.fcr = cart_rom.fcr; - slot.mapper = cart_rom.mapper; - slot.pages = cart_rom.pages; - - /* force Memory Control register value in RAM (usually set by Master System BIOS) */ - if (system_hw & SYSTEM_SMS) - { - work_ram[0] = 0xA8; - } - } - - /* reset Memory Control register (RAM & I/O are enabled, either BIOS or Cartridge ROM are enabled) */ - io_reg[0x0E] = bios_rom.pages ? 0xE0 : 0xA8; - - /* reset Z80 memory map */ - mapper_reset(); - - /* 1k BIOS special case (Majesco GG) */ - if (bios_rom.pages == 1) - { - /* BIOS ROM is mapped to $0000-$03FF */ - z80_readmap[0] = cart.rom + 0x400000; - } -} - -void sms_cart_switch(uint8 mode) -{ - /* by default, disable cartridge & BIOS ROM */ - slot.pages = 0; - - /* cartridge ROM enabled ? */ - if (mode & 0x40) - { - /* check if cartridge is loaded */ - if (cart_rom.pages) - { - /* map cartridge ROM */ - slot.rom = cart.rom; - slot.fcr = cart_rom.fcr; - slot.mapper = cart_rom.mapper; - slot.pages = cart_rom.pages; - } - } - else - { - /* BIOS ROM enabled ? */ - if (mode & 0x08) - { - /* check if BIOS ROM is larger than 1K */ - if (bios_rom.pages > 1) - { - /* map BIOS ROM */ - slot.rom = cart.rom + 0x400000; - slot.fcr = bios_rom.fcr; - slot.mapper = bios_rom.mapper; - slot.pages = bios_rom.pages; - } - else - { - /* by default, map cartridge ROM */ - slot.rom = cart.rom; - slot.fcr = cart_rom.fcr; - slot.mapper = cart_rom.mapper; - slot.pages = cart_rom.pages; - } - } - - /* assume only BIOS would disable cartridge slot */ - if (!bios_rom.pages) - { - /* max. BIOS ROM size supported is 1MB */ - if (cart.romsize <= 0x100000) - { - /* copy to BIOS ROM */ - memcpy(cart.rom + 0x400000, cart.rom, cart.romsize); - memcpy(bios_rom.fcr, cart_rom.fcr, 4); - bios_rom.mapper = cart_rom.mapper; - bios_rom.pages = cart_rom.pages; - - /* unload cartridge */ - cart_rom.pages = 0; - } - } - } - - /* reset Z80 memory map */ - mapper_reset(); - - /* 1k BIOS special case (Majesco GG) */ - if ((bios_rom.pages == 1) && ((mode & 0x48) == 0x08)) - { - /* BIOS ROM is mapped to $0000-$03FF */ - z80_readmap[0] = cart.rom + 0x400000; - } -} - -int sms_cart_region_detect(void) -{ - int i; - - /* compute CRC */ - uint32 crc = crc32(0, cart.rom, cart.romsize); - - /* Turma da Mônica em: O Resgate & Wonder Boy III enable FM support on japanese hardware only */ - if (config.ym2413 && ((crc == 0x22CCA9BB) || (crc == 0x679E1676))) - { - return REGION_JAPAN_NTSC; - } - - /* game database */ - for (i=0; i> 10][address & 0x03FF] = data; -} - -static void write_mapper_sega(unsigned int address, unsigned char data) -{ - if (address >= 0xFFFC) - { - mapper_16k_w(address & 3, data); - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_codies(unsigned int address, unsigned char data) -{ - if (address == 0x0000) - { - mapper_16k_w(1,data); - return; - } - - if (address == 0x4000) - { - mapper_16k_w(2,data); - return; - } - - if (address == 0x8000) - { - mapper_16k_w(3,data); - return; - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_multi(unsigned int address, unsigned char data) -{ - if (address == 0x3FFE) - { - mapper_16k_w(1,data); - return; - } - - if (address == 0x7FFF) - { - mapper_16k_w(2,data); - return; - } - - if (address == 0xBFFF) - { - mapper_16k_w(3,(slot.fcr[1] & 0x30) + data); - return; - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_korea(unsigned int address, unsigned char data) -{ - if (address == 0xA000) - { - mapper_16k_w(3,data); - return; - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_msx(unsigned int address, unsigned char data) -{ - if (address <= 0x0003) - { - mapper_8k_w(address,data); - return; - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_korea_8k(unsigned int address, unsigned char data) -{ - if (address == 0x4000) - { - mapper_8k_w(2,data); - return; - } - - if (address == 0x6000) - { - mapper_8k_w(3,data); - return; - } - - if (address == 0x8000) - { - mapper_8k_w(0,data); - return; - } - - if (address == 0xA000) - { - mapper_8k_w(1,data); - return; - } - - if (address == 0xFFFE) - { - mapper_8k_w(2,(data << 1) & 0xFF); - mapper_8k_w(3,(1 + (data << 1)) & 0xFF); - } - else if (address == 0xFFFF) - { - mapper_8k_w(0,(data << 1) & 0xFF); - mapper_8k_w(1,(1 + (data << 1)) & 0xFF); - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_korea_16k(unsigned int address, unsigned char data) -{ - if (address == 0x4000) - { - mapper_16k_w(2,data); - return; - } - - if (address == 0x8000) - { - mapper_16k_w(3,data); - return; - } - - /* SEGA mapper compatibility */ - if (address >= 0xFFFC) - { - mapper_16k_w(address & 3, data); - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_93c46(unsigned int address, unsigned char data) -{ - /* EEPROM serial input */ - if ((address == 0x8000) && eeprom_93c.enabled) - { - eeprom_93c_write(data); - return; - } - - /* EEPROM ctrl */ - if (address == 0xFFFC) - { - /* enable/disable EEPROM */ - eeprom_93c.enabled = data & 0x08; - - if (data & 0x80) - { - /* reset EEPROM */ - eeprom_93c_init(); - } - } - - /* SEGA mapper compatibility */ - if (address > 0xFFFC) - { - mapper_16k_w(address & 3, data); - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static void write_mapper_terebi(unsigned int address, unsigned char data) -{ - if (address == 0x6000) - { - terebi_oekaki_write(data); - return; - } - - z80_writemap[address >> 10][address & 0x03FF] = data; -} - -static unsigned char read_mapper_93c46(unsigned int address) -{ - if ((address == 0x8000) && eeprom_93c.enabled) - { - return eeprom_93c_read(); - } - - return z80_readmap[address >> 10][address & 0x03FF]; -} - -static unsigned char read_mapper_terebi(unsigned int address) -{ - if (address == 0x8000) - { - return (terebi_oekaki_read() >> 8); - } - - if (address == 0xA000) - { - return (terebi_oekaki_read() & 0xFF); - } - - return z80_readmap[address >> 10][address & 0x03FF]; -} - -static unsigned char read_mapper_korea_8k(unsigned int address) -{ - unsigned char data = z80_readmap[address >> 10][address & 0x03FF]; - - /* 16k page */ - unsigned char page = address >> 14; - - /* $4000-$7FFFF and $8000-$BFFF area are protected */ - if (((page == 1) && (slot.fcr[2] & 0x80)) || ((page == 2) && (slot.fcr[0] & 0x80))) - { - /* bit-swapped value */ - data = (((data >> 7) & 0x01) | ((data >> 5) & 0x02) | - ((data >> 3) & 0x04) | ((data >> 1) & 0x08) | - ((data << 1) & 0x10) | ((data << 3) & 0x20) | - ((data << 5) & 0x40) | ((data << 7) & 0x80)); - } - - return data; -} - -static unsigned char read_mapper_default(unsigned int address) -{ - return z80_readmap[address >> 10][address & 0x03FF]; -} diff --git a/waterbox/gpgx/core/cart_hw/sms_cart.h b/waterbox/gpgx/core/cart_hw/sms_cart.h deleted file mode 100644 index fc7eefc013..0000000000 --- a/waterbox/gpgx/core/cart_hw/sms_cart.h +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** - * Genesis Plus - * SG-1000, Master System & Game Gear cartridge hardware support - * - * Copyright (C) 2007-2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _SMS_CART_H_ -#define _SMS_CART_H_ - -/* Special hardware */ -#define HW_3D_GLASSES 0x01 -#define HW_TEREBI_OEKAKI 0x02 - -/* Function prototypes */ -extern void sms_cart_init(void); -extern void sms_cart_reset(void); -extern void sms_cart_switch(uint8 mode); -extern int sms_cart_region_detect(void); - -#endif - - diff --git a/waterbox/gpgx/core/cart_hw/sram.c b/waterbox/gpgx/core/cart_hw/sram.c deleted file mode 100644 index ca1b66d69a..0000000000 --- a/waterbox/gpgx/core/cart_hw/sram.c +++ /dev/null @@ -1,265 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Backup RAM support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "eeprom_i2c.h" -#include "eeprom_spi.h" -#include "eeprom_93c.h" - -T_SRAM sram; - -extern int cinterface_force_sram; - -/**************************************************************************** - * A quick guide to external RAM on the Genesis - * - * The external RAM definition is held at offset 0x1b0 of the ROM header. - * - * 1B0h: dc.b 'RA', %1x1yz000, %abc00000 - * 1B4h: dc.l RAM start address - * 1B8h: dc.l RAM end address - * x 1 for BACKUP (not volatile), 0 for volatile RAM - * yz 10 if even address only - * 11 if odd address only - * 00 if both even and odd address - * 01 others (serial EEPROM, RAM with 4-bit data bus, etc) - * abc 001 if SRAM - * 010 if EEPROM (serial or parallel) - * other values unused - * - * Assuming max. 64k backup RAM throughout - ****************************************************************************/ -void sram_init() -{ - /* disable Backup RAM by default */ - sram.detected = sram.on = sram.custom = sram.start = sram.end = 0; - - /* initialize Backup RAM */ - memset(sram.sram, 0xFF, 0x10000); - //sram.crc = crc32(0, sram.sram, 0x10000); - - /* retrieve informations from header */ - if ((READ_BYTE(cart.rom,0x1b0) == 0x52) && (READ_BYTE(cart.rom,0x1b1) == 0x41)) - { - /* backup RAM detected */ - sram.detected = 1; - - /* enable backup RAM */ - sram.on = 1; - - /* retrieve backup RAM start & end addresses */ - sram.start = READ_WORD_LONG(cart.rom, 0x1b4); - sram.end = READ_WORD_LONG(cart.rom, 0x1b8); - - /* autodetect games with wrong header infos */ - if (strstr(rominfo.product,"T-26013") != NULL) - { - /* Psy-O-Blade (wrong header) */ - sram.start = 0x200001; - sram.end = 0x203fff; - } - - /* fixe games indicating internal RAM as volatile external RAM (Feng Kuang Tao Hua Yuan) */ - else if (sram.start == 0xff0000) - { - /* backup RAM should be disabled */ - sram.on = 0; - } - - /* fixe other bad header informations */ - else if ((sram.start > sram.end) || ((sram.end - sram.start) >= 0x10000)) - { - sram.end = sram.start + 0xffff; - } - } - else - { - /* autodetect games with missing header infos */ - if (strstr(rominfo.product,"T-50086") != NULL) - { - /* PGA Tour Golf */ - sram.on = 1; - sram.start = 0x200001; - sram.end = 0x203fff; - } - else if (strstr(rominfo.product,"ACLD007") != NULL) - { - /* Winter Challenge */ - sram.on = 1; - sram.start = 0x200001; - sram.end = 0x200fff; - } - else if (strstr(rominfo.product,"T-50286") != NULL) - { - /* Buck Rogers - Countdown to Doomsday */ - sram.on = 1; - sram.start = 0x200001; - sram.end = 0x203fff; - } - else if (((rominfo.realchecksum == 0xaeaa) || (rominfo.realchecksum == 0x8dba)) && - (rominfo.checksum == 0x8104)) - { - /* Xin Qigai Wangzi (use uncommon area) */ - sram.on = 1; - sram.start = 0x400001; - sram.end = 0x40ffff; - } - else if ((strstr(rominfo.ROMType,"SF") != NULL) && (strstr(rominfo.product,"001") != NULL)) - { - /* SF-001 */ - sram.on = 1; - if (rominfo.checksum == 0x3e08) - { - /* last revision (use bankswitching) */ - sram.start = 0x3c0001; - sram.end = 0x3cffff; - } - else - { - /* older revisions (use uncommon area) */ - sram.start = 0x400001; - sram.end = 0x40ffff; - } - } - else if ((strstr(rominfo.ROMType,"SF") != NULL) && (strstr(rominfo.product,"004") != NULL)) - { - /* SF-004 (use bankswitching) */ - sram.on = 1; - sram.start = 0x200001; - sram.end = 0x203fff; - } - else if (strstr(rominfo.international,"SONIC & KNUCKLES") != NULL) - { - /* Sonic 3 & Knuckles combined ROM */ - if (cart.romsize == 0x400000) - { - /* Sonic & Knuckle does not have backup RAM but can access FRAM from Sonic 3 cartridge */ - sram.on = 1; - sram.start = 0x200001; - sram.end = 0x203fff; - } - } - else if (strstr(rominfo.product, "T-50166") != NULL) - { - /* Might and Magic Gates to Another World */ - sram.on = 1; - sram.start = 0x200001; - sram.end = 0x203fff; - } - else if (strstr(rominfo.international, "MIGHT & MAGIC III") != NULL) - { - /* Might and Magic III - Isles of Terra (USA) (Proto) */ - sram.on = 1; - sram.start = 0x200001; - sram.end = 0x203fff; - } - /* auto-detect games which need disabled backup RAM */ - else if (strstr(rominfo.product,"T-113016") != NULL) - { - /* Pugsy (does not have backup RAM but tries writing outside ROM area as copy protection) */ - sram.on = 0; - } - else if (strstr(rominfo.international,"SONIC THE HEDGEHOG 2") != NULL) - { - /* Sonic the Hedgehog 2 (does not have backup RAM) */ - /* this prevents backup RAM from being mapped in place of mirrored ROM when using S&K LOCK-ON feature */ - sram.on = 0; - } - else if (cinterface_force_sram && cart.romsize <= 0x200000) - { - // by default, gpgx enables saveram for all rom no bigger than 2MB - // we don't do that because it confuses ram searches and debugging, and adds extra baggage to savestates - // but some games do need it, so allow that to be hacked in here - sram.start = 0x200000; - sram.end = 0x20ffff; - sram.on = 1; - } - } -} - -unsigned int sram_read_byte(unsigned int address) -{ - return sram.sram[address & 0xffff]; -} - -unsigned int sram_read_word(unsigned int address) -{ - address &= 0xfffe; - return (sram.sram[address + 1] | (sram.sram[address] << 8)); -} - -void sram_write_byte(unsigned int address, unsigned int data) -{ - sram.sram[address & 0xffff] = data; -} - -void sram_write_word(unsigned int address, unsigned int data) -{ - address &= 0xfffe; - sram.sram[address] = data >> 8; - sram.sram[address + 1] = data & 0xff; -} - -// the variables in SRAM_T are all part of "configuration", so we don't have to save those. -// the only thing that needs to be saved is the SRAM itself and the SEEPROM struct (if applicable) - -int sram_get_actual_size() -{ - if (!sram.on) - return 0; - switch (sram.custom) - { - case 0: // plain bus access saveram - break; - case 1: // i2c - return eeprom_i2c.config.size_mask + 1; - case 2: // spi - return 0x10000; // it doesn't appear to mask anything internally - case 3: // 93c - return 0x10000; // SMS only and i don't have time to look into it - default: - return 0x10000; // who knows - } - // figure size for plain bus access saverams - { - int startaddr = sram.start / 8192; - int endaddr = sram.end / 8192 + 1; - int size = (endaddr - startaddr) * 8192; - return size; - } -} diff --git a/waterbox/gpgx/core/cart_hw/sram.h b/waterbox/gpgx/core/cart_hw/sram.h deleted file mode 100644 index 02fca8581b..0000000000 --- a/waterbox/gpgx/core/cart_hw/sram.h +++ /dev/null @@ -1,65 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Backup RAM support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _SRAM_H_ -#define _SRAM_H_ - -typedef struct -{ - uint8 detected; - uint8 on; - uint8 custom; - uint32 start; - uint32 end; - //uint32 crc; - uint8 sram[0x10000]; -} T_SRAM; - -/* Function prototypes */ -extern void sram_init(); -extern unsigned int sram_read_byte(unsigned int address); -extern unsigned int sram_read_word(unsigned int address); -extern void sram_write_byte(unsigned int address, unsigned int data); -extern void sram_write_word(unsigned int address, unsigned int data); - -extern int sram_get_actual_size(); - -/* global variables */ -extern T_SRAM sram; - -#endif diff --git a/waterbox/gpgx/core/cart_hw/svp/imageformat.txt b/waterbox/gpgx/core/cart_hw/svp/imageformat.txt deleted file mode 100644 index 5245e9a066..0000000000 --- a/waterbox/gpgx/core/cart_hw/svp/imageformat.txt +++ /dev/null @@ -1,68 +0,0 @@ - -vscroll: 1 (0); 209 (26) - alternates every 4 frames -vram range for patterns: 0000-999f (low scr 0000-395f,72e0-999f; high 3980-999f) -name table address: c000 -seen DMAs (in order): - [300002-3026c3]->[0020-26e1] len 4961 - [3026c2-303943]->[26e0-3961] len 2369 - [303942-306003]->[72e0-99a1] len 4961 - --- - [306002-3086c3]->[3980-6041] len 4961 - [3086c2-309943]->[6040-72c1] len 2369 - [309942-30c003]->[72e0-99a2] len 4961 -tile arrangement: - -000: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 -001: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 -002: 001 003 005 007 009 00b 00d 00f 011 013 015 017 019 01b 01d 01f 021 023 025 027 029 02b 02d 02f 031 033 035 037 039 03b 03d 03f -003: 002 004 006 008 00a 00c 00e 010 012 014 016 018 01a 01c 01e 020 022 024 026 028 02a 02c 02e 030 032 034 036 038 03a 03c 03e 040 -004: 041 043 045 047 049 04b 04d 04f 051 053 055 057 059 05b 05d 05f 061 063 065 067 069 06b 06d 06f 071 073 075 077 079 07b 07d 07f -005: 042 044 046 048 04a 04c 04e 050 052 054 056 058 05a 05c 05e 060 062 064 066 068 06a 06c 06e 070 072 074 076 078 07a 07c 07e 080 -006: 081 083 085 087 089 08b 08d 08f 091 093 095 097 099 09b 09d 09f 0a1 0a3 0a5 0a7 0a9 0ab 0ad 0af 0b1 0b3 0b5 0b7 0b9 0bb 0bd 0bf -007: 082 084 086 088 08a 08c 08e 090 092 094 096 098 09a 09c 09e 0a0 0a2 0a4 0a6 0a8 0aa 0ac 0ae 0b0 0b2 0b4 0b6 0b8 0ba 0bc 0be 0c0 -008: 0c1 0c3 0c5 0c7 0c9 0cb 0cd 0cf 0d1 0d3 0d5 0d7 0d9 0db 0dd 0df 0e1 0e3 0e5 0e7 0e9 0eb 0ed 0ef 0f1 0f3 0f5 0f7 0f9 0fb 0fd 0ff -009: 0c2 0c4 0c6 0c8 0ca 0cc 0ce 0d0 0d2 0d4 0d6 0d8 0da 0dc 0de 0e0 0e2 0e4 0e6 0e8 0ea 0ec 0ee 0f0 0f2 0f4 0f6 0f8 0fa 0fc 0fe 100 -010: 101 103 105 107 109 10b 10d 10f 111 113 115 117 119 11b 11d 11f 121 123 125 127 129 12b 12d 12f 131 133 135 137 139 13b 13d 13f -011: 102 104 106 108 10a 10c 10e 110 112 114 116 118 11a 11c 11e 120 122 124 126 128 12a 12c 12e 130 132 134 136 138 13a 13c 13e 140 -012: 141 143 145 147 149 14b 14d 14f 151 153 155 157 159 15b 15d 15f 161 163 165 167 169 16b 16d 16f 171 173 175 177 179 17b 17d 17f -013: 142 144 146 148 14a 14c 14e 150 152 154 156 158 15a 15c 15e 160 162 164 166 168 16a 16c 16e 170 172 174 176 178 17a 17c 17e 180 -014: 181 183 185 187 189 18b 18d 18f 191 193 195 197 199 19b 19d 19f 1a1 1a3 1a5 1a7 1a9 1ab 1ad 1af 1b1 1b3 1b5 1b7 1b9 1bb 1bd 1bf -015: 182 184 186 188 18a 18c 18e 190 192 194 196 198 19a 19c 19e 1a0 1a2 1a4 1a6 1a8 1aa 1ac 1ae 1b0 1b2 1b4 1b6 1b8 1ba 1bc 1be 1c0 -016: 1c1 1c3 1c5 1c7 1c9 397 399 39b 39d 39f 3a1 3a3 3a5 3a7 3a9 3ab 3ad 3af 3b1 3b3 3b5 3b7 3b9 3bb 3bd 3bf 3c1 3c3 3c5 3c7 3c9 3cb -017: 1c2 1c4 1c6 1c8 1ca 398 39a 39c 39e 3a0 3a2 3a4 3a6 3a8 3aa 3ac 3ae 3b0 3b2 3b4 3b6 3b8 3ba 3bc 3be 3c0 3c2 3c4 3c6 3c8 3ca 3cc -018: 3cd 3cf 3d1 3d3 3d5 3d7 3d9 3db 3dd 3df 3e1 3e3 3e5 3e7 3e9 3eb 3ed 3ef 3f1 3f3 3f5 3f7 3f9 3fb 3fd 3ff 401 403 405 407 409 40b -019: 3ce 3d0 3d2 3d4 3d6 3d8 3da 3dc 3de 3e0 3e2 3e4 3e6 3e8 3ea 3ec 3ee 3f0 3f2 3f4 3f6 3f8 3fa 3fc 3fe 400 402 404 406 408 40a 40c -020: 40d 40f 411 413 415 417 419 41b 41d 41f 421 423 425 427 429 42b 42d 42f 431 433 435 437 439 43b 43d 43f 441 443 445 447 449 44b -021: 40e 410 412 414 416 418 41a 41c 41e 420 422 424 426 428 42a 42c 42e 430 432 434 436 438 43a 43c 43e 440 442 444 446 448 44a 44c -022: 44d 44f 451 453 455 457 459 45b 45d 45f 461 463 465 467 469 46b 46d 46f 471 473 475 477 479 47b 47d 47f 481 483 485 487 489 48b -023: 44e 450 452 454 456 458 45a 45c 45e 460 462 464 466 468 46a 46c 46e 470 472 474 476 478 47a 47c 47e 480 482 484 486 488 48a 48c -024: 48d 48f 491 493 495 497 499 49b 49d 49f 4a1 4a3 4a5 4a7 4a9 4ab 4ad 4af 4b1 4b3 4b5 4b7 4b9 4bb 4bd 4bf 4c1 4c3 4c5 4c7 4c9 4cb -025: 48e 490 492 494 496 498 49a 49c 49e 4a0 4a2 4a4 4a6 4a8 4aa 4ac 4ae 4b0 4b2 4b4 4b6 4b8 4ba 4bc 4be 4c0 4c2 4c4 4c6 4c8 4ca 4cc -026: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 -027: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 -028: 1cc 1ce 1d0 1d2 1d4 1d6 1d8 1da 1dc 1de 1e0 1e2 1e4 1e6 1e8 1ea 1ec 1ee 1f0 1f2 1f4 1f6 1f8 1fa 1fc 1fe 200 202 204 206 208 20a -029: 1cd 1cf 1d1 1d3 1d5 1d7 1d9 1db 1dd 1df 1e1 1e3 1e5 1e7 1e9 1eb 1ed 1ef 1f1 1f3 1f5 1f7 1f9 1fb 1fd 1ff 201 203 205 207 209 20b -030: 20c 20e 210 212 214 216 218 21a 21c 21e 220 222 224 226 228 22a 22c 22e 230 232 234 236 238 23a 23c 23e 240 242 244 246 248 24a -031: 20d 20f 211 213 215 217 219 21b 21d 21f 221 223 225 227 229 22b 22d 22f 231 233 235 237 239 23b 23d 23f 241 243 245 247 249 24b -032: 24c 24e 250 252 254 256 258 25a 25c 25e 260 262 264 266 268 26a 26c 26e 270 272 274 276 278 27a 27c 27e 280 282 284 286 288 28a -033: 24d 24f 251 253 255 257 259 25b 25d 25f 261 263 265 267 269 26b 26d 26f 271 273 275 277 279 27b 27d 27f 281 283 285 287 289 28b -034: 28c 28e 290 292 294 296 298 29a 29c 29e 2a0 2a2 2a4 2a6 2a8 2aa 2ac 2ae 2b0 2b2 2b4 2b6 2b8 2ba 2bc 2be 2c0 2c2 2c4 2c6 2c8 2ca -035: 28d 28f 291 293 295 297 299 29b 29d 29f 2a1 2a3 2a5 2a7 2a9 2ab 2ad 2af 2b1 2b3 2b5 2b7 2b9 2bb 2bd 2bf 2c1 2c3 2c5 2c7 2c9 2cb -036: 2cc 2ce 2d0 2d2 2d4 2d6 2d8 2da 2dc 2de 2e0 2e2 2e4 2e6 2e8 2ea 2ec 2ee 2f0 2f2 2f4 2f6 2f8 2fa 2fc 2fe 300 302 304 306 308 30a -037: 2cd 2cf 2d1 2d3 2d5 2d7 2d9 2db 2dd 2df 2e1 2e3 2e5 2e7 2e9 2eb 2ed 2ef 2f1 2f3 2f5 2f7 2f9 2fb 2fd 2ff 301 303 305 307 309 30b -038: 30c 30e 310 312 314 316 318 31a 31c 31e 320 322 324 326 328 32a 32c 32e 330 332 334 336 338 33a 33c 33e 340 342 344 346 348 34a -039: 30d 30f 311 313 315 317 319 31b 31d 31f 321 323 325 327 329 32b 32d 32f 331 333 335 337 339 33b 33d 33f 341 343 345 347 349 34b -040: 34c 34e 350 352 354 356 358 35a 35c 35e 360 362 364 366 368 36a 36c 36e 370 372 374 376 378 37a 37c 37e 380 382 384 386 388 38a -041: 34d 34f 351 353 355 357 359 35b 35d 35f 361 363 365 367 369 36b 36d 36f 371 373 375 377 379 37b 37d 37f 381 383 385 387 389 38b -042: 38c 38e 390 392 394 397 399 39b 39d 39f 3a1 3a3 3a5 3a7 3a9 3ab 3ad 3af 3b1 3b3 3b5 3b7 3b9 3bb 3bd 3bf 3c1 3c3 3c5 3c7 3c9 3cb -043: 38d 38f 391 393 395 398 39a 39c 39e 3a0 3a2 3a4 3a6 3a8 3aa 3ac 3ae 3b0 3b2 3b4 3b6 3b8 3ba 3bc 3be 3c0 3c2 3c4 3c6 3c8 3ca 3cc -044: 3cd 3cf 3d1 3d3 3d5 3d7 3d9 3db 3dd 3df 3e1 3e3 3e5 3e7 3e9 3eb 3ed 3ef 3f1 3f3 3f5 3f7 3f9 3fb 3fd 3ff 401 403 405 407 409 40b -045: 3ce 3d0 3d2 3d4 3d6 3d8 3da 3dc 3de 3e0 3e2 3e4 3e6 3e8 3ea 3ec 3ee 3f0 3f2 3f4 3f6 3f8 3fa 3fc 3fe 400 402 404 406 408 40a 40c -046: 40d 40f 411 413 415 417 419 41b 41d 41f 421 423 425 427 429 42b 42d 42f 431 433 435 437 439 43b 43d 43f 441 443 445 447 449 44b -047: 40e 410 412 414 416 418 41a 41c 41e 420 422 424 426 428 42a 42c 42e 430 432 434 436 438 43a 43c 43e 440 442 444 446 448 44a 44c -048: 44d 44f 451 453 455 457 459 45b 45d 45f 461 463 465 467 469 46b 46d 46f 471 473 475 477 479 47b 47d 47f 481 483 485 487 489 48b -049: 44e 450 452 454 456 458 45a 45c 45e 460 462 464 466 468 46a 46c 46e 470 472 474 476 478 47a 47c 47e 480 482 484 486 488 48a 48c -050: 48d 48f 491 493 495 497 499 49b 49d 49f 4a1 4a3 4a5 4a7 4a9 4ab 4ad 4af 4b1 4b3 4b5 4b7 4b9 4bb 4bd 4bf 4c1 4c3 4c5 4c7 4c9 4cb -051: 48e 490 492 494 496 498 49a 49c 49e 4a0 4a2 4a4 4a6 4a8 4aa 4ac 4ae 4b0 4b2 4b4 4b6 4b8 4ba 4bc 4be 4c0 4c2 4c4 4c6 4c8 4ca 4cc -052: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 -053: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 diff --git a/waterbox/gpgx/core/cart_hw/svp/ssp16.c b/waterbox/gpgx/core/cart_hw/svp/ssp16.c deleted file mode 100644 index 5d451818e1..0000000000 --- a/waterbox/gpgx/core/cart_hw/svp/ssp16.c +++ /dev/null @@ -1,1333 +0,0 @@ -/* - basic, incomplete SSP160x (SSP1601?) interpreter - with SVP memory controller emu - - (c) Copyright 2008, Grazvydas "notaz" Ignotas - Free for non-commercial use. - - For commercial use, separate licencing terms must be obtained. - - Modified for Genesis Plus GX (Eke-Eke), added big endian support, fixed mode & addr -*/ - - -/* - * Register info - * - * 0. "-" - * size: 16 - * desc: Constant register with all bits set (0xffff). - * - * 1. "X" - * size: 16 - * desc: Generic register. When set, updates P (P = X * Y * 2) - * - * 2. "Y" - * size: 16 - * desc: Generic register. When set, updates P (P = X * Y * 2) - * - * 3. "A" - * size: 32 - * desc: Accumulator. - * - * 4. "ST" - * size: 16 - * desc: Status register. From MAME: bits 0-9 are CONTROL, other FLAG - * fedc ba98 7654 3210 - * 210 - RPL (?) "Loop size". If non-zero, makes (rX+) and (rX-) respectively - * modulo-increment and modulo-decrement. The value shows which - * power of 2 to use, i.e. 4 means modulo by 16. - * (e: fir16_32.sc, IIR_4B.SC, DECIM.SC) - * 43 - RB (?) - * 5 - GP0_0 (ST5?) Changed before acessing PM0 (affects banking?). - * 6 - GP0_1 (ST6?) Cleared before acessing PM0 (affects banking?). Set after. - * datasheet says these (5,6) bits correspond to hardware pins. - * 7 - IE (?) Not directly used by SVP code (never set, but preserved)? - * 8 - OP (?) Not used by SVP code (only cleared)? (MAME: saturated value - * (probably means clamping? i.e. 0x7ffc + 9 -> 0x7fff)) - * 9 - MACS (?) Not used by SVP code (only cleared)? (e: "mac shift") - * a - GPI_0 Interrupt 0 enable/status? - * b - GPI_1 Interrupt 1 enable/status? - * c - L L flag. Carry? - * d - Z Zero flag. - * e - OV Overflow flag. - * f - N Negative flag. - * seen directly changing code sequences: - * ldi ST, 0 ld A, ST ld A, ST ld A, ST ldi st, 20h - * ldi ST, 60h ori A, 60h and A, E8h and A, E8h - * ld ST, A ld ST, A ori 3 - * ld ST, A - * - * 5. "STACK" - * size: 16 - * desc: hw stack of 6 levels (according to datasheet) - * - * 6. "PC" - * size: 16 - * desc: Program counter. - * - * 7. "P" - * size: 32 - * desc: multiply result register. P = X * Y * 2 - * probably affected by MACS bit in ST. - * - * 8. "PM0" (PM from PMAR name from Tasco's docs) - * size: 16? - * desc: Programmable Memory access register. - * On reset, or when one (both?) GP0 bits are clear, - * acts as status for XST, mapped at 015004 at 68k side: - * bit0: ssp has written something to XST (cleared when 015004 is read) - * bit1: 68k has written something through a1500{0|2} (cleared on PM0 read) - * - * 9. "PM1" - * size: 16? - * desc: Programmable Memory access register. - * This reg. is only used as PMAR. - * - * 10. "PM2" - * size: 16? - * desc: Programmable Memory access register. - * This reg. is only used as PMAR. - * - * 11. "XST" - * size: 16? - * desc: eXternal STate. Mapped to a15000 and a15002 at 68k side. - * Can be programmed as PMAR? (only seen in test mode code) - * Affects PM0 when written to? - * - * 12. "PM4" - * size: 16? - * desc: Programmable Memory access register. - * This reg. is only used as PMAR. The most used PMAR by VR. - * - * 13. (unused by VR) - * - * 14. "PMC" (PMC from PMAC name from Tasco's docs) - * size: 32? - * desc: Programmable Memory access Control. Set using 2 16bit writes, - * first address, then mode word. After setting PMAC, PMAR sould - * be blind accessed (ld -, PMx or ld PMx, -) to program it for - * reading and writing respectively. - * Reading the register also shifts it's state (from "waiting for - * address" to "waiting for mode" and back). Reads always return - * address related to last PMx register accressed. - * (note: addresses do not wrap). - * - * 15. "AL" - * size: 16 - * desc: Accumulator Low. 16 least significant bits of accumulator. - * (normally reading acc (ld X, A) you get 16 most significant bits). - * - * - * There are 8 8-bit pointer registers rX. r0-r3 (ri) point to RAM0, r4-r7 (rj) point to RAM1. - * They can be accessed directly, or 2 indirection levels can be used [ (rX), ((rX)) ], - * which work similar to * and ** operators in C, only they use different memory banks and - * ((rX)) also does post-increment. First indirection level (rX) accesses RAMx, second accesses - * program memory at address read from (rX), and increments value in (rX). - * - * r0,r1,r2,r4,r5,r6 can be modified [ex: ldi r0, 5]. - * 3 modifiers can be applied (optional): - * + : post-increment [ex: ld a, (r0+) ]. Can be made modulo-increment by setting RPL bits in ST. - * - : post-decrement. Can be made modulo-decrement by setting RPL bits in ST (not sure). - * +!: post-increment, unaffected by RPL (probably). - * These are only used on 1st indirection level, so things like [ld a, ((r0+))] and [ld X, r6-] - * ar probably invalid. - * - * r3 and r7 are special and can not be changed (at least Samsung samples and SVP code never do). - * They are fixed to the start of their RAM banks. (They are probably changeable for ssp1605+, - * Samsung's old DSP page claims that). - * 1 of these 4 modifiers must be used (short form direct addressing?): - * |00: RAMx[0] [ex: (r3|00), 0] (based on sample code) - * |01: RAMx[1] - * |10: RAMx[2] ? maybe 10h? accortding to Div_c_dp.sc, 2 - * |11: RAMx[3] - * - * - * Instruction notes - * - * ld a, * doesn't affect flags! (e: A_LAW.SC, Div_c_dp.sc) - * - * mld (rj), (ri) [, b] - * operation: A = 0; P = (rj) * (ri) - * notes: based on IIR_4B.SC sample. flags? what is b??? - * - * mpya (rj), (ri) [, b] - * name: multiply and add? - * operation: A += P; P = (rj) * (ri) - * - * mpys (rj), (ri), b - * name: multiply and subtract? - * notes: not used by VR code. - * - * mod cond, op - * mod cond, shr does arithmetic shift - * - * 'ld -, AL' and probably 'ld AL, -' are for dummy assigns - * - * memory map: - * 000000 - 1fffff ROM, accessable by both - * 200000 - 2fffff unused? - * 300000 - 31ffff DRAM, both - * 320000 - 38ffff unused? - * 390000 - 3907ff IRAM. can only be accessed by ssp? - * 390000 - 39ffff similar mapping to "cell arrange" in Sega CD, 68k only? - * 3a0000 - 3affff similar mapping to "cell arrange" in Sega CD, a bit different - * - * 30fe02 - 0 if SVP busy, 1 if done (set by SVP, checked and cleared by 68k) - * 30fe06 - also sync related. - * 30fe08 - job number [1-12] for SVP. 0 means no job. Set by 68k, read-cleared by SVP. - * - * + figure out if 'op A, P' is 32bit (nearly sure it is) - * * does mld, mpya load their operands into X and Y? - * * OP simm - * - * Assumptions in this code - * P is not directly writeable - * flags correspond to full 32bit accumulator - * only Z and N status flags are emulated (others unused by SVP) - * modifiers for 'OP a, ri' are ignored (invalid?/not used by SVP) - * 'ld d, (a)' loads from program ROM - */ - -#include "shared.h" - - -#define u32 unsigned int - -/*#define USE_DEBUGGER*/ - -/* 0 */ -#define rX ssp->gr[SSP_X].byte.h -#define rY ssp->gr[SSP_Y].byte.h -#define rA ssp->gr[SSP_A].byte.h -#define rST ssp->gr[SSP_ST].byte.h /* 4 */ -#define rSTACK ssp->gr[SSP_STACK].byte.h -#define rPC ssp->gr[SSP_PC].byte.h -#define rP ssp->gr[SSP_P] -#define rPM0 ssp->gr[SSP_PM0].byte.h /* 8 */ -#define rPM1 ssp->gr[SSP_PM1].byte.h -#define rPM2 ssp->gr[SSP_PM2].byte.h -#define rXST ssp->gr[SSP_XST].byte.h -#define rPM4 ssp->gr[SSP_PM4].byte.h /* 12 */ -/* 13 */ -#define rPMC ssp->gr[SSP_PMC] /* will keep addr in .h, mode in .l */ -#define rAL ssp->gr[SSP_A].byte.l - -#define rA32 ssp->gr[SSP_A].v -#define rIJ ssp->ptr.r - -#define IJind (((op>>6)&4)|(op&3)) - -#define GET_PC() (PC - (unsigned short *)svp->iram_rom) -#define GET_PPC_OFFS() ((uintptr_t)PC - (uintptr_t)svp->iram_rom - 2) -#define SET_PC(d) PC = (unsigned short *)svp->iram_rom + d - -#define REG_READ(r) (((r) <= 4) ? ssp->gr[r].byte.h : read_handlers[r]()) -#define REG_WRITE(r,d) { \ - int r1 = r; \ - if (r1 >= 4) write_handlers[r1](d); \ - else if (r1 > 0) ssp->gr[r1].byte.h = d; \ -} - -/* flags */ -#define SSP_FLAG_L (1<<0xc) -#define SSP_FLAG_Z (1<<0xd) -#define SSP_FLAG_V (1<<0xe) -#define SSP_FLAG_N (1<<0xf) - -/* update ZN according to 32bit ACC. */ -#define UPD_ACC_ZN \ - rST &= ~(SSP_FLAG_Z|SSP_FLAG_N); \ - if (!rA32) rST |= SSP_FLAG_Z; \ - else rST |= (rA32>>16)&SSP_FLAG_N; - -/* it seems SVP code never checks for L and OV, so we leave them out. */ -/* rST |= (t>>4)&SSP_FLAG_L; */ -#define UPD_LZVN \ - rST &= ~(SSP_FLAG_L|SSP_FLAG_Z|SSP_FLAG_V|SSP_FLAG_N); \ - if (!rA32) rST |= SSP_FLAG_Z; \ - else rST |= (rA32>>16)&SSP_FLAG_N; - -/* standard cond processing. */ -/* again, only Z and N is checked, as SVP doesn't seem to use any other conds. */ -#define COND_CHECK \ - switch (op&0xf0) { \ - case 0x00: cond = 1; break; /* always true */ \ - case 0x50: cond = !((rST ^ (op<<5)) & SSP_FLAG_Z); break; /* Z matches f(?) bit */ \ - case 0x70: cond = !((rST ^ (op<<7)) & SSP_FLAG_N); break; /* N matches f(?) bit */ \ - default: break; \ - } - -/* ops with accumulator. */ -/* how is low word really affected by these? */ -/* nearly sure 'ld A' doesn't affect flags */ -#define OP_LDA(x) \ - rA = x - -#define OP_LDA32(x) \ - rA32 = x - -#define OP_SUBA(x) { \ - rA32 -= (x) << 16; \ - UPD_LZVN \ -} - -#define OP_SUBA32(x) { \ - rA32 -= (x); \ - UPD_LZVN \ -} - -#define OP_CMPA(x) { \ - u32 t = rA32 - ((x) << 16); \ - rST &= ~(SSP_FLAG_L|SSP_FLAG_Z|SSP_FLAG_V|SSP_FLAG_N); \ - if (!t) rST |= SSP_FLAG_Z; \ - else rST |= (t>>16)&SSP_FLAG_N; \ -} - -#define OP_CMPA32(x) { \ - u32 t = rA32 - (x); \ - rST &= ~(SSP_FLAG_L|SSP_FLAG_Z|SSP_FLAG_V|SSP_FLAG_N); \ - if (!t) rST |= SSP_FLAG_Z; \ - else rST |= (t>>16)&SSP_FLAG_N; \ -} - -#define OP_ADDA(x) { \ - rA32 += (x) << 16; \ - UPD_LZVN \ -} - -#define OP_ADDA32(x) { \ - rA32 += (x); \ - UPD_LZVN \ -} - -#define OP_ANDA(x) \ - rA32 &= (x) << 16; \ - UPD_ACC_ZN - -#define OP_ANDA32(x) \ - rA32 &= (x); \ - UPD_ACC_ZN - -#define OP_ORA(x) \ - rA32 |= (x) << 16; \ - UPD_ACC_ZN - -#define OP_ORA32(x) \ - rA32 |= (x); \ - UPD_ACC_ZN - -#define OP_EORA(x) \ - rA32 ^= (x) << 16; \ - UPD_ACC_ZN - -#define OP_EORA32(x) \ - rA32 ^= (x); \ - UPD_ACC_ZN - - -#define OP_CHECK32(OP) { \ - if ((op & 0x0f) == SSP_P) { /* A <- P */ \ - read_P(); /* update P */ \ - OP(rP.v); \ - break; \ - } \ - if ((op & 0x0f) == SSP_A) { /* A <- A */ \ - OP(rA32); \ - break; \ - } \ -} - - -static ssp1601_t *ssp = NULL; -static unsigned short *PC; -static int g_cycles; - -#ifdef USE_DEBUGGER -static int running = 0; -static int last_iram = 0; -#endif - -/* ----------------------------------------------------- */ -/* register i/o handlers */ - -/* 0-4, 13 */ -static u32 read_unknown(void) -{ -#ifdef LOG_SVP - elprintf(EL_ANOMALY|EL_SVP, "ssp FIXME: unknown read @ %04x", GET_PPC_OFFS()); -#endif - return 0; -} - -static void write_unknown(u32 d) -{ -#ifdef LOG_SVP - elprintf(EL_ANOMALY|EL_SVP, "ssp FIXME: unknown write @ %04x", GET_PPC_OFFS()); -#endif -} - -/* 4 */ -static void write_ST(u32 d) -{ - /* if ((rST ^ d) & 0x0007) elprintf(EL_SVP, "ssp RPL %i -> %i @ %04x", rST&7, d&7, GET_PPC_OFFS()); */ -#ifdef LOG_SVP - if ((rST ^ d) & 0x0f98) elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME ST %04x -> %04x @ %04x", rST, d, GET_PPC_OFFS()); -#endif - rST = d; -} - -/* 5 */ -static u32 read_STACK(void) -{ - --rSTACK; - if ((short)rSTACK < 0) { - rSTACK = 5; -#ifdef LOG_SVP - elprintf(EL_ANOMALY|EL_SVP, "ssp FIXME: stack underflow! (%i) @ %04x", rSTACK, GET_PPC_OFFS()); -#endif - } - return ssp->stack[rSTACK]; -} - -static void write_STACK(u32 d) -{ - if (rSTACK >= 6) { -#ifdef LOG_SVP - elprintf(EL_ANOMALY|EL_SVP, "ssp FIXME: stack overflow! (%i) @ %04x", rSTACK, GET_PPC_OFFS()); -#endif - rSTACK = 0; - } - ssp->stack[rSTACK++] = d; -} - -/* 6 */ -static u32 read_PC(void) -{ - /* g_cycles--; */ - return GET_PC(); -} - -static void write_PC(u32 d) -{ - SET_PC(d); - g_cycles--; -} - -/* 7 */ -static u32 read_P(void) -{ - int m1 = (signed short)rX; - int m2 = (signed short)rY; - rP.v = (m1 * m2 * 2); - return rP.byte.h; -} - -/* ----------------------------------------------------- */ - -static int get_inc(int mode) -{ - int inc = (mode >> 11) & 7; - if (inc != 0) { - if (inc != 7) inc--; - /* inc = (1<<16) << inc; */ - inc = 1 << inc; /* 0 1 2 4 8 16 32 128 */ - if (mode & 0x8000) inc = -inc; /* decrement mode */ - } - return inc; -} - -#define overwite_write(dst, d) \ -{ \ - if (d & 0xf000) { dst &= ~0xf000; dst |= d & 0xf000; } \ - if (d & 0x0f00) { dst &= ~0x0f00; dst |= d & 0x0f00; } \ - if (d & 0x00f0) { dst &= ~0x00f0; dst |= d & 0x00f0; } \ - if (d & 0x000f) { dst &= ~0x000f; dst |= d & 0x000f; } \ -} - -static u32 pm_io(int reg, int write, u32 d) -{ - if (ssp->emu_status & SSP_PMC_SET) - { - /* this MUST be blind r or w */ - if ((*(PC-1) & 0xff0f) && (*(PC-1) & 0xfff0)) { -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: tried to set PM%i (%c) with non-blind i/o %08x @ %04x", - reg, write ? 'w' : 'r', rPMC.v, GET_PPC_OFFS()); -#endif - ssp->emu_status &= ~SSP_PMC_SET; - return 0; - } -#ifdef LOG_SVP - elprintf(EL_SVP, "PM%i (%c) set to %08x @ %04x", reg, write ? 'w' : 'r', rPMC.v, GET_PPC_OFFS()); -#endif - ssp->pmac[write][reg] = rPMC.v; - ssp->emu_status &= ~SSP_PMC_SET; -#ifdef LOG_SVP - if ((rPMC.v & 0x7f) == 0x1c && (rPMC.v & 0x7fff0000) == 0) { - elprintf(EL_SVP, "ssp IRAM copy from %06x", (ssp->mem.bank.RAM1[0]-1)<<1); -#ifdef USE_DEBUGGER - last_iram = (ssp->mem.bank.RAM1[0]-1)<<1; -#endif - } -#endif - return 0; - } - - /* just in case */ - if (ssp->emu_status & SSP_PMC_HAVE_ADDR) { -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: PM%i (%c) with only addr set @ %04x", - reg, write ? 'w' : 'r', GET_PPC_OFFS()); -#endif - ssp->emu_status &= ~SSP_PMC_HAVE_ADDR; - } - - if (reg == 4 || (rST & 0x60)) - { -#ifdef LOG_SVP - #define CADDR ((((mode<<16)&0x7f0000)|addr)<<1) -#endif - unsigned short *dram = (unsigned short *)svp->dram; - if (write) - { - /*int mode = ssp->pmac_write[reg]&0xffff; - int addr = ssp->pmac_write[reg]>>16;*/ - int addr = ssp->pmac[1][reg]&0xffff; - int mode = ssp->pmac[1][reg]>>16; -#ifdef LOG_SVP - if ((mode & 0xb800) == 0xb800) - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: mode %04x", mode); -#endif - if ((mode & 0x43ff) == 0x0018) /* DRAM */ - { - int inc = get_inc(mode); -#ifdef LOG_SVP - elprintf(EL_SVP, "ssp PM%i DRAM w [%06x] %04x (inc %i, ovrw %i)", - reg, CADDR, d, inc >> 16, (mode>>10)&1); -#endif - if (mode & 0x0400) { - overwite_write(dram[addr], d); - } else dram[addr] = d; - ssp->pmac[1][reg] += inc; - } - else if ((mode & 0xfbff) == 0x4018) /* DRAM, cell inc */ - { -#ifdef LOG_SVP - elprintf(EL_SVP, "ssp PM%i DRAM w [%06x] %04x (cell inc, ovrw %i) @ %04x", - reg, CADDR, d, (mode>>10)&1, GET_PPC_OFFS()); -#endif - if (mode & 0x0400) { - overwite_write(dram[addr], d); - } else dram[addr] = d; - /* ssp->pmac_write[reg] += (addr&1) ? (31<<16) : (1<<16); */ - ssp->pmac[1][reg] += (addr&1) ? 31 : 1; - } - else if ((mode & 0x47ff) == 0x001c) /* IRAM */ - { - int inc = get_inc(mode); -#ifdef LOG_SVP - if ((addr&0xfc00) != 0x8000) - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: invalid IRAM addr: %04x", addr<<1); - elprintf(EL_SVP, "ssp IRAM w [%06x] %04x (inc %i)", (addr<<1)&0x7ff, d, inc >> 16); -#endif - ((unsigned short *)svp->iram_rom)[addr&0x3ff] = d; - ssp->pmac[1][reg] += inc; - } -#ifdef LOG_SVP - else - { - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: PM%i unhandled write mode %04x, [%06x] %04x @ %04x", - reg, mode, CADDR, d, GET_PPC_OFFS()); - } -#endif - } - else - { - /*int mode = ssp->pmac_read[reg]&0xffff; - int addr = ssp->pmac_read[reg]>>16;*/ - int addr = ssp->pmac[0][reg]&0xffff; - int mode = ssp->pmac[0][reg]>>16; - - if ((mode & 0xfff0) == 0x0800) /* ROM, inc 1, verified to be correct */ - { -#ifdef LOG_SVP - elprintf(EL_SVP, "ssp ROM r [%06x] %04x", CADDR, - ((unsigned short *)cart.rom)[addr|((mode&0xf)<<16)]); -#endif - /*if ((signed int)ssp->pmac_read[reg] >> 16 == -1) ssp->pmac_read[reg]++; - ssp->pmac_read[reg] += 1<<16;*/ - if ((signed int)(ssp->pmac[0][reg] & 0xffff) == -1) ssp->pmac[0][reg] += 1<<16; - ssp->pmac[0][reg] ++; - - d = ((unsigned short *)cart.rom)[addr|((mode&0xf)<<16)]; - } - else if ((mode & 0x47ff) == 0x0018) /* DRAM */ - { - int inc = get_inc(mode); -#ifdef LOG_SVP - elprintf(EL_SVP, "ssp PM%i DRAM r [%06x] %04x (inc %i)", reg, CADDR, dram[addr], inc >> 16); -#endif - d = dram[addr]; - ssp->pmac[0][reg] += inc; - } - else - { -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: PM%i unhandled read mode %04x, [%06x] @ %04x", - reg, mode, CADDR, GET_PPC_OFFS()); -#endif - d = 0; - } - } - - /* PMC value corresponds to last PMR accessed (not sure). */ - rPMC.v = ssp->pmac[write][reg]; - - return d; - } - - return (u32)-1; -} - -/* 8 */ -static u32 read_PM0(void) -{ - u32 d = pm_io(0, 0, 0); - if (d != (u32)-1) return d; -#ifdef LOG_SVP - elprintf(EL_SVP, "PM0 raw r %04x @ %04x", rPM0, GET_PPC_OFFS()); -#endif - d = rPM0; - if (!(d & 2) && (GET_PPC_OFFS() == 0x800 || GET_PPC_OFFS() == 0x1851E)) { - ssp->emu_status |= SSP_WAIT_PM0; -#ifdef LOG_SVP - elprintf(EL_SVP, "det TIGHT loop: PM0"); -#endif - } - rPM0 &= ~2; /* ? */ - return d; -} - -static void write_PM0(u32 d) -{ - u32 r = pm_io(0, 1, d); - if (r != (u32)-1) return; -#ifdef LOG_SVP - elprintf(EL_SVP, "PM0 raw w %04x @ %04x", d, GET_PPC_OFFS()); -#endif - rPM0 = d; -} - -/* 9 */ -static u32 read_PM1(void) -{ - u32 d = pm_io(1, 0, 0); - if (d != (u32)-1) return d; - /* can be removed? */ -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "PM1 raw r %04x @ %04x", rPM1, GET_PPC_OFFS()); -#endif - return rPM1; -} - -static void write_PM1(u32 d) -{ - u32 r = pm_io(1, 1, d); - if (r != (u32)-1) return; - /* can be removed? */ -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "PM1 raw w %04x @ %04x", d, GET_PPC_OFFS()); -#endif - rPM1 = d; -} - -/* 10 */ -static u32 read_PM2(void) -{ - u32 d = pm_io(2, 0, 0); - if (d != (u32)-1) return d; - /* can be removed? */ -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "PM2 raw r %04x @ %04x", rPM2, GET_PPC_OFFS()); -#endif - return rPM2; -} - -static void write_PM2(u32 d) -{ - u32 r = pm_io(2, 1, d); - if (r != (u32)-1) return; - /* can be removed? */ -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "PM2 raw w %04x @ %04x", d, GET_PPC_OFFS()); -#endif - rPM2 = d; -} - -/* 11 */ -static u32 read_XST(void) -{ - /* can be removed? */ - u32 d = pm_io(3, 0, 0); - if (d != (u32)-1) return d; -#ifdef LOG_SVP - elprintf(EL_SVP, "XST raw r %04x @ %04x", rXST, GET_PPC_OFFS()); -#endif - return rXST; -} - -static void write_XST(u32 d) -{ - /* can be removed? */ - u32 r = pm_io(3, 1, d); - if (r != (u32)-1) return; -#ifdef LOG_SVP - elprintf(EL_SVP, "XST raw w %04x @ %04x", d, GET_PPC_OFFS()); -#endif - rPM0 |= 1; - rXST = d; -} - -/* 12 */ -static u32 read_PM4(void) -{ - u32 d = pm_io(4, 0, 0); - if (d == 0) { - switch (GET_PPC_OFFS()) { - case 0x0854: - ssp->emu_status |= SSP_WAIT_30FE08; -#ifdef LOG_SVP - elprintf(EL_SVP, "det TIGHT loop: [30fe08]"); -#endif - break; - case 0x4f12: - ssp->emu_status |= SSP_WAIT_30FE06; -#ifdef LOG_SVP - elprintf(EL_SVP, "det TIGHT loop: [30fe06]"); -#endif - break; - } - } - if (d != (u32)-1) return d; - /* can be removed? */ -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "PM4 raw r %04x @ %04x", rPM4, GET_PPC_OFFS()); -#endif - return rPM4; -} - -static void write_PM4(u32 d) -{ - u32 r = pm_io(4, 1, d); - if (r != (u32)-1) return; - /* can be removed? */ -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "PM4 raw w %04x @ %04x", d, GET_PPC_OFFS()); -#endif - rPM4 = d; -} - -/* 14 */ -static u32 read_PMC(void) -{ -#ifdef LOG_SVP - elprintf(EL_SVP, "PMC r a %04x (st %c) @ %04x", rPMC.byte.h, - (ssp->emu_status & SSP_PMC_HAVE_ADDR) ? 'm' : 'a', GET_PPC_OFFS()); -#endif - if (ssp->emu_status & SSP_PMC_HAVE_ADDR) { - /* if (ssp->emu_status & SSP_PMC_SET) */ - /* elprintf(EL_ANOMALY|EL_SVP, "prev PMC not used @ %04x", GET_PPC_OFFS()); */ - ssp->emu_status |= SSP_PMC_SET; - ssp->emu_status &= ~SSP_PMC_HAVE_ADDR; - /* return ((rPMC.h << 4) & 0xfff0) | ((rPMC.h >> 4) & 0xf); */ - return ((rPMC.byte.l << 4) & 0xfff0) | ((rPMC.byte.l >> 4) & 0xf); - } else { - ssp->emu_status |= SSP_PMC_HAVE_ADDR; - /* return rPMC.h; */ - return rPMC.byte.l; - } -} - -static void write_PMC(u32 d) -{ - if (ssp->emu_status & SSP_PMC_HAVE_ADDR) { - /* if (ssp->emu_status & SSP_PMC_SET) */ - /* elprintf(EL_ANOMALY|EL_SVP, "prev PMC not used @ %04x", GET_PPC_OFFS()); */ - ssp->emu_status |= SSP_PMC_SET; - ssp->emu_status &= ~SSP_PMC_HAVE_ADDR; - /* rPMC.l = d; */ - rPMC.byte.h = d; -#ifdef LOG_SVP - elprintf(EL_SVP, "PMC w m %04x @ %04x", rPMC.byte.l, GET_PPC_OFFS()); -#endif - } else { - ssp->emu_status |= SSP_PMC_HAVE_ADDR; - /* rPMC.h = d; */ - rPMC.byte.l = d; -#ifdef LOG_SVP - elprintf(EL_SVP, "PMC w a %04x @ %04x", rPMC.byte.h, GET_PPC_OFFS()); -#endif - } -} - -/* 15 */ -static u32 read_AL(void) -{ - if (*(PC-1) == 0x000f) { -#ifdef LOG_SVP - elprintf(EL_SVP, "ssp dummy PM assign %08x @ %04x", rPMC.v, GET_PPC_OFFS()); -#endif - ssp->emu_status &= ~(SSP_PMC_SET|SSP_PMC_HAVE_ADDR); /* ? */ - } - return rAL; -} - -static void write_AL(u32 d) -{ - rAL = d; -} - - -typedef u32 (*read_func_t)(void); -typedef void (*write_func_t)(u32 d); - -static read_func_t read_handlers[16] = -{ - read_unknown, read_unknown, read_unknown, read_unknown, /* -, X, Y, A */ - read_unknown, /* 4 ST */ - read_STACK, - read_PC, - read_P, - read_PM0, /* 8 */ - read_PM1, - read_PM2, - read_XST, - read_PM4, /* 12 */ - read_unknown, /* 13 gr13 */ - read_PMC, - read_AL -}; - -static write_func_t write_handlers[16] = -{ - write_unknown, write_unknown, write_unknown, write_unknown, /* -, X, Y, A */ -/* write_unknown, */ /* 4 ST */ - write_ST, /* 4 ST (debug hook) */ - write_STACK, - write_PC, - write_unknown, /* 7 P */ - write_PM0, /* 8 */ - write_PM1, - write_PM2, - write_XST, - write_PM4, /* 12 */ - write_unknown, /* 13 gr13 */ - write_PMC, - write_AL -}; - -/* ----------------------------------------------------- */ -/* pointer register handlers */ - -#define ptr1_read(op) ptr1_read_(op&3,(op>>6)&4,(op<<1)&0x18) - -static u32 ptr1_read_(int ri, int isj2, int modi3) -{ - /* int t = (op&3) | ((op>>6)&4) | ((op<<1)&0x18); */ - u32 mask, add = 0, t = ri | isj2 | modi3; - unsigned char *rp = NULL; - switch (t) - { - /* mod=0 (00) */ - case 0x00: - case 0x01: - case 0x02: return ssp->mem.bank.RAM0[ssp->ptr.bank.r0[t&3]]; - case 0x03: return ssp->mem.bank.RAM0[0]; - case 0x04: - case 0x05: - case 0x06: return ssp->mem.bank.RAM1[ssp->ptr.bank.r1[t&3]]; - case 0x07: return ssp->mem.bank.RAM1[0]; - /* mod=1 (01), "+!" */ - case 0x08: - case 0x09: - case 0x0a: return ssp->mem.bank.RAM0[ssp->ptr.bank.r0[t&3]++]; - case 0x0b: return ssp->mem.bank.RAM0[1]; - case 0x0c: - case 0x0d: - case 0x0e: return ssp->mem.bank.RAM1[ssp->ptr.bank.r1[t&3]++]; - case 0x0f: return ssp->mem.bank.RAM1[1]; - /* mod=2 (10), "-" */ - case 0x10: - case 0x11: - case 0x12: rp = &ssp->ptr.bank.r0[t&3]; t = ssp->mem.bank.RAM0[*rp]; - if (!(rST&7)) { (*rp)--; return t; } - add = -1; goto modulo; - case 0x13: return ssp->mem.bank.RAM0[2]; - case 0x14: - case 0x15: - case 0x16: rp = &ssp->ptr.bank.r1[t&3]; t = ssp->mem.bank.RAM1[*rp]; - if (!(rST&7)) { (*rp)--; return t; } - add = -1; goto modulo; - case 0x17: return ssp->mem.bank.RAM1[2]; - /* mod=3 (11), "+" */ - case 0x18: - case 0x19: - case 0x1a: rp = &ssp->ptr.bank.r0[t&3]; t = ssp->mem.bank.RAM0[*rp]; - if (!(rST&7)) { (*rp)++; return t; } - add = 1; goto modulo; - case 0x1b: return ssp->mem.bank.RAM0[3]; - case 0x1c: - case 0x1d: - case 0x1e: rp = &ssp->ptr.bank.r1[t&3]; t = ssp->mem.bank.RAM1[*rp]; - if (!(rST&7)) { (*rp)++; return t; } - add = 1; goto modulo; - case 0x1f: return ssp->mem.bank.RAM1[3]; - } - - return 0; - -modulo: - mask = (1 << (rST&7)) - 1; - *rp = (*rp & ~mask) | ((*rp + add) & mask); - return t; -} - -static void ptr1_write(int op, u32 d) -{ - int t = (op&3) | ((op>>6)&4) | ((op<<1)&0x18); - switch (t) - { - /* mod=0 (00) */ - case 0x00: - case 0x01: - case 0x02: ssp->mem.bank.RAM0[ssp->ptr.bank.r0[t&3]] = d; return; - case 0x03: ssp->mem.bank.RAM0[0] = d; return; - case 0x04: - case 0x05: - case 0x06: ssp->mem.bank.RAM1[ssp->ptr.bank.r1[t&3]] = d; return; - case 0x07: ssp->mem.bank.RAM1[0] = d; return; - /* mod=1 (01), "+!" */ - /* mod=3, "+" */ - case 0x08: - case 0x18: - case 0x09: - case 0x19: - case 0x0a: - case 0x1a: ssp->mem.bank.RAM0[ssp->ptr.bank.r0[t&3]++] = d; return; - case 0x0b: ssp->mem.bank.RAM0[1] = d; return; - case 0x0c: - case 0x1c: - case 0x0d: - case 0x1d: - case 0x0e: - case 0x1e: ssp->mem.bank.RAM1[ssp->ptr.bank.r1[t&3]++] = d; return; - case 0x0f: ssp->mem.bank.RAM1[1] = d; return; - /* mod=2 (10), "-" */ - case 0x10: - case 0x11: - case 0x12: ssp->mem.bank.RAM0[ssp->ptr.bank.r0[t&3]--] = d; return; - case 0x13: ssp->mem.bank.RAM0[2] = d; return; - case 0x14: - case 0x15: - case 0x16: ssp->mem.bank.RAM1[ssp->ptr.bank.r1[t&3]--] = d; return; - case 0x17: ssp->mem.bank.RAM1[2] = d; return; - /* mod=3 (11) */ - case 0x1b: ssp->mem.bank.RAM0[3] = d; return; - case 0x1f: ssp->mem.bank.RAM1[3] = d; return; - } -} - -static u32 ptr2_read(int op) -{ - int mv = 0, t = (op&3) | ((op>>6)&4) | ((op<<1)&0x18); - switch (t) - { - /* mod=0 (00) */ - case 0x00: - case 0x01: - case 0x02: mv = ssp->mem.bank.RAM0[ssp->ptr.bank.r0[t&3]]++; break; - case 0x03: mv = ssp->mem.bank.RAM0[0]++; break; - case 0x04: - case 0x05: - case 0x06: mv = ssp->mem.bank.RAM1[ssp->ptr.bank.r1[t&3]]++; break; - case 0x07: mv = ssp->mem.bank.RAM1[0]++; break; - /* mod=1 (01) */ - case 0x0b: mv = ssp->mem.bank.RAM0[1]++; break; - case 0x0f: mv = ssp->mem.bank.RAM1[1]++; break; - /* mod=2 (10) */ - case 0x13: mv = ssp->mem.bank.RAM0[2]++; break; - case 0x17: mv = ssp->mem.bank.RAM1[2]++; break; - /* mod=3 (11) */ - case 0x1b: mv = ssp->mem.bank.RAM0[3]++; break; - case 0x1f: mv = ssp->mem.bank.RAM1[3]++; break; - default: -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: invalid mod in ((rX))? @ %04x", GET_PPC_OFFS()); -#endif - return 0; - } - - return ((unsigned short *)svp->iram_rom)[mv]; -} - - -/* ----------------------------------------------------- */ - -void ssp1601_reset(ssp1601_t *l_ssp) -{ - ssp = l_ssp; - ssp->emu_status = 0; - ssp->gr[SSP_GR0].v = 0xffff0000; - rPC = 0x400; - rSTACK = 0; /* ? using ascending stack */ - rST = 0; -} - - -#ifdef USE_DEBUGGER -static void debug_dump(void) -{ - printf("GR0: %04x X: %04x Y: %04x A: %08x\n", ssp->gr[SSP_GR0].byte.h, rX, rY, ssp->gr[SSP_A].v); - printf("PC: %04x (%04x) P: %08x\n", GET_PC(), GET_PC() << 1, ssp->gr[SSP_P].v); - printf("PM0: %04x PM1: %04x PM2: %04x\n", rPM0, rPM1, rPM2); - printf("XST: %04x PM4: %04x PMC: %08x\n", rXST, rPM4, ssp->gr[SSP_PMC].v); - printf(" ST: %04x %c%c%c%c, GP0_0 %i, GP0_1 %i\n", rST, rST&SSP_FLAG_N?'N':'n', rST&SSP_FLAG_V?'V':'v', - rST&SSP_FLAG_Z?'Z':'z', rST&SSP_FLAG_L?'L':'l', (rST>>5)&1, (rST>>6)&1); - printf("STACK: %i %04x %04x %04x %04x %04x %04x\n", rSTACK, ssp->stack[0], ssp->stack[1], - ssp->stack[2], ssp->stack[3], ssp->stack[4], ssp->stack[5]); - printf("r0-r2: %02x %02x %02x r4-r6: %02x %02x %02x\n", rIJ[0], rIJ[1], rIJ[2], rIJ[4], rIJ[5], rIJ[6]); - elprintf(EL_SVP, "cycles: %i, emu_status: %x", g_cycles, ssp->emu_status); -} - -static void debug_dump_mem(void) -{ - int h, i; - printf("RAM0\n"); - for (h = 0; h < 32; h++) - { - if (h == 16) printf("RAM1\n"); - printf("%03x:", h*16); - for (i = 0; i < 16; i++) - printf(" %04x", ssp->mem.RAM[h*16+i]); - printf("\n"); - } -} - -static void debug_dump2file(const char *fname, void *mem, int len) -{ - FILE *f = fopen(fname, "wb"); - unsigned short *p = mem; - int i; - if (f) { - for (i = 0; i < len/2; i++) p[i] = (p[i]<<8) | (p[i]>>8); - fwrite(mem, 1, len, f); - fclose(f); - for (i = 0; i < len/2; i++) p[i] = (p[i]<<8) | (p[i]>>8); - printf("dumped to %s\n", fname); - } - else - printf("dump failed\n"); -} - -static int bpts[10] = { 0, }; - -static void debug(unsigned int pc, unsigned int op) -{ - static char buffo[64] = {0,}; - char buff[64] = {0,}; - int i; - - if (running) { - for (i = 0; i < 10; i++) - if (pc != 0 && bpts[i] == pc) { - printf("breakpoint %i\n", i); - running = 0; - break; - } - } - if (running) return; - - printf("%04x (%02x) @ %04x\n", op, op >> 9, pc<<1); - - while (1) - { - printf("dbg> "); - fflush(stdout); - fgets(buff, sizeof(buff), stdin); - if (buff[0] == '\n') strcpy(buff, buffo); - else strcpy(buffo, buff); - - switch (buff[0]) { - case 0: exit(0); - case 'c': - case 'r': running = 1; return; - case 's': - case 'n': return; - case 'x': debug_dump(); break; - case 'm': debug_dump_mem(); break; - case 'b': { - char *baddr = buff + 2; - i = 0; - if (buff[3] == ' ') { i = buff[2] - '0'; baddr = buff + 4; } - bpts[i] = strtol(baddr, NULL, 16) >> 1; - printf("breakpoint %i set @ %04x\n", i, bpts[i]<<1); - break; - } - case 'd': - sprintf(buff, "iramrom_%04x.bin", last_iram); - debug_dump2file(buff, svp->iram_rom, sizeof(svp->iram_rom)); - debug_dump2file("dram.bin", svp->dram, sizeof(svp->dram)); - break; - default: printf("unknown command\n"); break; - } - } -} -#endif /* USE_DEBUGGER */ - - -void ssp1601_run(int cycles) -{ - SET_PC(rPC); - g_cycles = cycles; - - do - { - int op; - u32 tmpv; - - op = *PC++; -#ifdef USE_DEBUGGER - debug(GET_PC()-1, op); -#endif - switch (op >> 9) - { - /* ld d, s */ - case 0x00: - if (op == 0) break; /* nop */ - if (op == ((SSP_A<<4)|SSP_P)) { /* A <- P */ - /* not sure. MAME claims that only hi word is transfered. */ - read_P(); /* update P */ - rA32 = rP.v; - } - else - { - tmpv = REG_READ(op & 0x0f); - REG_WRITE((op & 0xf0) >> 4, tmpv); - } - break; - - /* ld d, (ri) */ - case 0x01: tmpv = ptr1_read(op); REG_WRITE((op & 0xf0) >> 4, tmpv); break; - - /* ld (ri), s */ - case 0x02: tmpv = REG_READ((op & 0xf0) >> 4); ptr1_write(op, tmpv); break; - - /* ldi d, imm */ - case 0x04: tmpv = *PC++; REG_WRITE((op & 0xf0) >> 4, tmpv); break; - - /* ld d, ((ri)) */ - case 0x05: tmpv = ptr2_read(op); REG_WRITE((op & 0xf0) >> 4, tmpv); break; - - /* ldi (ri), imm */ - case 0x06: tmpv = *PC++; ptr1_write(op, tmpv); break; - - /* ld adr, a */ - case 0x07: ssp->mem.RAM[op & 0x1ff] = rA; break; - - /* ld d, ri */ - case 0x09: tmpv = rIJ[(op&3)|((op>>6)&4)]; REG_WRITE((op & 0xf0) >> 4, tmpv); break; - - /* ld ri, s */ - case 0x0a: rIJ[(op&3)|((op>>6)&4)] = REG_READ((op & 0xf0) >> 4); break; - - /* ldi ri, simm */ - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: rIJ[(op>>8)&7] = op; break; - - /* call cond, addr */ - case 0x24: { - int cond = 0; - COND_CHECK - if (cond) { int new_PC = *PC++; write_STACK(GET_PC()); write_PC(new_PC); } - else PC++; - break; - } - - /* ld d, (a) */ - case 0x25: tmpv = ((unsigned short *)svp->iram_rom)[rA]; REG_WRITE((op & 0xf0) >> 4, tmpv); break; - - /* bra cond, addr */ - case 0x26: { - int cond = 0; - COND_CHECK - if (cond) { int new_PC = *PC++; write_PC(new_PC); } - else PC++; - break; - } - - /* mod cond, op */ - case 0x48: { - int cond = 0; - COND_CHECK - if (cond) { - switch (op & 7) { - case 2: rA32 = (signed int)rA32 >> 1; break; /* shr (arithmetic) */ - case 3: rA32 <<= 1; break; /* shl */ - case 6: rA32 = -(signed int)rA32; break; /* neg */ - case 7: if ((int)rA32 < 0) rA32 = -(signed int)rA32; break; /* abs */ - default: -#ifdef LOG_SVP - elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: unhandled mod %i @ %04x", - op&7, GET_PPC_OFFS()); -#endif - break; - } - UPD_ACC_ZN /* ? */ - } - break; - } - - /* mpys? */ - case 0x1b: -#ifdef LOG_SVP - if (!(op&0x100)) elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: no b bit @ %04x", GET_PPC_OFFS()); -#endif - read_P(); /* update P */ - rA32 -= rP.v; /* maybe only upper word? */ - UPD_ACC_ZN /* there checking flags after this */ - rX = ptr1_read_(op&3, 0, (op<<1)&0x18); /* ri (maybe rj?) */ - rY = ptr1_read_((op>>4)&3, 4, (op>>3)&0x18); /* rj */ - break; - - /* mpya (rj), (ri), b */ - case 0x4b: -#ifdef LOG_SVP - if (!(op&0x100)) elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: no b bit @ %04x", GET_PPC_OFFS()); -#endif - read_P(); /* update P */ - rA32 += rP.v; /* confirmed to be 32bit */ - UPD_ACC_ZN /* ? */ - rX = ptr1_read_(op&3, 0, (op<<1)&0x18); /* ri (maybe rj?) */ - rY = ptr1_read_((op>>4)&3, 4, (op>>3)&0x18); /* rj */ - break; - - /* mld (rj), (ri), b */ - case 0x5b: -#ifdef LOG_SVP - if (!(op&0x100)) elprintf(EL_SVP|EL_ANOMALY, "ssp FIXME: no b bit @ %04x", GET_PPC_OFFS()); -#endif - rA32 = 0; - rST &= 0x0fff; /* ? */ - rX = ptr1_read_(op&3, 0, (op<<1)&0x18); /* ri (maybe rj?) */ - rY = ptr1_read_((op>>4)&3, 4, (op>>3)&0x18); /* rj */ - break; - - /* OP a, s */ - case 0x10: OP_CHECK32(OP_SUBA32); tmpv = REG_READ(op & 0x0f); OP_SUBA(tmpv); break; - case 0x30: OP_CHECK32(OP_CMPA32); tmpv = REG_READ(op & 0x0f); OP_CMPA(tmpv); break; - case 0x40: OP_CHECK32(OP_ADDA32); tmpv = REG_READ(op & 0x0f); OP_ADDA(tmpv); break; - case 0x50: OP_CHECK32(OP_ANDA32); tmpv = REG_READ(op & 0x0f); OP_ANDA(tmpv); break; - case 0x60: OP_CHECK32(OP_ORA32 ); tmpv = REG_READ(op & 0x0f); OP_ORA (tmpv); break; - case 0x70: OP_CHECK32(OP_EORA32); tmpv = REG_READ(op & 0x0f); OP_EORA(tmpv); break; - - /* OP a, (ri) */ - case 0x11: tmpv = ptr1_read(op); OP_SUBA(tmpv); break; - case 0x31: tmpv = ptr1_read(op); OP_CMPA(tmpv); break; - case 0x41: tmpv = ptr1_read(op); OP_ADDA(tmpv); break; - case 0x51: tmpv = ptr1_read(op); OP_ANDA(tmpv); break; - case 0x61: tmpv = ptr1_read(op); OP_ORA (tmpv); break; - case 0x71: tmpv = ptr1_read(op); OP_EORA(tmpv); break; - - /* OP a, adr */ - case 0x03: tmpv = ssp->mem.RAM[op & 0x1ff]; OP_LDA (tmpv); break; - case 0x13: tmpv = ssp->mem.RAM[op & 0x1ff]; OP_SUBA(tmpv); break; - case 0x33: tmpv = ssp->mem.RAM[op & 0x1ff]; OP_CMPA(tmpv); break; - case 0x43: tmpv = ssp->mem.RAM[op & 0x1ff]; OP_ADDA(tmpv); break; - case 0x53: tmpv = ssp->mem.RAM[op & 0x1ff]; OP_ANDA(tmpv); break; - case 0x63: tmpv = ssp->mem.RAM[op & 0x1ff]; OP_ORA (tmpv); break; - case 0x73: tmpv = ssp->mem.RAM[op & 0x1ff]; OP_EORA(tmpv); break; - - /* OP a, imm */ - case 0x14: tmpv = *PC++; OP_SUBA(tmpv); break; - case 0x34: tmpv = *PC++; OP_CMPA(tmpv); break; - case 0x44: tmpv = *PC++; OP_ADDA(tmpv); break; - case 0x54: tmpv = *PC++; OP_ANDA(tmpv); break; - case 0x64: tmpv = *PC++; OP_ORA (tmpv); break; - case 0x74: tmpv = *PC++; OP_EORA(tmpv); break; - - /* OP a, ((ri)) */ - case 0x15: tmpv = ptr2_read(op); OP_SUBA(tmpv); break; - case 0x35: tmpv = ptr2_read(op); OP_CMPA(tmpv); break; - case 0x45: tmpv = ptr2_read(op); OP_ADDA(tmpv); break; - case 0x55: tmpv = ptr2_read(op); OP_ANDA(tmpv); break; - case 0x65: tmpv = ptr2_read(op); OP_ORA (tmpv); break; - case 0x75: tmpv = ptr2_read(op); OP_EORA(tmpv); break; - - /* OP a, ri */ - case 0x19: tmpv = rIJ[IJind]; OP_SUBA(tmpv); break; - case 0x39: tmpv = rIJ[IJind]; OP_CMPA(tmpv); break; - case 0x49: tmpv = rIJ[IJind]; OP_ADDA(tmpv); break; - case 0x59: tmpv = rIJ[IJind]; OP_ANDA(tmpv); break; - case 0x69: tmpv = rIJ[IJind]; OP_ORA (tmpv); break; - case 0x79: tmpv = rIJ[IJind]; OP_EORA(tmpv); break; - - /* OP simm */ - case 0x1c: - OP_SUBA(op & 0xff); -#ifdef LOG_SVP - if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); -#endif - break; - case 0x3c: - OP_CMPA(op & 0xff); -#ifdef LOG_SVP - if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); -#endif - break; - case 0x4c: - OP_ADDA(op & 0xff); -#ifdef LOG_SVP - if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); -#endif - break; - /* MAME code only does LSB of top word, but this looks wrong to me. */ - case 0x5c: - OP_ANDA(op & 0xff); -#ifdef LOG_SVP - if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); -#endif - break; - case 0x6c: - OP_ORA (op & 0xff); -#ifdef LOG_SVP - if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); -#endif - break; - case 0x7c: - OP_EORA(op & 0xff); -#ifdef LOG_SVP - if (op&0x100) elprintf(EL_SVP|EL_ANOMALY, "FIXME: simm with upper bit set"); -#endif - break; - - default: -#ifdef LOG_SVP - elprintf(EL_ANOMALY|EL_SVP, "ssp FIXME unhandled op %04x @ %04x", op, GET_PPC_OFFS()); -#endif - break; - } - } - while (--g_cycles > 0 && !(ssp->emu_status & SSP_WAIT_MASK)); - - read_P(); /* update P */ - rPC = GET_PC(); - -#ifdef LOG_SVP - if (ssp->gr[SSP_GR0].v != 0xffff0000) - elprintf(EL_ANOMALY|EL_SVP, "ssp FIXME: REG 0 corruption! %08x", ssp->gr[SSP_GR0].v); -#endif -} - diff --git a/waterbox/gpgx/core/cart_hw/svp/ssp16.h b/waterbox/gpgx/core/cart_hw/svp/ssp16.h deleted file mode 100644 index f0dec5b2fc..0000000000 --- a/waterbox/gpgx/core/cart_hw/svp/ssp16.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - basic, incomplete SSP160x (SSP1601?) interpreter - with SVP memory controller emu - - (c) Copyright 2008, Grazvydas "notaz" Ignotas - Free for non-commercial use. - - For commercial use, separate licencing terms must be obtained. - - Modified for Genesis Plus GX (Eke-Eke): added BIG ENDIAN support, fixed addr/code inversion -*/ - -#ifndef _SSP16_H_ -#define _SSP16_H_ - -/* emulation event logging (from Picodrive) */ -#ifdef LOG_SVP -#define EL_SVP 0x00004000 /* SVP stuff */ -#define EL_ANOMALY 0x80000000 /* some unexpected conditions (during emulation) */ -#define elprintf(w,f,...) error("%d(%d): " f "\n",frame_count,v_counter,##__VA_ARGS__); -#endif - -/* register names */ -enum { - SSP_GR0, SSP_X, SSP_Y, SSP_A, - SSP_ST, SSP_STACK, SSP_PC, SSP_P, - SSP_PM0, SSP_PM1, SSP_PM2, SSP_XST, - SSP_PM4, SSP_gr13, SSP_PMC, SSP_AL -}; - -typedef union -{ - unsigned int v; - struct { -#ifdef LSB_FIRST - unsigned short l; - unsigned short h; -#else - unsigned short h; - unsigned short l; -#endif - } byte; -} ssp_reg_t; - -typedef struct -{ - union { - unsigned short RAM[256*2]; /* 2 internal RAM banks */ - struct { - unsigned short RAM0[256]; - unsigned short RAM1[256]; - } bank; - } mem; - ssp_reg_t gr[16]; /* general registers */ - union { - unsigned char r[8]; /* BANK pointers */ - struct { - unsigned char r0[4]; - unsigned char r1[4]; - } bank; - } ptr; - unsigned short stack[6]; - unsigned int pmac[2][6]; /* read/write modes/addrs for PM0-PM5 */ - #define SSP_PMC_HAVE_ADDR 0x0001 /* address written to PMAC, waiting for mode */ - #define SSP_PMC_SET 0x0002 /* PMAC is set */ - #define SSP_HANG 0x1000 /* 68000 hangs SVP */ - #define SSP_WAIT_PM0 0x2000 /* bit1 in PM0 */ - #define SSP_WAIT_30FE06 0x4000 /* ssp tight loops on 30FE08 to become non-zero */ - #define SSP_WAIT_30FE08 0x8000 /* same for 30FE06 */ - #define SSP_WAIT_MASK 0xf000 - unsigned int emu_status; - unsigned int pad[30]; -} ssp1601_t; - - -void ssp1601_reset(ssp1601_t *ssp); -void ssp1601_run(int cycles); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/svp/svp.c b/waterbox/gpgx/core/cart_hw/svp/svp.c deleted file mode 100644 index b225c04650..0000000000 --- a/waterbox/gpgx/core/cart_hw/svp/svp.c +++ /dev/null @@ -1,83 +0,0 @@ -/* -basic, incomplete SSP160x (SSP1601?) interpreter -with SVP memory controller emu -(c) Copyright 2008, Grazvydas "notaz" Ignotas -Free for non-commercial use. -For commercial use, separate licencing terms must be obtained. -Modified for Genesis Plus GX (Eke-Eke): added BIG ENDIAN support, fixed addr/code inversion -*/ - -#include "shared.h" - -svp_t *svp; - -static void svp_write_dram(uint32 address, uint32 data) -{ - *(uint16 *)(svp->dram + (address & 0x1fffe)) = data; - if (data) - { - if (address == 0x30fe06) - svp->ssp1601.emu_status &= ~SSP_WAIT_30FE06; - else if (address == 0x30fe08) - svp->ssp1601.emu_status &= ~SSP_WAIT_30FE08; - } -} - -static uint32 svp_read_cell_1(uint32 address) -{ - address = (address & 0xe002) | ((address & 0x7c) << 6) | ((address & 0x1f80) >> 5); - return *(uint16 *)(svp->dram + address); -} - -static uint32 svp_read_cell_2(uint32 address) -{ - address = (address & 0xf002) | ((address & 0x3c) << 6) | ((address & 0xfc0) >> 4); - return *(uint16 *)(svp->dram + address); -} - -static uint32 svp_read_cell_byte(uint32 address) -{ - uint16 data = m68k.memory_map[address >> 16].read16(address); - - if (address & 0x01) - { - return (data & 0xff); - } - - return (data >> 8); -} - -void svp_init(void) -{ - svp = malloc(sizeof(*svp)); - memset(svp, 0, sizeof(*svp)); - - m68k.memory_map[0x30].base = svp->dram; - m68k.memory_map[0x30].read8 = NULL; - m68k.memory_map[0x30].read16 = NULL; - m68k.memory_map[0x30].write8 = NULL; - m68k.memory_map[0x30].write16 = svp_write_dram; - zbank_memory_map[0x30].read = NULL; - zbank_memory_map[0x30].write = NULL; - - m68k.memory_map[0x31].base = svp->dram + 0x10000; - m68k.memory_map[0x31].read8 = NULL; - m68k.memory_map[0x31].read16 = NULL; - m68k.memory_map[0x31].write8 = NULL; - m68k.memory_map[0x31].write16 = NULL; - zbank_memory_map[0x31].read = NULL; - zbank_memory_map[0x31].write = NULL; - - m68k.memory_map[0x39].read8 = svp_read_cell_byte; - m68k.memory_map[0x39].read16 = svp_read_cell_1; - zbank_memory_map[0x39].read = svp_read_cell_byte; - m68k.memory_map[0x3a].read8 = svp_read_cell_byte; - m68k.memory_map[0x3a].read16 = svp_read_cell_2; - zbank_memory_map[0x3a].read = svp_read_cell_byte; -} - -void svp_reset(void) -{ - memcpy(svp->iram_rom + 0x800, cart.rom + 0x800, 0x20000 - 0x800); - ssp1601_reset(&svp->ssp1601); -} diff --git a/waterbox/gpgx/core/cart_hw/svp/svp.h b/waterbox/gpgx/core/cart_hw/svp/svp.h deleted file mode 100644 index a20d299a83..0000000000 --- a/waterbox/gpgx/core/cart_hw/svp/svp.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - basic, incomplete SSP160x (SSP1601?) interpreter - with SVP memory controller emu - - (c) Copyright 2008, Grazvydas "notaz" Ignotas - Free for non-commercial use. - - For commercial use, separate licencing terms must be obtained. - - Modified for Genesis Plus GX (Eke-Eke): added BIG ENDIAN support, fixed addr/code inversion -*/ - -#ifndef _SVP_H_ -#define _SVP_H_ - -#include "shared.h" -#include "ssp16.h" - -typedef struct { - unsigned char iram_rom[0x20000]; /* IRAM (0-0x7ff) and program ROM (0x800-0x1ffff) */ - unsigned char dram[0x20000]; - ssp1601_t ssp1601; -} svp_t; - -extern svp_t *svp; - -extern void svp_init(void); -extern void svp_reset(void); - -#endif diff --git a/waterbox/gpgx/core/cart_hw/svp/svpdoc.txt b/waterbox/gpgx/core/cart_hw/svp/svpdoc.txt deleted file mode 100644 index 813657ad1b..0000000000 --- a/waterbox/gpgx/core/cart_hw/svp/svpdoc.txt +++ /dev/null @@ -1,524 +0,0 @@ -------------------------------------------------------------------------------- - notaz's SVP doc - $Id: svpdoc.txt 349 2008-02-04 23:13:59Z notaz $ - Copyright 2008, Grazvydas Ignotas (notaz) -------------------------------------------------------------------------------- - -If you use this, please credit me in your work or it's documentation. -Tasco Deluxe should also be credited for his pioneering work on the subject. -Thanks. - -Use monospace font and disable word wrap when reading this document. - -------------------------------------------------------------------------------- - Table of Contents -------------------------------------------------------------------------------- - - 0. Introduction - 1. Overview - 2. The SSP160x DSP - 2.1. General registers - 2.2. External registers - 2.3. Pointer registers - 2.4. The instruction set - 3. Memory map - 4. Other notes - - -------------------------------------------------------------------------------- - 0. Introduction -------------------------------------------------------------------------------- - -This document is an attempt to provide technical information needed to -emulate Sega's SVP chip. It is based on reverse engineering Virtua Racing -game and on various internet sources. None of information provided here -was verified on the real hardware, so some things are likely to be -inaccurate. - -The following information sources were used while writing this document -and emulator implementation: - - [1] SVP Reference Guide (annotated) and SVP Register Guide (annotated) - by Tasco Deluxe < tasco.deluxe @ gmail.com > - http://www.sharemation.com/TascoDLX/SVP%20Reference%20Guide%202007.02.11.txt - http://www.sharemation.com/TascoDLX/SVP%20Register%20Guide%202007.02.11.txt - [2] SSP1610 disassembler - written by Pierpaolo Prazzoli, MAME source code. - http://mamedev.org/ - [3] SSP1601 DSP datasheet - http://notaz.gp2x.de/docs/SSP1601.pdf - [4] DSP page (with code samples) in Samsung Semiconductor website from 1997 - retrieved from Internet Archive: The Wayback Machine - http://web.archive.org/web/19970607052826/www.sec.samsung.com/Products/dsp/dspcore.htm - [5] Sega's SVP Chip: The Road not Taken? - Ken Horowitz, Sega-16 - http://sega-16.com/feature_page.php?id=37&title=Sega's%20SVP%20Chip:%20The%20Road%20not%20Taken? - - -------------------------------------------------------------------------------- - 1. Overview -------------------------------------------------------------------------------- - -The only game released with SVP chip was Virtua Racing. There are at least 4 -versions of the game: USA, Jap and 2 different Eur revisions. Three of them -share identical SSP160x code, one of the Eur revisions has some differences. - -From the software developer's point of view, the game cartridge contains -at least: - - * Samsung SSP160x 16-bit DSP core, which includes [3]: - * Two independent high-speed RAM banks, accessed in single clock cycle, - 256 words each. - * 16 x 16 bit multiply unit. - * 32-bit ALU, status register. - * Hardware stack of 6 levels. - * 128KB of DRAM. - * 2KB of IRAM (instruction RAM). - * Memory controller with address mapping capability. - * 2MB of game ROM. - -[5] claims there is also "2 Channels PWM" in the cartridge, but it's either -not used or not there at all. -Various sources claim that SSP160x is SSP1601 which is likely to be true, -because the code doesn't seem to use any SSP1605+ features. - - -------------------------------------------------------------------------------- - 2. The SSP160x DSP -------------------------------------------------------------------------------- - -SSP160x is 16-bit DSP, capable of performing multiplication + addition in -single clock cycle [3]. It has 8 general, 8 external and 8 pointer registers. -There is a status register which has operation control bits and condition -flags. Condition flags are set/cleared during ALU (arithmetic, logic) -operations. It also has 6-level hardware stack and 2 internal RAM banks -RAM0 and RAM1, 256 words each. - -The device is only capable of addressing 16-bit words, so all addresses refer -to words (16bit value in ROM, accessed by 68k through address 0x84 would be -accessed by SSP160x using address 0x42). - -[3] mentions interrupt pins, but interrupts don't seem to be used by SVP code -(actually there are functions which look like interrupt handler routines, but -they don't seem to do anything important). - -2.1. General registers ----------------------- - -There are 8 general registers: -, X, Y, A, ST, STACK, PC and P ([2] [4]). -Size is given in bits. - -2.1.1. "-" - Constant register with all bits set (0xffff). Also used for programming - external registers (blind reads/writes, see 2.2). - size: 16 - -2.1.2. "X" - Generic register. Also acts as a multiplier 1 for P register. - size: 16 - -2.1.3. "Y" - Generic register. Also acts as a multiplier 2 for P register. - size: 16 - -2.1.4. "A" - Accumulator. Stores the result of all ALU (but not multiply) operations, - status register is updated according to this. When directly accessed, - only upper word is read/written. Low word can be accessed by using AL - (see 2.2.8). - size: 32 - -2.1.5. "ST" - STatus register. Bits 0-9 are CONTROL, other are FLAG [2]. Only some of - them are actually used by SVP. - Bits: fedc ba98 7654 3210 - 210 - RPL "Loop size". If non-zero, makes (rX+) and (rX-) respectively - modulo-increment and modulo-decrement (see 2.3). The value - shows which power of 2 to use, i.e. 4 means modulo by 16. - 43 - RB Unknown. Not used by SVP code. - 5 - ST5 Affects behavior of external registers. See 2.2. - 6 - ST6 Affects behavior of external registers. See 2.2. - According to [3] (5,6) bits correspond to hardware pins. - 7 - IE Interrupt enable? Not used by SVP code. - 8 - OP Saturated value? Not used by SVP code. - 9 - MACS MAC shift? Not used by SVP code. - a - GPI_0 Interrupt 0 enable/status? Not used by SVP code. - b - GPI_1 Interrupt 1 enable/status? Not used by SVP code. - c - L L flag. Similar to carry? Not used by SVP code. - d - Z Zero flag. Set after ALU operations, when all 32 accumulator - bits become zero. - e - OV Overflow flag. Not used by SVP code. - f - N Negative flag. Set after ALU operations, when bit31 in - accumulator is 1. - size: 16 - -2.1.6. "STACK" - Hardware stack of 6 levels [3]. Values are "pushed" by directly writing to - it, or by "call" instruction. "Pop" is performed by directly reading the - register or by "ret" instruction. - size: 16 - -2.1.7. "PC" - Program Counter. Can be written directly to perform a jump. It is not clear - if it is possible to read it (SVP code never does). - size: 16 - -2.1.8. "P" - multiply Product - multiplication result register. - Always contains 32-bit multiplication result of X, Y and 2 (P = X * Y * 2). - X and Y are sign-extended before performing the multiplication. - size: 32 - -2.2. External registers ------------------------ - -The external registers, as the name says, are external to SSP160x, they are -hooked to memory controller in SVP, so by accessing them we actually program -the memory controller. They act as programmable memory access registers or -external status registers [1]. Some of them can act as both, depending on how -ST5 ans ST6 bits are set in status register. After a register is programmed, -accessing it causes reads/writes from/to external memory (see section 3 for -the memory map). The access may also cause some additional effects, like -incremental of address, associated with accessed register. -In this document and my emu, instead of using names EXT0-EXT7 -from [4] I used different names for these registers. Those names are from -Tasco Deluxe's [1] doc. - -All these registers can be blind-accessed (as said in [1]) by performing -(ld -, PMx) or (ld PMx, -). This programs them to access memory (except PMC, -where the effect is different). -All registers are 16-bit. - -2.2.1. "PM0" - If ST5 or ST6 is set, acts as Programmable Memory access register - (see 2.2.7). Else it acts as status of XST (2.2.4). It is also mapped - to a15004 on 68k side: - ???????? ??????10 - 0: set, when SSP160x has written something to XST - (cleared when 015004 is read by 68k) - 1: set, when 68k has written something to a15000 or a15002 - (cleared on PM0 read by SSP160x) - Note that this is likely to be incorrect, but such behavior is OK for - emulation to work. - -2.2.2. "PM1" - Programmable Memory access register. Only accessed with ST bits set by - SVP code. - -2.2.3. "PM2" - Same as PM1. - -2.2.4. "XST" - If ST5 or ST6 is set, acts as Programmable Memory access register - (only used by memory test code). Else it acts as eXternal STatus - register, which is also mapped to a15000 and a15002 on 68k side. - Affects PM0 when written to. - -2.2.5. "PM4" - Programmable Memory access register. Not affected by ST5 and ST6 bits, - always stays in PMAR mode. - -2.2.6. "EXT5" - Not used by SVP, so not covered by this document. - -2.2.7. "PMC" - Programmable Memory access Control. It is set using 2 16bit writes, first - address, then mode word. After setting PMAC, PMx should be blind accessed - using (ld -, PMx) or (ld PMx, -) to program it for reading or writing - external memory respectively. Every PMx register can be programmed to - access it's own memory location with it's own mode. Registers are programmed - separately for reading and writing. - - Reading PMC register also shifts it's state (from "waiting for address" to - "waiting for mode" and back). Reads always return address word related to - last PMx register accessed, or last address word written to PMC (whichever - event happened last before PMC read). - - The address word contains bits 0-15 of the memory word-address. - The mode word format is as follows: - dsnnnv?? ???aaaaa - a: bits 16-20 of memory word-address. - n: auto-increment value. If set, after every access of PMx, word-address - value related to it will be incremented by (words): - 1 - 1 5 - 16 - 2 - 2 6 - 32 - 3 - 4 7 - 128 - 4 - 8 - d: make auto-increment negative - decrement by count listed above. - s: special-increment mode. If current address is even (when accessing - programmed PMx), increment it by 1. Else, increment by 32. It is not - clear what happens if d and n bits are also set (never done by SVP). - v: over-write mode when writing, unknown when reading (not used). - Over-write mode splits the word being written into 4 half-bytes and - only writes those half-bytes, which are not zero. - When auto-increment is performed, it affects all 21 address bits. - -2.2.8. "AL" - This register acts more like a general register. - If this register is blind-accessed, it is "dummy programmed", i.e. nothing - happens and PMC is reset to "waiting for address" state. - In all other cases, it is Accumulator Low, 16 least significant bits of - accumulator. Normally reading acc (ld X, A) you get 16 most significant - bits, so this allows you access the low word of 32bit accumulator. - -2.3. Pointer registers ----------------------- - -There are 8 8-bit pointer registers rX, which are internal to SSP160x and are -used to access internal RAM banks RAM0 and RAM1, or program memory indirectly. -r0-r3 (ri) point to RAM0, r4-r7 (rj) point to RAM1. Each bank has 256 words of -RAM, so 8bit registers can fully address them. The registers can be accessed -directly, or 2 indirection levels can be used [ (rX), ((rX)) ]. They work -similar to * and ** operators in C, only they use different types of memory -and ((rX)) also performs post-increment. First indirection level (rX) accesses -a word in RAMx, second accesses program memory at address read from (rX), and -increments value in (rX). - -Only r0,r1,r2,r4,r5,r6 can be directly modified (ldi r0, 5), or by using -modifiers. 3 modifiers can be applied when using first indirection level -(optional): - + : post-increment (ld a, (r0+) ). Increment register value after operation. - Can be made modulo-increment by setting RPL bits in status register - (see 2.1.5). - - : post-decrement. Also can be made modulo-decrement by using RPL bits in ST. - +!: post-increment, unaffected by RPL (probably). -These are only used on 1st indirection level, so things like ( ld a, ((r0+)) ) -and (ld X, r6-) are probably invalid. - -r3 and r7 are special and can not be changed (at least Samsung samples [4] and -SVP code never do). They are fixed to the start of their RAM banks. (They are -probably changeable for ssp1605+, Samsung's old DSP page claims that). -1 of these 4 modifiers must be used on these registers (short form direct -addressing? [2]): - |00: RAMx[0] The very first word in the RAM bank. - |01: RAMx[1] Second word - |10: RAMx[2] ... - |11: RAMx[3] - -2.4. The instruction set ------------------------- - -The Samsung SSP16 series assembler uses right-to-left notation ([2] [4]): -ld X, Y -means value from Y should be copied to X. - -Size of every instruction is word, some have extension words for immediate -values. When writing an interpreter, 7 most significant bits are usually -enough to determine which opcode it is. - -encoding bits are marked as: -rrrr - general or external register, in order specified in 2.1 and 2.2 - (0 is '-', 1 'X', ..., 8 is 'PM0', ..., 0xf is 'AL') -dddd - same as above, as destination operand -ssss - same as above, as source operand -jpp - pointer register index, 0-7 -j - specifies RAM bank, i.e. RAM0 or RAM1 -i* - immediate value bits -a* - offset in internal RAM bank -mm - modifier for pointer register, depending on register: - r0-r2,r4-r6 r3,r7 examples - 0: (none) |00 ld a, (r0) cmp a, (r7|00) - 1: +! |01 ld (r0+!), a ld (r7|01), a - 2: - |10 add a, (r0-) - 3: + |11 -cccc - encodes condition, only 3 used by SVP, see check_cond() below -ooo - operation to perform - -Operation is written in C-style pseudo-code, where: -program_memory[X] - access program memory at address X -RAMj[X] - access internal RAM bank j=0,1 (RAM0 or RAM1), word - offset X -RIJ[X] - pointer register rX, X=0-7 -pr_modif_read(m,X) - read pointer register rX, applying modifier m: - if register is r3 or r7, return value m - else switch on value m: - 0: return rX; - 1: tmp = rX; rX++; return tmp; // rX+! - 2: tmp = rX; modulo_decrement(rX); return tmp; // rX- - 3: tmp = rX; modulo_increment(rX); return tmp; // rX+ - the modulo value used (if used at all) depends on ST - RPL bits (see 2.1.5) -check_cond(c,f) - checks if a flag matches f bit: - switch (c) { - case 0: return true; - case 5: return (Z == f) ? true : false; // check Z flag - case 7: return (N == f) ? true : false; // check N flag - } // other conditions are possible, but they are not used -update_flags() - update ST flags according to last ALU operation. -sign_extend(X) - sign extend 16bit value X to 32bits. -next_op_address() - address of instruction after current instruction. - -2.4.1. ALU instructions - -All of these instructions update flags, which are set according to full 32bit -accumulator. The SVP code only checks N and Z flags, so it is not known when -exactly OV and L flags are set. Operations are performed on full A, so -(andi A, 0) would clear all 32 bits of A. - -They share the same addressing modes. The exact arithmetic operation is -determined by 3 most significant (ooo) bits: - 001 - sub - subtract (OP -=) - 011 - cmp - compare (OP -, flags are updated according to result) - 100 - add - add (OP +=) - 101 - and - binary AND (OP &=) - 110 - or - binary OR (OP |=) - 111 - eor - exclusive OR (OP ^=) - - syntax encoding operation - OP A, s ooo0 0000 0000 rrrr A OP r << 16; - OP A, (ri) ooo0 001j 0000 mmpp A OP RAMj[pr_modif_read(m,jpp)] << 16; - OP A, adr ooo0 011j aaaa aaaa A OP RAMj[a] << 16; - OPi A, imm ooo0 1000 0000 0000 A OP i << 16; - iiii iiii iiii iiii - op A, ((ri)) ooo0 101j 0000 mmpp tmp = pr_modif_read(m,jpp); - A OP program_memory[RAMj[tmp]] << 16; - RAMj[tmp]++; - op A, ri ooo1 001j 0000 00pp A OP RIJ[jpp] << 16; - OPi simm ooo1 1000 iiii iiii A OP i << 16; - -There is also "perform operation on accumulator" instruction: - - syntax encoding operation - mod cond, op 1001 000f cccc 0ooo if (check_cond(c,f)) switch(o) { - case 2: A >>= 1; break; // arithmetic shift - case 3: A <<= 1; break; - case 6: A = -A; break; // negate A - case 7: A = abs(A); break; // absolute val. - } // other operations are possible, but - // they are not used by SVP. - -2.4.2. Load (move) instructions - -These instructions never affect flags (even ld A). -If destination is A, and source is 16bit, only upper word is transfered (same -thing happens on opposite). If dest. is A, and source is P, whole 32bit value -is transfered. It is not clear if P can be destination operand (probably not, -no code ever does this). -Writing to STACK pushes a value there, reading pops. It is not known what -happens on overflow/underflow (never happens in SVP code). -ld -, - is used as a nop. - - syntax encoding operation - ld d, s 0000 0000 dddd ssss d = s; - ld d, (ri) 0000 001j dddd mmpp d = RAMj[pr_modif_read(m,jpp)]; - ld (ri), s 0000 010j ssss mmpp RAMj[pr_modif_read(m,jpp)] = s; - ldi d, imm 0000 1000 dddd 0000 d = i; - iiii iiii iiii iiii - ld d, ((ri)) 0000 101j dddd mmpp tmp = pr_modif_read(m,jpp); - d = program_memory[RAMj[tmp]]; - RAMj[tmp]++; - ldi (ri), imm 0000 110l 0000 mmpp RAMj[pr_modif_read(m,jpp)] = i; - iiii iiii iiii iiii - ld adr, a 0000 111j aaaa aaaa RAMj[a] = A; - ld d, ri 0001 001j dddd 00pp d = RIJ[jpp]; - ld ri, s 0001 010j ssss 00pp RIJ[jpp] = s; - ldi ri, simm 0001 1jpp iiii iiii RIJ[jpp] = i; - ld d, (a) 0100 1010 dddd 0000 d = program_memory[A[31:16]]; - // read a word from program memory. Offset - // is the upper word in A. - -2.4.3. Program control instructions - -Only 3 instructions: call, ret (alias of ld PC, STACK) and branch. Indirect -jumps can be performed by simply writing to PC. - - syntax encoding operation - call cond, addr 0100 100f cccc 0000 if (check_cond(c,f)) { - aaaa aaaa aaaa aaaa STACK = next_op_address(); PC = a; - } - bra cond, addr 0100 110f cccc 0000 if (check_cond(c,f)) PC = a; - aaaa aaaa aaaa aaaa - ret 0000 0000 0110 0101 PC = STACK; // same as ld PC, STACK - -2.4.4. Multiply-accumulate instructions - -Not sure if (ri) and (rj) really get loaded into X and Y, but multiplication -result surely is loaded into P. There is probably optional 3rd operand (1, 0; -encoded by bit16, default 1), but it's not used by SVP code. - - syntax encoding operation - mld (rj), (ri) 1011 0111 nnjj mmii A = 0; update_flags(); - X = RAM0[pr_modif_read(m,0ii)]; - Y = RAM1[pr_modif_read(m,1jj)]; - P = sign_extend(X) * sign_extend(Y) * 2 - mpya (rj), (ri) 1001 0111 nnjj mmii A += P; update_flags(); - X = RAM0[pr_modif_read(m,0ii)]; - Y = RAM1[pr_modif_read(m,1jj)]; - P = sign_extend(X) * sign_extend(Y) * 2 - mpys (rj), (ri) 0011 0111 nnjj mmii A -= P; update_flags(); - X = RAM0[pr_modif_read(m,0ii)]; - Y = RAM1[pr_modif_read(m,1jj)]; - P = sign_extend(X) * sign_extend(Y) * 2 - -------------------------------------------------------------------------------- - 3. Memory map -------------------------------------------------------------------------------- - -The SSp160x can access it's own program memory, and external memory through EXT -registers (see 2.2). Program memory is read-execute-only, the size of this -space is 64K words (this is how much 16bit PC can address): - - byte address word address name - 0- 7ff 0- 3ff IRAM - 800-1ffff 400-ffff ROM - -There were reports that SVP has internal ROM, but fortunately they were wrong. -The location 800-1ffff is mapped from the same location in the 2MB game ROM. -The IRAM is read-only (as SSP160x doesn't have any means of writing to it's -program memory), but it can be changed through external memory space, as it's -also mapped there. - -The external memory space seems to match the one visible by 68k, with some -differences: - - 68k space SVP space word address name - 0-1fffff 0-1fffff 0- fffff game ROM - 300000-31ffff 300000-31ffff 180000-18ffff DRAM - ? 390000-3907ff 1c8000-1c83ff IRAM - 390000-39ffff ? ? "cell arrange" 1 - 3a0000-3affff ? ? "cell arrange" 2 - a15000-a15009 n/a n/a Status/control registers - -The external memory can be read/written by SSP160x (except game ROM, which can -only be read). - -"cell arrange" 1 and 2 are similar to the one used in SegaCD, they map -300000-30ffff location to 390000-39ffff and 3a0000-3affff, where linear image -written to 300000 can be read as VDP patterns at 390000. Virtua Racing doesn't -seem to use this feature, it is only used by memory test code. - -Here is the list of status/control registers (16bit size): - a15000 - w/r command/result register. Visible as XST for SSP160x (2.2.4). - a15002 - mirror of the above. - a15004 - status of command/result register (see 2.2.1). - a15006 - possibly halts the SVP. Before doing DMA from DRAM, 68k code writes - 0xa, and after it's finished, writes 0. This is probably done to - prevent SVP accessing DRAM and avoid bus clashes. - a15008 - possibly causes an interrupt. There is (unused?) code which writes - 0, 1, and again 0 in sequence. - - -------------------------------------------------------------------------------- - 4. Other notes -------------------------------------------------------------------------------- - -The game has arcade-style memory self-check mode, which can be accessed by -pressing _all_ buttons (including directions) on 3-button controller. There was -probably some loopback plug for this. - -SVP seems to have DMA latency issue similar to one in Sega CD, as the code -always sets DMA source address value larger by 2, then intended for copy. -This is even true for DMAs from ROM, as it's probably hooked through SVP's -memory controller. - -The entry point for the code seems to be at address 0x800 (word 0x400) in ROM, -but it is not clear where the address is fetched from when the system powers -up. The memory test code also sets up "ld PC, .." opcodes at 0x7f4, 0x7f8 and -0x7fc, which jump to some routines, possibly interrupt handlers. This means -that mentioned addresses might be built-in interrupt vectors. - -The SVP code doesn't seem to be timing sensitive, so it can be emulated without -knowing timing of the instructions or even how fast the chip is clocked. -Overclocking doesn't have any effect, underclocking causes slowdowns. Running -10-12M instructions/sec (or possibly less) is sufficient. - diff --git a/waterbox/gpgx/core/cd_hw/cd_cart.c b/waterbox/gpgx/core/cd_hw/cd_cart.c deleted file mode 100644 index 485efcc0a4..0000000000 --- a/waterbox/gpgx/core/cd_hw/cd_cart.c +++ /dev/null @@ -1,271 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD compatible ROM/RAM cartridge support - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - - -/*--------------------------------------------------------------------------*/ -/* backup RAM cartridge (max. 512KB) */ -/*--------------------------------------------------------------------------*/ -static unsigned int cart_ram_read_byte(unsigned int address) -{ - /* LSB only */ - if (address & 1) - { - return scd.cartridge.area[(address >> 1) & scd.cartridge.mask]; - } - - return 0xff; -} - -static unsigned int cart_ram_read_word(unsigned int address) -{ - return (scd.cartridge.area[(address >> 1) & scd.cartridge.mask] | 0xff00); -} - -static void cart_ram_write_byte(unsigned int address, unsigned int data) -{ - /* LSB only */ - if (address & 1) - { - scd.cartridge.area[(address >> 1) & scd.cartridge.mask] = data; - } -} - -static void cart_ram_write_word(unsigned int address, unsigned int data) -{ - scd.cartridge.area[(address >> 1) & scd.cartridge.mask] = data & 0xff; -} - - -/*--------------------------------------------------------------------------*/ -/* backup RAM cartridge ID */ -/*--------------------------------------------------------------------------*/ - -static unsigned int cart_id_read_byte(unsigned int address) -{ - /* LSB only */ - if (address & 1) - { - return scd.cartridge.id; - } - - return 0xff; -} - -static unsigned int cart_id_read_word(unsigned int address) -{ - return (scd.cartridge.id | 0xff00); -} - - -/*--------------------------------------------------------------------------*/ -/* backup RAM cartridge write protection */ -/*--------------------------------------------------------------------------*/ - -static unsigned int cart_prot_read_byte(unsigned int address) -{ - /* LSB only */ - if (address & 1) - { - return scd.cartridge.prot; - } - - return 0xff; -} - -static unsigned int cart_prot_read_word(unsigned int address) -{ - return (scd.cartridge.prot | 0xff00); -} - -static void cart_prot_write_byte(unsigned int address, unsigned int data) -{ - /* LSB only */ - if (address & 1) - { - int i; - - if (data & 1) - { - /* cartridge is write enabled */ - for (i=0x60; i<0x70; i++) - { - m68k.memory_map[i].write8 = cart_ram_write_byte; - m68k.memory_map[i].write16 = cart_ram_write_word; - zbank_memory_map[i].write = cart_ram_write_byte; - } - } - else - { - /* cartridge is write protected */ - for (i=0x60; i<0x70; i++) - { - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].write = zbank_unused_w; - } - } - - scd.cartridge.prot = data; - } -} - -static void cart_prot_write_word(unsigned int address, unsigned int data) -{ - int i; - - if (data & 1) - { - /* cartridge is write enabled */ - for (i=0x60; i<0x70; i++) - { - m68k.memory_map[i].write8 = cart_ram_write_byte; - m68k.memory_map[i].write16 = cart_ram_write_word; - zbank_memory_map[i].write = cart_ram_write_byte; - } - } - else - { - /* cartridge is write protected */ - for (i=0x60; i<0x70; i++) - { - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].write = zbank_unused_w; - } - } - - scd.cartridge.prot = data & 0xff; -} - -/*--------------------------------------------------------------------------*/ -/* ROM/RAM cartridge initialization */ -/*--------------------------------------------------------------------------*/ -void cd_cart_init(void) -{ - int i; - - /* System boot mode */ - if (scd.cartridge.boot) - { - /* disable backup RAM cartridge when booting from cartridge (Mode 1) */ - scd.cartridge.id = 0; - } - else - { - /* enable 512K backup RAM cartridge when booting from CD (Mode 2) */ - //scd.cartridge.id = 6; - //scd.cartridge.id = 4; // use 128K instead, which is the size of a real ebram cart - // bizhawk doesn't need the extra space because it gives each game its own anyway - scd.cartridge.id = 1; // 16K to be size-frugal - } - - /* RAM cartridge enabled ? */ - if (scd.cartridge.id) - { - /* disable cartridge backup memory */ - memset(&sram, 0, sizeof (T_SRAM)); - - scd.cartridge.area = malloc(0x4000); - /* clear backup RAM */ - memset(scd.cartridge.area, 0x00, 0x4000); - - /* backup RAM size mask */ - scd.cartridge.mask = (1 << (scd.cartridge.id + 13)) - 1; - - /* enable RAM cartridge write access */ - scd.cartridge.prot = 1; - - /* RAM cartridge ID register (read-only) */ - for (i=0x40; i<0x60; i++) - { - m68k.memory_map[i].base = NULL; - m68k.memory_map[i].read8 = cart_id_read_byte; - m68k.memory_map[i].read16 = cart_id_read_word; - m68k.memory_map[i].write8 = m68k_unused_8_w; - m68k.memory_map[i].write16 = m68k_unused_16_w; - zbank_memory_map[i].read = cart_id_read_byte; - zbank_memory_map[i].write = zbank_unused_w; - } - - /* RAM cartridge memory */ - for (i=0x60; i<0x70; i++) - { - m68k.memory_map[i].base = NULL; - m68k.memory_map[i].read8 = cart_ram_read_byte; - m68k.memory_map[i].read16 = cart_ram_read_word; - m68k.memory_map[i].write8 = cart_ram_write_byte; - m68k.memory_map[i].write16 = cart_ram_write_word; - zbank_memory_map[i].read = cart_ram_read_byte; - zbank_memory_map[i].write = cart_ram_write_byte; - } - - /* RAM cartridge write protection register */ - for (i=0x70; i<0x80; i++) - { - m68k.memory_map[i].base = NULL; - m68k.memory_map[i].read8 = cart_prot_read_byte; - m68k.memory_map[i].read16 = cart_prot_read_word; - m68k.memory_map[i].write8 = cart_prot_write_byte; - m68k.memory_map[i].write16 = cart_prot_write_word; - zbank_memory_map[i].read = cart_prot_read_byte; - zbank_memory_map[i].write = cart_prot_write_byte; - } - } - else - { - /* initialize ROM cartridge */ - md_cart_init(); - - /* when booting from CD, cartridge is mapped to $400000-$7FFFFF */ - if (!scd.cartridge.boot) - { - for (i=0; i<0x40; i++) - { - m68k.memory_map[i+0x40].base = m68k.memory_map[i].base; - m68k.memory_map[i+0x40].read8 = m68k.memory_map[i].read8; - m68k.memory_map[i+0x40].read16 = m68k.memory_map[i].read16; - m68k.memory_map[i+0x40].write8 = m68k.memory_map[i].write8; - m68k.memory_map[i+0x40].write16 = m68k.memory_map[i].write16; - zbank_memory_map[i+0x40].read = zbank_memory_map[i].read; - zbank_memory_map[i+0x40].write = zbank_memory_map[i].write; - } - } - } -} diff --git a/waterbox/gpgx/core/cd_hw/cd_cart.h b/waterbox/gpgx/core/cd_hw/cd_cart.h deleted file mode 100644 index 13ea916903..0000000000 --- a/waterbox/gpgx/core/cd_hw/cd_cart.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD compatible ROM/RAM cartridge support - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - - - /* CD compatible ROM/RAM cartridge */ -typedef struct -{ - uint8 *area; // always 16K in bizhawk - uint8 boot; /* cartridge boot mode (0x00: boot from CD with ROM/RAM cartridge enabled, 0x40: boot from ROM cartridge with CD enabled) */ - uint8 id; /* RAM cartridge ID (related to RAM size, 0 if disabled) */ - uint8 prot; /* RAM cartridge write protection */ - uint32 mask; /* RAM cartridge size mask */ -} cd_cart_t; - -/* Function prototypes */ -extern void cd_cart_init(void); diff --git a/waterbox/gpgx/core/cd_hw/cdc.c b/waterbox/gpgx/core/cd_hw/cdc.c deleted file mode 100644 index 2b1ca82fd7..0000000000 --- a/waterbox/gpgx/core/cd_hw/cdc.c +++ /dev/null @@ -1,636 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD data controller (LC89510 compatible) - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -/* IFSTAT register bitmasks */ -#define BIT_DTEI 0x40 -#define BIT_DECI 0x20 -#define BIT_DTBSY 0x08 -#define BIT_DTEN 0x02 - -/* IFCTRL register bitmasks */ -#define BIT_DTEIEN 0x40 -#define BIT_DECIEN 0x20 -#define BIT_DOUTEN 0x02 - -/* CTRL0 register bitmasks */ -#define BIT_DECEN 0x80 -#define BIT_E01RQ 0x20 -#define BIT_AUTORQ 0x10 -#define BIT_WRRQ 0x04 - -/* CTRL1 register bitmasks */ -#define BIT_MODRQ 0x08 -#define BIT_FORMRQ 0x04 -#define BIT_SHDREN 0x01 - -/* CTRL2 register bitmask */ -#define BIT_VALST 0x80 - -/* TODO: figure exact DMA transfer rate */ -#define DMA_BYTES_PER_LINE 512 - -void cdc_init(void) -{ - memset(&cdc, 0, sizeof(cdc_t)); -} - -void cdc_reset(void) -{ - /* reset CDC register index */ - scd.regs[0x04>>1].byte.l = 0x00; - - /* reset CDC registers */ - cdc.ifstat = 0xff; - cdc.ifctrl = 0x00; - cdc.ctrl[0] = 0x00; - cdc.ctrl[1] = 0x00; - cdc.stat[0] = 0x00; - cdc.stat[1] = 0x00; - cdc.stat[2] = 0x00; - cdc.stat[3] = 0x80; - cdc.head[0][0] = 0x00; - cdc.head[0][1] = 0x00; - cdc.head[0][2] = 0x00; - cdc.head[0][3] = 0x01; - cdc.head[1][0] = 0x00; - cdc.head[1][1] = 0x00; - cdc.head[1][2] = 0x00; - cdc.head[1][3] = 0x00; - - /* reset CDC cycle counter */ - cdc.cycles = 0; - - /* DMA transfer disabled */ - cdc.dma_w = 0; - - /* clear any pending IRQ */ - if (scd.pending & (1 << 5)) - { - /* clear any pending interrupt level 5 */ - scd.pending &= ~(1 << 5); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } -} - -void cdc_dma_update(void) -{ - /* maximal transfer length */ - int length = DMA_BYTES_PER_LINE; - - /* end of DMA transfer ? */ - if (cdc.dbc.w < DMA_BYTES_PER_LINE) - { - /* transfer remaining words using 16-bit DMA */ - cdc.dma_w((cdc.dbc.w + 1) >> 1); - - /* reset data byte counter (DBCH bits 4-7 should be set to 1) */ - cdc.dbc.w = 0xf000; - - /* clear !DTEN and !DTBSY */ - cdc.ifstat |= (BIT_DTBSY | BIT_DTEN); - - /* pending Data Transfer End interrupt */ - cdc.ifstat &= ~BIT_DTEI; - - /* Data Transfer End interrupt enabled ? */ - if (cdc.ifctrl & BIT_DTEIEN) - { - /* pending level 5 interrupt */ - scd.pending |= (1 << 5); - - /* level 5 interrupt enabled ? */ - if (scd.regs[0x32>>1].byte.l & 0x20) - { - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - - /* clear DSR bit & set EDT bit (CD register $04) */ - scd.regs[0x04>>1].byte.h = (scd.regs[0x04>>1].byte.h & 0x07) | 0x80; - - /* SUB-CPU idle on register $04 polling ? */ - if (s68k.stopped & (1<<0x04)) - { - /* sync SUB-CPU with CDC */ - s68k.cycles = scd.cycles; - - /* restart SUB-CPU */ - s68k.stopped = 0; -#ifdef LOG_SCD - error("s68k started from %d cycles\n", s68k.cycles); -#endif - } - - /* disable DMA transfer */ - cdc.dma_w = 0; - } - else - { - /* transfer all words using 16-bit DMA */ - cdc.dma_w(DMA_BYTES_PER_LINE >> 1); - - /* decrement data byte counter */ - cdc.dbc.w -= length; - } -} - -int cdc_decoder_update(uint32 header) -{ - /* data decoding enabled ? */ - if (cdc.ctrl[0] & BIT_DECEN) - { - /* update HEAD registers */ - *(uint32 *)(cdc.head[0]) = header; - - /* set !VALST */ - cdc.stat[3] = 0x00; - - /* pending decoder interrupt */ - cdc.ifstat &= ~BIT_DECI; - - /* decoder interrupt enabled ? */ - if (cdc.ifctrl & BIT_DECIEN) - { - /* pending level 5 interrupt */ - scd.pending |= (1 << 5); - - /* level 5 interrupt enabled ? */ - if (scd.regs[0x32>>1].byte.l & 0x20) - { - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - - /* buffer RAM write enabled ? */ - if (cdc.ctrl[0] & BIT_WRRQ) - { - uint16 offset; - - /* increment block pointer */ - cdc.pt.w += 2352; - - /* increment write address */ - cdc.wa.w += 2352; - - /* CDC buffer address */ - offset = cdc.pt.w & 0x3fff; - - /* write CDD block header (4 bytes) */ - *(uint32 *)(cdc.ram + offset) = header; - - /* write CDD block data (2048 bytes) */ - cdd_read_data(cdc.ram + 4 + offset); - - /* take care of buffer overrun */ - if (offset > (0x4000 - 2048 - 4)) - { - /* data should be written at the start of buffer */ - memcpy(cdc.ram, cdc.ram + 0x4000, offset + 2048 + 4 - 0x4000); - } - - /* read next data block */ - return 1; - } - } - - /* keep decoding same data block if Buffer Write is disabled */ - return 0; -} - -void cdc_reg_w(unsigned char data) -{ -#ifdef LOG_CDC - error("CDC register %X write 0x%04x (%X)\n", scd.regs[0x04>>1].byte.l & 0x0F, data, s68k.pc); -#endif - switch (scd.regs[0x04>>1].byte.l & 0x0F) - { - case 0x01: /* IFCTRL */ - { - /* pending interrupts ? */ - if (((data & BIT_DTEIEN) && !(cdc.ifstat & BIT_DTEI)) || - ((data & BIT_DECIEN) && !(cdc.ifstat & BIT_DECI))) - { - /* pending level 5 interrupt */ - scd.pending |= (1 << 5); - - /* level 5 interrupt enabled ? */ - if (scd.regs[0x32>>1].byte.l & 0x20) - { - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - else if (scd.pending & (1 << 5)) - { - /* clear pending level 5 interrupts */ - scd.pending &= ~(1 << 5); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - - /* abort any data transfer if data output is disabled */ - if (!(data & BIT_DOUTEN)) - { - /* clear !DTBSY and !DTEN */ - cdc.ifstat |= (BIT_DTBSY | BIT_DTEN); - } - - cdc.ifctrl = data; - scd.regs[0x04>>1].byte.l = 0x02; - break; - } - - case 0x02: /* DBCL */ - cdc.dbc.byte.l = data; - scd.regs[0x04>>1].byte.l = 0x03; - break; - - case 0x03: /* DBCH */ - cdc.dbc.byte.h = data; - scd.regs[0x04>>1].byte.l = 0x04; - break; - - case 0x04: /* DACL */ - cdc.dac.byte.l = data; - scd.regs[0x04>>1].byte.l = 0x05; - break; - - case 0x05: /* DACH */ - cdc.dac.byte.h = data; - scd.regs[0x04>>1].byte.l = 0x06; - break; - - case 0x06: /* DTRG */ - { - /* start data transfer if data output is enabled */ - if (cdc.ifctrl & BIT_DOUTEN) - { - /* set !DTBSY */ - cdc.ifstat &= ~BIT_DTBSY; - - /* clear DBCH bits 4-7 */ - cdc.dbc.byte.h &= 0x0f; - - /* clear EDT & DSR bits (SCD register $04) */ - scd.regs[0x04>>1].byte.h &= 0x07; - - /* setup data transfer destination */ - switch (scd.regs[0x04>>1].byte.h & 0x07) - { - case 2: /* MAIN-CPU host read */ - case 3: /* SUB-CPU host read */ - { - /* set !DTEN */ - cdc.ifstat &= ~BIT_DTEN; - - /* set DSR bit (register $04) */ - scd.regs[0x04>>1].byte.h |= 0x40; - break; - } - - case 4: /* PCM RAM DMA */ - { - cdc.dma_w = pcm_ram_dma_w; - break; - } - - case 5: /* PRG-RAM DMA */ - { - cdc.dma_w = prg_ram_dma_w; - break; - } - - case 7: /* WORD-RAM DMA */ - { - /* check memory mode */ - if (scd.regs[0x02 >> 1].byte.l & 0x04) - { - /* 1M mode */ - if (scd.regs[0x02 >> 1].byte.l & 0x01) - { - /* Word-RAM bank 0 is assigned to SUB-CPU */ - cdc.dma_w = word_ram_0_dma_w; - } - else - { - /* Word-RAM bank 1 is assigned to SUB-CPU */ - cdc.dma_w = word_ram_1_dma_w; - } - } - else - { - /* 2M mode */ - if (scd.regs[0x02 >> 1].byte.l & 0x02) - { - /* only process DMA if Word-RAM is assigned to SUB-CPU */ - cdc.dma_w = word_ram_2M_dma_w; - } - } - break; - } - - default: /* invalid */ - { - #ifdef LOG_CDC - error("invalid CDC tranfer destination (%d)\n", scd.regs[0x04>>1].byte.h & 0x07); - #endif - break; - } - } - } - - scd.regs[0x04>>1].byte.l = 0x07; - break; - } - - case 0x07: /* DTACK */ - { - /* clear pending data transfer end interrupt */ - cdc.ifstat |= BIT_DTEI; - - /* clear DBCH bits 4-7 */ - cdc.dbc.byte.h &= 0x0f; - -#if 0 - /* no pending decoder interrupt ? */ - if ((cdc.ifstat | BIT_DECI) || !(cdc.ifctrl & BIT_DECIEN)) - { - /* clear pending level 5 interrupt */ - scd.pending &= ~(1 << 5); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } -#endif - scd.regs[0x04>>1].byte.l = 0x08; - break; - } - - case 0x08: /* WAL */ - cdc.wa.byte.l = data; - scd.regs[0x04>>1].byte.l = 0x09; - break; - - case 0x09: /* WAH */ - cdc.wa.byte.h = data; - scd.regs[0x04>>1].byte.l = 0x0a; - break; - - case 0x0a: /* CTRL0 */ - { - /* set CRCOK bit only if decoding is enabled */ - cdc.stat[0] = data & BIT_DECEN; - - /* update decoding mode */ - if (data & BIT_AUTORQ) - { - /* set MODE bit according to CTRL1 register & clear FORM bit */ - cdc.stat[2] = cdc.ctrl[1] & BIT_MODRQ; - } - else - { - /* set MODE & FORM bits according to CTRL1 register */ - cdc.stat[2] = cdc.ctrl[1] & (BIT_MODRQ | BIT_FORMRQ); - } - - cdc.ctrl[0] = data; - scd.regs[0x04>>1].byte.l = 0x0b; - break; - } - - case 0x0b: /* CTRL1 */ - { - /* update decoding mode */ - if (cdc.ctrl[0] & BIT_AUTORQ) - { - /* set MODE bit according to CTRL1 register & clear FORM bit */ - cdc.stat[2] = data & BIT_MODRQ; - } - else - { - /* set MODE & FORM bits according to CTRL1 register */ - cdc.stat[2] = data & (BIT_MODRQ | BIT_FORMRQ); - } - - cdc.ctrl[1] = data; - scd.regs[0x04>>1].byte.l = 0x0c; - break; - } - - case 0x0c: /* PTL */ - cdc.pt.byte.l = data; - scd.regs[0x04>>1].byte.l = 0x0d; - break; - - case 0x0d: /* PTH */ - cdc.pt.byte.h = data; - scd.regs[0x04>>1].byte.l = 0x0e; - break; - - case 0x0e: /* CTRL2 (unused) */ - scd.regs[0x04>>1].byte.l = 0x0f; - break; - - case 0x0f: /* RESET */ - cdc_reset(); - break; - - default: /* by default, SBOUT is not used */ - break; - } -} - -unsigned char cdc_reg_r(void) -{ - switch (scd.regs[0x04>>1].byte.l & 0x0F) - { - case 0x01: /* IFSTAT */ - scd.regs[0x04>>1].byte.l = 0x02; - return cdc.ifstat; - - case 0x02: /* DBCL */ - scd.regs[0x04>>1].byte.l = 0x03; - return cdc.dbc.byte.l; - - case 0x03: /* DBCH */ - scd.regs[0x04>>1].byte.l = 0x04; - return cdc.dbc.byte.h; - - case 0x04: /* HEAD0 */ - scd.regs[0x04>>1].byte.l = 0x05; - return cdc.head[cdc.ctrl[1] & BIT_SHDREN][0]; - - case 0x05: /* HEAD1 */ - scd.regs[0x04>>1].byte.l = 0x06; - return cdc.head[cdc.ctrl[1] & BIT_SHDREN][1]; - - case 0x06: /* HEAD2 */ - scd.regs[0x04>>1].byte.l = 0x07; - return cdc.head[cdc.ctrl[1] & BIT_SHDREN][2]; - - case 0x07: /* HEAD3 */ - scd.regs[0x04>>1].byte.l = 0x08; - return cdc.head[cdc.ctrl[1] & BIT_SHDREN][3]; - - case 0x08: /* PTL */ - scd.regs[0x04>>1].byte.l = 0x09; - return cdc.pt.byte.l; - - case 0x09: /* PTH */ - scd.regs[0x04>>1].byte.l = 0x0a; - return cdc.pt.byte.h; - - case 0x0a: /* WAL */ - scd.regs[0x04>>1].byte.l = 0x0b; - return cdc.wa.byte.l; - - case 0x0b: /* WAH */ - scd.regs[0x04>>1].byte.l = 0x0c; - return cdc.wa.byte.h; - - case 0x0c: /* STAT0 */ - scd.regs[0x04>>1].byte.l = 0x0d; - return cdc.stat[0]; - - case 0x0d: /* STAT1 (always return 0) */ - scd.regs[0x04>>1].byte.l = 0x0e; - return 0x00; - - case 0x0e: /* STAT2 */ - scd.regs[0x04>>1].byte.l = 0x0f; - return cdc.stat[2]; - - case 0x0f: /* STAT3 */ - { - uint8 data = cdc.stat[3]; - - /* clear !VALST (note: this is not 100% correct but BIOS do not seem to care) */ - cdc.stat[3] = BIT_VALST; - - /* clear pending decoder interrupt */ - cdc.ifstat |= BIT_DECI; - -#if 0 - /* no pending data transfer end interrupt */ - if ((cdc.ifstat | BIT_DTEI) || !(cdc.ifctrl & BIT_DTEIEN)) - { - /* clear pending level 5 interrupt */ - scd.pending &= ~(1 << 5); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } -#endif - - scd.regs[0x04>>1].byte.l = 0x00; - return data; - } - - default: /* by default, COMIN is always empty */ - return 0xff; - } -} - -unsigned short cdc_host_r(void) -{ - /* check if data is available */ - if (!(cdc.ifstat & BIT_DTEN)) - { - /* read data word from CDC RAM buffer */ - uint16 data = *(uint16 *)(cdc.ram + (cdc.dac.w & 0x3ffe)); - -#ifdef LSB_FIRST - /* source data is stored in big endian format */ - data = ((data >> 8) | (data << 8)) & 0xffff; -#endif - -#ifdef LOG_CDC - error("CDC host read 0x%04x -> 0x%04x (dbc=0x%x) (%X)\n", cdc.dac.w, data, cdc.dbc.w, s68k.pc); -#endif - - /* increment data address counter */ - cdc.dac.w += 2; - - /* decrement data byte counter */ - cdc.dbc.w -= 2; - - /* end of transfer ? */ - if ((int16)cdc.dbc.w <= 0) - { - /* reset data byte counter (DBCH bits 4-7 should be set to 1) */ - cdc.dbc.w = 0xf000; - - /* clear !DTEN and !DTBSY */ - cdc.ifstat |= (BIT_DTBSY | BIT_DTEN); - - /* pending Data Transfer End interrupt */ - cdc.ifstat &= ~BIT_DTEI; - - /* Data Transfer End interrupt enabled ? */ - if (cdc.ifctrl & BIT_DTEIEN) - { - /* pending level 5 interrupt */ - scd.pending |= (1 << 5); - - /* level 5 interrupt enabled ? */ - if (scd.regs[0x32>>1].byte.l & 0x20) - { - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - - /* clear DSR bit & set EDT bit (SCD register $04) */ - scd.regs[0x04>>1].byte.h = (scd.regs[0x04>>1].byte.h & 0x07) | 0x80; - } - - return data; - } - -#ifdef LOG_CDC - error("error reading CDC host (data transfer disabled)\n"); -#endif - return 0xffff; -} diff --git a/waterbox/gpgx/core/cd_hw/cdc.h b/waterbox/gpgx/core/cd_hw/cdc.h deleted file mode 100644 index c99b1342ba..0000000000 --- a/waterbox/gpgx/core/cd_hw/cdc.h +++ /dev/null @@ -1,69 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD data controller (LC89510 compatible) - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#ifndef _HW_CDC_ -#define _HW_CDC_ - -#define cdc scd.cdc_hw - -/* CDC hardware */ -typedef struct -{ - uint8 ifstat; - uint8 ifctrl; - reg16_t dbc; - reg16_t dac; - reg16_t pt; - reg16_t wa; - uint8 ctrl[2]; - uint8 head[2][4]; - uint8 stat[4]; - int cycles; - void (*dma_w)(unsigned int words); /* DMA transfer callback */ - uint8 ram[0x4000 + 2352]; /* 16K external RAM (with one block overhead to handle buffer overrun) */ -} cdc_t; - -/* Function prototypes */ -extern void cdc_init(void); -extern void cdc_reset(void); -extern void cdc_dma_update(void); -extern int cdc_decoder_update(uint32 header); -extern void cdc_reg_w(unsigned char data); -extern unsigned char cdc_reg_r(void); -extern unsigned short cdc_host_r(void); - -#endif diff --git a/waterbox/gpgx/core/cd_hw/cdd.c b/waterbox/gpgx/core/cd_hw/cdd.c deleted file mode 100644 index 25e2381f08..0000000000 --- a/waterbox/gpgx/core/cd_hw/cdd.c +++ /dev/null @@ -1,791 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD drive processor & CD-DA fader - * - * Copyright (C) 2012-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#include "shared.h" -#include "../cinterface/callbacks.h" - -/* BCD conversion lookup tables */ -static const uint8 lut_BCD_8[100] = -{ - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, -}; - -static const uint16 lut_BCD_16[100] = -{ - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, - 0x0200, 0x0201, 0x0202, 0x0203, 0x0204, 0x0205, 0x0206, 0x0207, 0x0208, 0x0209, - 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, - 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, - 0x0500, 0x0501, 0x0502, 0x0503, 0x0504, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, - 0x0600, 0x0601, 0x0602, 0x0603, 0x0604, 0x0605, 0x0606, 0x0607, 0x0608, 0x0609, - 0x0700, 0x0701, 0x0702, 0x0703, 0x0704, 0x0705, 0x0706, 0x0707, 0x0708, 0x0709, - 0x0800, 0x0801, 0x0802, 0x0803, 0x0804, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x0900, 0x0901, 0x0902, 0x0903, 0x0904, 0x0905, 0x0906, 0x0907, 0x0908, 0x0909, -}; - -static blip_t* blip[2]; - -typedef struct -{ - toc_t toc; -} frontendcd_t; - -int cdd_load(const char *key, char *header) -{ - frontendcd_t fecd; - char data[2048]; - int startoffs; - - - int bytes = sizeof(frontendcd_t); - if (load_archive(key, (unsigned char *)&fecd, bytes, NULL) != bytes) - return 0; - - // look for valid header - cdd_readcallback(0, data, 0); - if (memcmp("SEGADISCSYSTEM", data, 14) == 0) - startoffs = 0; - else if (memcmp("SEGADISCSYSTEM", data + 16, 14) == 0) - startoffs = 16; - else - return 0; - // copy security block - memcpy(header, data + startoffs, 0x210); - - // copy disk information - memcpy(&cdd.toc, &fecd.toc, sizeof(toc_t)); - - cdd.loaded = 1; - return 1; -} - -void cdd_init(blip_t* left, blip_t* right) -{ - /* CD-DA is running by default at 44100 Hz */ - /* Audio stream is resampled to desired rate using Blip Buffer */ - blip[0] = left; - blip[1] = right; - blip_set_rates(left, 44100, snd.sample_rate); - blip_set_rates(right, 44100, snd.sample_rate); -} - -void cdd_reset(void) -{ - /* reset cycle counter */ - cdd.cycles = 0; - - /* reset drive access latency */ - cdd.latency = 0; - - /* reset track index */ - cdd.index = 0; - - /* reset logical block address */ - cdd.lba = 0; - - // reset audio subblock position - cdd.sampleOffset = 0; - - // reset audio read position - cdd.sampleLba = 0; - - /* reset status */ - cdd.status = cdd.loaded ? CD_STOP : NO_DISC; - - /* reset CD-DA fader (full volume) */ - cdd.volume = 0x400; - - /* clear CD-DA output */ - cdd.audio[0] = cdd.audio[1] = 0; -} - -void cdd_unload(void) -{ - cdd.loaded = 0; - cdd_readcallback = NULL; - - /* reset TOC */ - memset(&cdd.toc, 0x00, sizeof(cdd.toc)); -} - -void cdd_hotswap(const toc_t *toc) -{ - if (toc) - { - cdd.loaded = 1; - memcpy(&cdd.toc, toc, sizeof(cdd.toc)); - } - else - { - cdd.loaded = 0; - memset(&cdd.toc, 0x00, sizeof(cdd.toc)); - } - - cdd_reset(); -} - -void cdd_read_data(uint8 *dst) -{ - /* only read DATA track sectors */ - if ((cdd.lba >= 0) && (cdd.lba < cdd.toc.tracks[0].end)) - { - cdd_readcallback(cdd.lba, dst, 0); - } -} - -void cdd_read_audio(unsigned int samples) -{ - // previous audio outputs // - int16 l = cdd.audio[0]; - int16 r = cdd.audio[1]; - - // get number of internal clocks (samples) needed // - samples = blip_clocks_needed(blip[0], samples); - - // audio track playing ? // - if (!scd.regs[0x36>>1].byte.h) - { - int i, mul, delta; - - // current CD-DA fader volume // - int curVol = cdd.volume; - - // CD-DA fader volume setup (0-1024) // - int endVol = scd.regs[0x34>>1].w >> 4; - - // read samples from current block // - { -#ifdef LSB_FIRST - int16 *ptr = (int16 *) (cdc.ram); -#else - uint8 *ptr = cdc.ram; -#endif - { - char scratch[2352]; - // copy the end of current sector - int nsampreq = samples; - unsigned char *dest = cdc.ram; - cdd_readcallback(cdd.sampleLba, scratch, 1); - memcpy(cdc.ram, scratch + cdd.sampleOffset * 4, 2352 - cdd.sampleOffset * 4); - cdd.sampleLba++; - nsampreq -= 588 - cdd.sampleOffset; - dest += 2352 - cdd.sampleOffset * 4; - cdd.sampleOffset = 0; - // fill full sectors - while (nsampreq >= 588) - { - cdd_readcallback(cdd.sampleLba, scratch, 1); - memcpy(dest, scratch, 2352); - cdd.sampleLba++; - nsampreq -= 588; - dest += 2352; - } - // do last partial sector - if (nsampreq > 0) - { - cdd_readcallback(cdd.sampleLba, scratch, 1); - memcpy(dest, scratch, nsampreq * 4); - cdd.sampleOffset = nsampreq; - dest += nsampreq * 4; - nsampreq = 0; - } - //printf("samples: %i\n", samples); - //memset(cdc.ram, 0, samples * 4); - //fread(cdc.ram, 1, samples * 4, cdd.toc.tracks[cdd.index].fd); - } - - // process 16-bit (little-endian) stereo samples // - for (i=0; i endVol) - { - // fade-out // - curVol--; - } - else if (!curVol) - { - // audio will remain muted until next setup // - break; - } - } - } - - // save current CD-DA fader volume // - cdd.volume = curVol; - - // save last audio output for next frame // - cdd.audio[0] = l; - cdd.audio[1] = r; - } - else - { - // no audio output // - if (l) blip_add_delta_fast(blip[0], 0, -l); - if (r) blip_add_delta_fast(blip[1], 0, -r); - - // save audio output for next frame // - cdd.audio[0] = 0; - cdd.audio[1] = 0; - } - - // end of Blip Buffer timeframe // - blip_end_frame(blip[0], samples); - blip_end_frame(blip[1], samples); -} - - -void cdd_update(void) -{ -#ifdef LOG_CDD - error("LBA = %d (track n�%d)(latency=%d)\n", cdd.lba, cdd.index, cdd.latency); -#endif - - /* seeking disc */ - if (cdd.status == CD_SEEK) - { - /* drive latency */ - if (cdd.latency > 0) - { - cdd.latency--; - return; - } - - /* drive is ready */ - cdd.status = CD_READY; - } - - /* reading disc */ - else if (cdd.status == CD_PLAY) - { - /* drive latency */ - if (cdd.latency > 0) - { - cdd.latency--; - return; - } - - /* track type */ - if (!cdd.index) - { - /* DATA sector header (CD-ROM Mode 1) */ - uint8 header[4]; - uint32 msf = cdd.lba + 150; - header[0] = lut_BCD_8[(msf / 75) / 60]; - header[1] = lut_BCD_8[(msf / 75) % 60]; - header[2] = lut_BCD_8[(msf % 75)]; - header[3] = 0x01; - - /* data track sector read is controlled by CDC */ - cdd.lba += cdc_decoder_update(*(uint32 *)(header)); - } - else if (cdd.index < cdd.toc.last) - { - /* check against audio track start index */ - if (cdd.lba >= cdd.toc.tracks[cdd.index].start) - { - /* audio track playing */ - // if it wasn't before, set the audio start position - if (scd.regs[0x36>>1].byte.h) - { - cdd.sampleLba = cdd.lba + 1; - cdd.sampleOffset = 0; - } - scd.regs[0x36>>1].byte.h = 0x00; - } - - /* audio blocks are still sent to CDC as well as CD DAC/Fader */ - cdc_decoder_update(0); - - /* next audio block is automatically read */ - cdd.lba++; - } - else - { - /* end of disc */ - cdd.status = CD_END; - return; - } - - /* check end of current track */ - if (cdd.lba >= cdd.toc.tracks[cdd.index].end) - { - /* play next track */ - cdd.index++; - - /* PAUSE between tracks */ - scd.regs[0x36>>1].byte.h = 0x01; - } - } - - /* scanning disc */ - else if (cdd.status == CD_SCAN) - { - /* fast-forward or fast-rewind */ - cdd.lba += cdd.scanOffset; - cdd.sampleLba += cdd.scanOffset; - - /* check current track limits */ - if (cdd.lba >= cdd.toc.tracks[cdd.index].end) - { - /* next track */ - cdd.index++; - - /* skip directly to track start position */ - cdd.lba = cdd.toc.tracks[cdd.index].start; - - /* AUDIO track playing ? */ - if (cdd.status == CD_PLAY) - { - scd.regs[0x36>>1].byte.h = 0x00; - // set audio start point - cdd.sampleLba = cdd.lba; - cdd.sampleOffset = 0; - } - } - else if (cdd.lba < cdd.toc.tracks[cdd.index].start) - { - /* previous track */ - cdd.index--; - - /* skip directly to track end position */ - cdd.lba = cdd.toc.tracks[cdd.index].end; - } - - /* check disc limits */ - if (cdd.index < 0) - { - cdd.index = 0; - cdd.lba = 0; - } - else if (cdd.index >= cdd.toc.last) - { - /* no AUDIO track playing */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* end of disc */ - cdd.index = cdd.toc.last; - cdd.lba = cdd.toc.end; - cdd.status = CD_END; - return; - } - } -} - -void cdd_process(void) -{ - /* Process CDD command */ - switch (scd.regs[0x42>>1].byte.h & 0x0f) - { - case 0x00: /* Drive Status */ - { - /* RS1-RS8 normally unchanged */ - scd.regs[0x38>>1].byte.h = cdd.status; - - /* unless RS1 indicated invalid track infos */ - if (scd.regs[0x38>>1].byte.l == 0x0f) - { - /* and SEEK has ended */ - if (cdd.status != CD_SEEK) - { - /* then return valid track infos, e.g current track number in RS2-RS3 (fixes Lunar - The Silver Star) */ - scd.regs[0x38>>1].byte.l = 0x02; - scd.regs[0x3a>>1].w = (cdd.index < cdd.toc.last) ? lut_BCD_16[cdd.index + 1] : 0x0A0A; - } - } - break; - } - - case 0x01: /* Stop Drive */ - { - /* update status */ - cdd.status = cdd.loaded ? CD_STOP : NO_DISC; - - /* no audio track playing */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* RS1-RS8 ignored, expects 0x0 ("no disc" ?) in RS0 once */ - scd.regs[0x38>>1].w = 0x0000; - scd.regs[0x3a>>1].w = 0x0000; - scd.regs[0x3c>>1].w = 0x0000; - scd.regs[0x3e>>1].w = 0x0000; - scd.regs[0x40>>1].w = 0x000f; - return; - } - - case 0x02: /* Read TOC */ - { - /* Infos automatically retrieved by CDD processor from Q-Channel */ - /* commands 0x00-0x02 (current block) and 0x03-0x05 (Lead-In) */ - switch (scd.regs[0x44>>1].byte.l) - { - case 0x00: /* Current Absolute Time (MM:SS:FF) */ - { - int lba = cdd.lba + 150; - scd.regs[0x38>>1].w = cdd.status << 8; - scd.regs[0x3a>>1].w = lut_BCD_16[(lba/75)/60]; - scd.regs[0x3c>>1].w = lut_BCD_16[(lba/75)%60]; - scd.regs[0x3e>>1].w = lut_BCD_16[(lba%75)]; - scd.regs[0x40>>1].byte.h = cdd.index ? 0x00 : 0x04; /* Current block flags in RS8 (bit0 = mute status, bit1: pre-emphasis status, bit2: track type) */ - break; - } - - case 0x01: /* Current Track Relative Time (MM:SS:FF) */ - { - int lba = cdd.lba - cdd.toc.tracks[cdd.index].start; - scd.regs[0x38>>1].w = (cdd.status << 8) | 0x01; - scd.regs[0x3a>>1].w = lut_BCD_16[(lba/75)/60]; - scd.regs[0x3c>>1].w = lut_BCD_16[(lba/75)%60]; - scd.regs[0x3e>>1].w = lut_BCD_16[(lba%75)]; - scd.regs[0x40>>1].byte.h = cdd.index ? 0x00 : 0x04; /* Current block flags in RS8 (bit0 = mute status, bit1: pre-emphasis status, bit2: track type) */ - break; - } - - case 0x02: /* Current Track Number */ - { - scd.regs[0x38>>1].w = (cdd.status << 8) | 0x02; - scd.regs[0x3a>>1].w = (cdd.index < cdd.toc.last) ? lut_BCD_16[cdd.index + 1] : 0x0A0A; - scd.regs[0x3c>>1].w = 0x0000; - scd.regs[0x3e>>1].w = 0x0000; /* Disk Control Code (?) in RS6 */ - scd.regs[0x40>>1].byte.h = 0x00; - break; - } - - case 0x03: /* Total length (MM:SS:FF) */ - { - int lba = cdd.toc.end + 150; - scd.regs[0x38>>1].w = (cdd.status << 8) | 0x03; - scd.regs[0x3a>>1].w = lut_BCD_16[(lba/75)/60]; - scd.regs[0x3c>>1].w = lut_BCD_16[(lba/75)%60]; - scd.regs[0x3e>>1].w = lut_BCD_16[(lba%75)]; - scd.regs[0x40>>1].byte.h = 0x00; - break; - } - - case 0x04: /* First & Last Track Numbers */ - { - scd.regs[0x38>>1].w = (cdd.status << 8) | 0x04; - scd.regs[0x3a>>1].w = 0x0001; - scd.regs[0x3c>>1].w = lut_BCD_16[cdd.toc.last]; - scd.regs[0x3e>>1].w = 0x0000; /* Drive Version (?) in RS6-RS7 */ - scd.regs[0x40>>1].byte.h = 0x00; /* Lead-In flags in RS8 (bit0 = mute status, bit1: pre-emphasis status, bit2: track type) */ - break; - } - - case 0x05: /* Track Start Time (MM:SS:FF) */ - { - int track = scd.regs[0x46>>1].byte.h * 10 + scd.regs[0x46>>1].byte.l; - int lba = cdd.toc.tracks[track-1].start + 150; - scd.regs[0x38>>1].w = (cdd.status << 8) | 0x05; - scd.regs[0x3a>>1].w = lut_BCD_16[(lba/75)/60]; - scd.regs[0x3c>>1].w = lut_BCD_16[(lba/75)%60]; - scd.regs[0x3e>>1].w = lut_BCD_16[(lba%75)]; - scd.regs[0x40>>1].byte.h = track % 10; /* Track Number (low digit) */ - if (track == 1) - { - /* RS6 bit 3 is set for the first (DATA) track */ - scd.regs[0x3e>>1].byte.h |= 0x08; - } - break; - } - - default: - { -#ifdef LOG_ERROR - error("Unknown CDD Command %02X (%X)\n", scd.regs[0x44>>1].byte.l, s68k.pc); -#endif - return; - } - } - break; - } - - case 0x03: /* Play */ - { - /* reset track index */ - int index = 0; - - /* new LBA position */ - int lba = ((scd.regs[0x44>>1].byte.h * 10 + scd.regs[0x44>>1].byte.l) * 60 + - (scd.regs[0x46>>1].byte.h * 10 + scd.regs[0x46>>1].byte.l)) * 75 + - (scd.regs[0x48>>1].byte.h * 10 + scd.regs[0x48>>1].byte.l) - 150; - - /* CD drive latency */ - if (!cdd.latency) - { - /* Fixes a few games hanging during intro because they expect data to be read with some delay */ - /* Radical Rex needs at least one interrupt delay */ - /* Wolf Team games (Anet Futatabi, Cobra Command, Road Avenger & Time Gal) need at least 6 interrupts delay */ - /* Space Adventure Cobra (2nd morgue scene) needs at least 13 interrupts delay (incl. seek time, so 6 is OK) */ - /* Jeopardy & ESPN Sunday Night NFL are picky about this as well: 10 interrupts delay (+ seek time) seems OK */ - cdd.latency = 10; - } - - /* CD drive seek time */ - /* max. seek time = 1.5 s = 1.5 x 75 = 112.5 CDD interrupts (rounded to 120) for 270000 sectors max on disc. */ - /* Note: This is only a rough approximation since, on real hardware, seek time is much likely not linear and */ - /* latency much larger than above value, but this model works fine for Sonic CD (track 26 playback needs to */ - /* be enough delayed to start in sync with intro sequence, as compared with real hardware recording). */ - if (lba > cdd.lba) - { - cdd.latency += (((lba - cdd.lba) * 120) / 270000); - } - else - { - cdd.latency += (((cdd.lba - lba) * 120) / 270000); - } - - /* update current LBA */ - cdd.lba = lba; - - /* get track index */ - while ((cdd.toc.tracks[index].end <= lba) && (index < cdd.toc.last)) index++; - - /* update current track index */ - cdd.index = index; - - /* no audio track playing (yet) */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* update status */ - cdd.status = CD_PLAY; - - /* return track index in RS2-RS3 */ - scd.regs[0x38>>1].w = (CD_PLAY << 8) | 0x02; - scd.regs[0x3a>>1].w = (cdd.index < cdd.toc.last) ? lut_BCD_16[index + 1] : 0x0A0A; - scd.regs[0x3c>>1].w = 0x0000; - scd.regs[0x3e>>1].w = 0x0000; - scd.regs[0x40>>1].byte.h = 0x00; - break; - } - - case 0x04: /* Seek */ - { - /* reset track index */ - int index = 0; - - /* new LBA position */ - int lba = ((scd.regs[0x44>>1].byte.h * 10 + scd.regs[0x44>>1].byte.l) * 60 + - (scd.regs[0x46>>1].byte.h * 10 + scd.regs[0x46>>1].byte.l)) * 75 + - (scd.regs[0x48>>1].byte.h * 10 + scd.regs[0x48>>1].byte.l) - 150; - - /* CD drive seek time */ - /* We are using similar linear model as above, although still not exactly accurate, */ - /* it works fine for Switch/Panic! intro (Switch needs at least 30 interrupts while */ - /* seeking from 00:05:63 to 24:03:19, Panic! when seeking from 00:05:60 to 24:06:07) */ - if (lba > cdd.lba) - { - cdd.latency = ((lba - cdd.lba) * 120) / 270000; - } - else - { - cdd.latency = ((cdd.lba - lba) * 120) / 270000; - } - - /* update current LBA */ - cdd.lba = lba; - - /* get current track index */ - while ((cdd.toc.tracks[index].end <= lba) && (index < cdd.toc.last)) index++; - - /* update current track index */ - cdd.index = index; - - /* no audio track playing */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* update status */ - cdd.status = CD_SEEK; - - /* unknown RS1-RS8 values (returning 0xF in RS1 invalidates track infos in RS2-RS8 and fixes Final Fight CD intro when seek time is emulated) */ - scd.regs[0x38>>1].w = (CD_SEEK << 8) | 0x0f; - scd.regs[0x3a>>1].w = 0x0000; - scd.regs[0x3c>>1].w = 0x0000; - scd.regs[0x3e>>1].w = 0x0000; - scd.regs[0x40>>1].w = ~(CD_SEEK + 0xf) & 0x0f; - return; - } - - case 0x06: /* Pause */ - { - /* no audio track playing */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* update status (RS1-RS8 unchanged) */ - cdd.status = scd.regs[0x38>>1].byte.h = CD_READY; - break; - } - - case 0x07: /* Resume */ - { - /* update status (RS1-RS8 unchanged) */ - cdd.status = scd.regs[0x38>>1].byte.h = CD_PLAY; - break; - } - - case 0x08: /* Forward Scan */ - { - /* reset scanning direction / speed */ - cdd.scanOffset = CD_SCAN_SPEED; - - /* update status (RS1-RS8 unchanged) */ - cdd.status = scd.regs[0x38>>1].byte.h = CD_SCAN; - break; - } - - case 0x09: /* Rewind Scan */ - { - /* reset scanning direction / speed */ - cdd.scanOffset = -CD_SCAN_SPEED; - - /* update status (RS1-RS8 unchanged) */ - cdd.status = scd.regs[0x38>>1].byte.h = CD_SCAN; - break; - } - - - case 0x0a: /* N-Track Jump Control ? (usually sent before CD_SEEK or CD_PLAY commands) */ - { - /* TC3 corresponds to seek direction (00=forward, FF=reverse) */ - /* TC4-TC7 are related to seek length (4x4 bits i.e parameter values are between -65535 and +65535) */ - /* Maybe related to number of auto-sequenced track jumps/moves for CD DSP (cf. CXD2500BQ datasheet) */ - /* also see US Patent nr. 5222054 for a detailled description of seeking operation using Track Jump */ - - /* no audio track playing */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* update status (RS1-RS8 unchanged) */ - cdd.status = scd.regs[0x38>>1].byte.h = CD_READY; - break; - } - - case 0x0c: /* Close Tray */ - { - /* no audio track playing */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* update status */ - cdd.status = cdd.loaded ? CD_STOP : NO_DISC; - - /* RS1-RS8 ignored, expects 0x0 ("no disc" ?) in RS0 once */ - scd.regs[0x38>>1].w = 0x0000; - scd.regs[0x3a>>1].w = 0x0000; - scd.regs[0x3c>>1].w = 0x0000; - scd.regs[0x3e>>1].w = 0x0000; - scd.regs[0x40>>1].w = 0x000f; - -#ifdef CD_TRAY_CALLBACK - CD_TRAY_CALLBACK -#endif - return; - } - - case 0x0d: /* Open Tray */ - { - /* no audio track playing */ - scd.regs[0x36>>1].byte.h = 0x01; - - /* update status (RS1-RS8 ignored) */ - cdd.status = CD_OPEN; - scd.regs[0x38>>1].w = CD_OPEN << 8; - scd.regs[0x3a>>1].w = 0x0000; - scd.regs[0x3c>>1].w = 0x0000; - scd.regs[0x3e>>1].w = 0x0000; - scd.regs[0x40>>1].w = ~CD_OPEN & 0x0f; - -#ifdef CD_TRAY_CALLBACK - CD_TRAY_CALLBACK -#endif - return; - } - - default: /* Unknown command */ -#ifdef LOG_CDD - error("Unknown CDD Command !!!\n"); -#endif - scd.regs[0x38>>1].byte.h = cdd.status; - break; - } - - /* only compute checksum when necessary */ - scd.regs[0x40>>1].byte.l = ~(scd.regs[0x38>>1].byte.h + scd.regs[0x38>>1].byte.l + - scd.regs[0x3a>>1].byte.h + scd.regs[0x3a>>1].byte.l + - scd.regs[0x3c>>1].byte.h + scd.regs[0x3c>>1].byte.l + - scd.regs[0x3e>>1].byte.h + scd.regs[0x3e>>1].byte.l + - scd.regs[0x40>>1].byte.h) & 0x0f; -} diff --git a/waterbox/gpgx/core/cd_hw/cdd.h b/waterbox/gpgx/core/cd_hw/cdd.h deleted file mode 100644 index fdfb62b127..0000000000 --- a/waterbox/gpgx/core/cd_hw/cdd.h +++ /dev/null @@ -1,110 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD drive processor & CD-DA fader - * - * Copyright (C) 2012-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#ifndef _HW_CDD_ -#define _HW_CDD_ - -#include "blip_buf.h" - -#ifdef USE_LIBTREMOR -#include "tremor/ivorbisfile.h" -#endif - -#define cdd scd.cdd_hw - -/* CDD status */ -#define NO_DISC 0x00 -#define CD_PLAY 0x01 -#define CD_SEEK 0x02 -#define CD_SCAN 0x03 -#define CD_READY 0x04 -#define CD_OPEN 0x05 /* similar to 0x0E ? */ -#define CD_STOP 0x09 -#define CD_END 0x0C - -/* CD blocks scanning speed */ -#define CD_SCAN_SPEED 30 - -#define CD_MAX_TRACKS 100 - -/* CD track */ -typedef struct -{ - int start; - int end; -} track_t; - -/* CD TOC */ -typedef struct -{ - int end; - int last; - track_t tracks[CD_MAX_TRACKS]; -} toc_t; - -/* CDD hardware */ -typedef struct -{ - uint32 cycles; - uint32 latency; - int loaded; - int index; - int lba; - int scanOffset; - int volume; - int sampleOffset; - int sampleLba; - uint8 status; - toc_t toc; - int16 audio[2]; -} cdd_t; - -/* Function prototypes */ -extern void cdd_init(blip_t* left, blip_t* right); -extern void cdd_reset(void); -extern int cdd_load(const char *key, char *header); -extern void cdd_unload(void); -extern void cdd_read_data(uint8 *dst); -extern void cdd_read_audio(unsigned int samples); -extern void cdd_update(void); -extern void cdd_process(void); - -// switch disks after emulation was started -// pass NULL to open tray -void cdd_hotswap(const toc_t *toc); - -#endif diff --git a/waterbox/gpgx/core/cd_hw/gfx.c b/waterbox/gpgx/core/cd_hw/gfx.c deleted file mode 100644 index f8febe0d59..0000000000 --- a/waterbox/gpgx/core/cd_hw/gfx.c +++ /dev/null @@ -1,685 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD graphics processor - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#include "shared.h" - -/***************************************************************/ -/* WORD-RAM DMA interfaces (1M & 2M modes) */ -/***************************************************************/ - -void word_ram_0_dma_w(unsigned int words) -{ - uint16 data; - - /* CDC buffer source address */ - uint16 src_index = cdc.dac.w & 0x3ffe; - - /* WORD-RAM destination address*/ - uint32 dst_index = (scd.regs[0x0a>>1].w << 3) & 0x1fffe; - - /* update DMA destination address */ - scd.regs[0x0a>>1].w += (words >> 2); - - /* update DMA source address */ - cdc.dac.w += (words << 1); - - /* DMA transfer */ - while (words--) - { - /* read 16-bit word from CDC buffer */ - data = *(uint16 *)(cdc.ram + src_index); - -#ifdef LSB_FIRST - /* source data is stored in big endian format */ - data = ((data >> 8) | (data << 8)) & 0xffff; -#endif - - /* write 16-bit word to WORD-RAM */ - *(uint16 *)(scd.word_ram[0] + dst_index) = data ; - - /* increment CDC buffer source address */ - src_index = (src_index + 2) & 0x3ffe; - - /* increment WORD-RAM destination address */ - dst_index = (dst_index + 2) & 0x1fffe; - } -} - -void word_ram_1_dma_w(unsigned int words) -{ - uint16 data; - - /* CDC buffer source address */ - uint16 src_index = cdc.dac.w & 0x3ffe; - - /* WORD-RAM destination address*/ - uint32 dst_index = ((scd.regs[0x0a>>1].w << 3) & 0x1fffe); - - /* update DMA destination address */ - scd.regs[0x0a>>1].w += (words >> 2); - - /* update DMA source address */ - cdc.dac.w += (words << 1); - - /* DMA transfer */ - while (words--) - { - /* read 16-bit word from CDC buffer */ - data = *(uint16 *)(cdc.ram + src_index); - -#ifdef LSB_FIRST - /* source data is stored in big endian format */ - data = ((data >> 8) | (data << 8)) & 0xffff; -#endif - - /* write 16-bit word to WORD-RAM */ - *(uint16 *)(scd.word_ram[1] + dst_index) = data ; - - /* increment CDC buffer source address */ - src_index = (src_index + 2) & 0x3ffe; - - /* increment WORD-RAM destination address */ - dst_index = (dst_index + 2) & 0x1fffe; - } -} - -void word_ram_2M_dma_w(unsigned int words) -{ - uint16 data; - - /* CDC buffer source address */ - uint16 src_index = cdc.dac.w & 0x3ffe; - - /* WORD-RAM destination address*/ - uint32 dst_index = (scd.regs[0x0a>>1].w << 3) & 0x3fffe; - - /* update DMA destination address */ - scd.regs[0x0a>>1].w += (words >> 2); - - /* update DMA source address */ - cdc.dac.w += (words << 1); - - /* DMA transfer */ - while (words--) - { - /* read 16-bit word from CDC buffer */ - data = *(uint16 *)(cdc.ram + src_index); - -#ifdef LSB_FIRST - /* source data is stored in big endian format */ - data = ((data >> 8) | (data << 8)) & 0xffff; -#endif - - /* write 16-bit word to WORD-RAM */ - *(uint16 *)(scd.word_ram_2M + dst_index) = data ; - - /* increment CDC buffer source address */ - src_index = (src_index + 2) & 0x3ffe; - - /* increment WORD-RAM destination address */ - dst_index = (dst_index + 2) & 0x3fffe; - } -} - - -/***************************************************************/ -/* WORD-RAM 0 & 1 DOT image SUB-CPU interface (1M Mode) */ -/***************************************************************/ - -unsigned int dot_ram_0_read16(unsigned int address) -{ - uint8 data = READ_BYTE(scd.word_ram[0], (address >> 1) & 0x1ffff); - return ((data & 0x0f) | ((data << 4) & 0xf00)); -} - -unsigned int dot_ram_1_read16(unsigned int address) -{ - uint8 data = READ_BYTE(scd.word_ram[1], (address >> 1) & 0x1ffff); - return ((data & 0x0f) | ((data << 4) & 0xf00)); -} - -void dot_ram_0_write16(unsigned int address, unsigned int data) -{ - uint8 prev; - address = (address >> 1) & 0x1ffff; - prev = READ_BYTE(scd.word_ram[0], address); - data = (data & 0x0f) | ((data >> 4) & 0xf0); - data = gfx.lut_prio[(scd.regs[0x02>>1].w >> 3) & 0x03][prev][data]; - WRITE_BYTE(scd.word_ram[0], address, data); -} - -void dot_ram_1_write16(unsigned int address, unsigned int data) -{ - uint8 prev; - address = (address >> 1) & 0x1ffff; - prev = READ_BYTE(scd.word_ram[1], address); - data = (data & 0x0f) | ((data >> 4) & 0xf0); - data = gfx.lut_prio[(scd.regs[0x02>>1].w >> 3) & 0x03][prev][data]; - WRITE_BYTE(scd.word_ram[1], address, data); -} - -unsigned int dot_ram_0_read8(unsigned int address) -{ - uint8 data = READ_BYTE(scd.word_ram[0], (address >> 1) & 0x1ffff); - - if (address & 1) - { - return (data & 0x0f); - } - - return (data >> 4); -} - -unsigned int dot_ram_1_read8(unsigned int address) -{ - uint8 data = READ_BYTE(scd.word_ram[1], (address >> 1) & 0x1ffff); - - if (address & 1) - { - return (data & 0x0f); - } - - return (data >> 4); -} - -void dot_ram_0_write8(unsigned int address, unsigned int data) -{ - uint8 prev = READ_BYTE(scd.word_ram[0], (address >> 1) & 0x1ffff); - - if (address & 1) - { - data = (prev & 0xf0) | (data & 0x0f); - } - else - { - data = (prev & 0x0f) | (data << 4); - } - - data = gfx.lut_prio[(scd.regs[0x02>>1].w >> 3) & 0x03][prev][data]; - WRITE_BYTE(scd.word_ram[0], (address >> 1) & 0x1ffff, data); -} - -void dot_ram_1_write8(unsigned int address, unsigned int data) -{ - uint8 prev = READ_BYTE(scd.word_ram[1], (address >> 1) & 0x1ffff); - - if (address & 1) - { - data = (prev & 0xf0) | (data & 0x0f); - } - else - { - data = (prev & 0x0f) | (data << 4); - } - - data = gfx.lut_prio[(scd.regs[0x02>>1].w >> 3) & 0x03][prev][data]; - WRITE_BYTE(scd.word_ram[1], (address >> 1) & 0x1ffff, data); -} - - -/***************************************************************/ -/* WORD-RAM 0 & 1 CELL image MAIN-CPU interface (1M Mode) */ -/***************************************************************/ - -unsigned int cell_ram_0_read16(unsigned int address) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10002); - return *(uint16 *)(scd.word_ram[0] + address); -} - -unsigned int cell_ram_1_read16(unsigned int address) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10002); - return *(uint16 *)(scd.word_ram[1] + address); -} - -void cell_ram_0_write16(unsigned int address, unsigned int data) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10002); - *(uint16 *)(scd.word_ram[0] + address) = data; -} - -void cell_ram_1_write16(unsigned int address, unsigned int data) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10002); - *(uint16 *)(scd.word_ram[1] + address) = data; -} - -unsigned int cell_ram_0_read8(unsigned int address) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10003); - return READ_BYTE(scd.word_ram[0], address); -} - -unsigned int cell_ram_1_read8(unsigned int address) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10003); - return READ_BYTE(scd.word_ram[1], address); -} - -void cell_ram_0_write8(unsigned int address, unsigned int data) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10003); - WRITE_BYTE(scd.word_ram[0], address, data); -} - -void cell_ram_1_write8(unsigned int address, unsigned int data) -{ - address = gfx.lut_offset[(address >> 2) & 0x7fff] | (address & 0x10003); - WRITE_BYTE(scd.word_ram[1], address, data); -} - - -/***************************************************************/ -/* Rotation / Scaling operation (2M Mode) */ -/***************************************************************/ - -void gfx_init(void) -{ - int i, j; - uint16 offset; - uint8 mask, row, col, temp; - - memset(&gfx, 0, sizeof(gfx_t)); - - /* Initialize cell image lookup table */ - /* $220000-$22FFFF corresponds to $200000-$20FFFF */ - for (i=0; i<0x4000; i++) - { - offset = (i & 0x07) << 8; /* cell vline (0-7) */ - offset = offset | (((i >> 8) & 0x3f) << 2); /* cell x offset (0-63) */ - offset = offset | (((i >> 3) & 0x1f) << 11); /* cell y offset (0-31) */ - gfx.lut_offset[i] = offset; - } - - /* $230000-$237FFF corresponds to $210000-$217FFF */ - for (i=0x4000; i<0x6000; i++) - { - offset = (i & 0x07) << 8; /* cell vline (0-7) */ - offset = offset | (((i >> 7) & 0x3f) << 2); /* cell x offset (0-63) */ - offset = offset | (((i >> 3) & 0x0f) << 11); /* cell y offset (0-15) */ - gfx.lut_offset[i] = offset; - } - - /* $238000-$23BFFF corresponds to $218000-$21BFFF */ - for (i=0x6000; i<0x7000; i++) - { - offset = (i & 0x07) << 8; /* cell vline (0-7) */ - offset = offset | (((i >> 6) & 0x3f) << 2); /* cell x offset (0-63) */ - offset = offset | (((i >> 3) & 0x07) << 11); /* cell y offset (0-7) */ - gfx.lut_offset[i] = offset | 0x8000; - } - - /* $23C000-$23DFFF corresponds to $21C000-$21DFFF */ - for (i=0x7000; i<0x7800; i++) - { - offset = (i & 0x07) << 8; /* cell vline (0-7) */ - offset = offset | (((i >> 5) & 0x3f) << 2); /* cell x offset (0-63) */ - offset = offset | (((i >> 3) & 0x03) << 11); /* cell y offset (0-3) */ - gfx.lut_offset[i] = offset | 0xc000; - } - - /* $23E000-$23FFFF corresponds to $21E000-$21FFFF */ - for (i=0x7800; i<0x8000; i++) - { - offset = (i & 0x07) << 8; /* cell vline (0-7) */ - offset = offset | (((i >> 5) & 0x3f) << 2); /* cell x offset (0-63) */ - offset = offset | (((i >> 3) & 0x03) << 11); /* cell y offset (0-3) */ - gfx.lut_offset[i] = offset | 0xe000; - } - - /* Initialize priority modes lookup table */ - for (i=0; i<0x100; i++) - { - for (j=0; j<0x100; j++) - { - /* normal */ - gfx.lut_prio[0][i][j] = j; - /* underwrite */ - gfx.lut_prio[1][i][j] = ((i & 0x0f) ? (i & 0x0f) : (j & 0x0f)) | ((i & 0xf0) ? (i & 0xf0) : (j & 0xf0)); - /* overwrite */ - gfx.lut_prio[2][i][j] = ((j & 0x0f) ? (j & 0x0f) : (i & 0x0f)) | ((j & 0xf0) ? (j & 0xf0) : (i & 0xf0)); - /* invalid */ - gfx.lut_prio[3][i][j] = i; - } - } - - /* Initialize cell lookup table */ - /* table entry = yyxxshrr (8 bits) */ - /* with: yy = cell row (0-3) */ - /* xx = cell column (0-3) */ - /* s = stamp size (0=16x16, 1=32x32) */ - /* hrr = HFLIP & ROTATION bits */ - for (i=0; i<0x100; i++) - { - /* one stamp = 2x2 cells (16x16) or 4x4 cells (32x32) */ - mask = (i & 8) ? 3 : 1; - row = (i >> 6) & mask; - col = (i >> 4) & mask; - - if (i & 4) { col = col ^ mask; } /* HFLIP (always first) */ - if (i & 2) { col = col ^ mask; row = row ^ mask; } /* ROLL1 */ - if (i & 1) { temp = col; col = row ^ mask; row = temp; } /* ROLL0 */ - - /* cell offset (0-3 or 0-15) */ - gfx.lut_cell[i] = row + col * (mask + 1); - } - - /* Initialize pixel lookup table */ - /* table entry = yyyxxxhrr (9 bits) */ - /* with: yyy = pixel row (0-7) */ - /* xxx = pixel column (0-7) */ - /* hrr = HFLIP & ROTATION bits */ - for (i=0; i<0x200; i++) - { - /* one cell = 8x8 pixels */ - row = (i >> 6) & 7; - col = (i >> 3) & 7; - - if (i & 4) { col = col ^ 7; } /* HFLIP (always first) */ - if (i & 2) { col = col ^ 7; row = row ^ 7; } /* ROLL1 */ - if (i & 1) { temp = col; col = row ^ 7; row = temp; } /* ROLL0 */ - - /* pixel offset (0-63) */ - gfx.lut_pixel[i] = col + row * 8; - } -} - -void gfx_reset(void) -{ - /* Reset cycle counter */ - gfx.cycles = 0; -} - -INLINE void gfx_render(uint32 bufferIndex, uint32 width) -{ - uint8 pixel_in, pixel_out; - uint16 stamp_data; - uint32 stamp_index; - - /* pixel map start position for current line (13.3 format converted to 13.11) */ - uint32 xpos = *gfx.tracePtr++ << 8; - uint32 ypos = *gfx.tracePtr++ << 8; - - /* pixel map offset values for current line (5.11 format) */ - uint32 xoffset = (int16) *gfx.tracePtr++; - uint32 yoffset = (int16) *gfx.tracePtr++; - - /* process all dots */ - while (width--) - { - /* check if stamp map is repeated */ - if (scd.regs[0x58>>1].byte.l & 0x01) - { - /* stamp map range */ - xpos &= gfx.dotMask; - ypos &= gfx.dotMask; - } - else - { - /* 24-bit range */ - xpos &= 0xffffff; - ypos &= 0xffffff; - } - - /* check if pixel is outside stamp map */ - if ((xpos | ypos) & ~gfx.dotMask) - { - /* force pixel output to 0 */ - pixel_out = 0x00; - } - else - { - /* read stamp map table data */ - stamp_data = gfx.mapPtr[(xpos >> gfx.stampShift) | ((ypos >> gfx.stampShift) << gfx.mapShift)]; - - /* stamp generator base index */ - /* sss ssssssss ccyyyxxx (16x16) or sss sssssscc ccyyyxxx (32x32) */ - /* with: s = stamp number (1 stamp = 16x16 or 32x32 pixels) */ - /* c = cell offset (0-3 for 16x16, 0-15 for 32x32) */ - /* yyy = line offset (0-7) */ - /* xxx = pixel offset (0-7) */ - stamp_index = (stamp_data & 0x7ff) << 8; - - if (stamp_index) - { - /* extract HFLIP & ROTATION bits */ - stamp_data = (stamp_data >> 13) & 7; - - /* cell offset (0-3 or 0-15) */ - /* table entry = yyxxshrr (8 bits) */ - /* with: yy = cell row (0-3) = (ypos >> (11 + 3)) & 3 */ - /* xx = cell column (0-3) = (xpos >> (11 + 3)) & 3 */ - /* s = stamp size (0=16x16, 1=32x32) */ - /* hrr = HFLIP & ROTATION bits */ - stamp_index |= gfx.lut_cell[stamp_data | ((scd.regs[0x58>>1].byte.l & 0x02) << 2 ) | ((ypos >> 8) & 0xc0) | ((xpos >> 10) & 0x30)] << 6; - - /* pixel offset (0-63) */ - /* table entry = yyyxxxhrr (9 bits) */ - /* with: yyy = pixel row (0-7) = (ypos >> 11) & 7 */ - /* xxx = pixel column (0-7) = (xpos >> 11) & 7 */ - /* hrr = HFLIP & ROTATION bits */ - stamp_index |= gfx.lut_pixel[stamp_data | ((xpos >> 8) & 0x38) | ((ypos >> 5) & 0x1c0)]; - - /* read pixel pair (2 pixels/byte) */ - pixel_out = READ_BYTE(scd.word_ram_2M, stamp_index >> 1); - - /* extract left or rigth pixel */ - if (stamp_index & 1) - { - pixel_out &= 0x0f; - } - else - { - pixel_out >>= 4; - } - } - else - { - /* stamp 0 is not used: force pixel output to 0 */ - pixel_out = 0x00; - } - } - - /* read out paired pixel data */ - pixel_in = READ_BYTE(scd.word_ram_2M, bufferIndex >> 1); - - /* update left or rigth pixel */ - if (bufferIndex & 1) - { - pixel_out |= (pixel_in & 0xf0); - } - else - { - pixel_out = (pixel_out << 4) | (pixel_in & 0x0f); - } - - /* priority mode write */ - pixel_out = gfx.lut_prio[(scd.regs[0x02>>1].w >> 3) & 0x03][pixel_in][pixel_out]; - - /* write data to image buffer */ - WRITE_BYTE(scd.word_ram_2M, bufferIndex >> 1, pixel_out); - - /* check current pixel position */ - if ((bufferIndex & 7) != 7) - { - /* next pixel */ - bufferIndex++; - } - else - { - /* next cell: increment image buffer offset by one column (minus 7 pixels) */ - bufferIndex += gfx.bufferOffset; - } - - /* increment pixel position */ - xpos += xoffset; - ypos += yoffset; - } -} - -void gfx_start(unsigned int base, int cycles) -{ - /* make sure 2M mode is enabled */ - if (!(scd.regs[0x02>>1].byte.l & 0x04)) - { - uint32 mask; - - /* trace vector pointer */ - gfx.tracePtr = (uint16 *)(scd.word_ram_2M + ((base << 2) & 0x3fff8)); - - /* stamps & stamp map size */ - switch ((scd.regs[0x58>>1].byte.l >> 1) & 0x03) - { - case 0: - gfx.dotMask = 0x07ffff; /* 256x256 dots/map */ - gfx.stampShift = 11 + 4; /* 16x16 dots/stamps */ - gfx.mapShift = 4; /* 16x16 stamps/map */ - mask = 0x3fe00; /* 512 bytes/table */ - break; - - case 1: - gfx.dotMask = 0x07ffff; /* 256x256 dots/map */ - gfx.stampShift = 11 + 5; /* 32x32 dots/stamps */ - gfx.mapShift = 3; /* 8x8 stamps/map */ - mask = 0x3ff80; /* 128 bytes/table */ - break; - - case 2: - gfx.dotMask = 0x7fffff; /* 4096*4096 dots/map */ - gfx.stampShift = 11 + 4; /* 16x16 dots/stamps */ - gfx.mapShift = 8; /* 256x256 stamps/map */ - mask = 0x20000; /* 131072 bytes/table */ - break; - - case 3: - gfx.dotMask = 0x7fffff; /* 4096*4096 dots/map */ - gfx.stampShift = 11 + 5; /* 32x32 dots/stamps */ - gfx.mapShift = 7; /* 128x128 stamps/map */ - mask = 0x38000; /* 32768 bytes/table */ - break; - } - - /* stamp map table base address */ - gfx.mapPtr = (uint16 *)(scd.word_ram_2M + ((scd.regs[0x5a>>1].w << 2) & mask)); - - /* image buffer column offset (64 pixels/cell, minus 7 pixels to restart at cell beginning) */ - gfx.bufferOffset = (((scd.regs[0x5c>>1].byte.l & 0x1f) + 1) << 6) - 7; - - /* image buffer start index in dot units (2 pixels/byte) */ - gfx.bufferStart = (scd.regs[0x5e>>1].w << 3) & 0x7ffc0; - - /* add image buffer horizontal dot offset */ - gfx.bufferStart += (scd.regs[0x60>>1].byte.l & 0x3f); - - /* reset GFX chip cycle counter */ - gfx.cycles = cycles; - - /* update GFX chip timings (see AC3:Thunderhawk / Thunderstrike) */ - gfx.cyclesPerLine = 4 * 5 * scd.regs[0x62>>1].w; - - /* start graphics operation */ - scd.regs[0x58>>1].byte.h = 0x80; - } -} - -void gfx_update(int cycles) -{ - /* synchronize GFX chip with SUB-CPU */ - cycles -= gfx.cycles; - - /* make sure SUB-CPU is ahead */ - if (cycles > 0) - { - /* number of lines to process */ - unsigned int lines = (cycles + gfx.cyclesPerLine - 1) / gfx.cyclesPerLine; - - /* check against remaining lines */ - if (lines < scd.regs[0x64>>1].byte.l) - { - /* update Vdot remaining size */ - scd.regs[0x64>>1].byte.l -= lines; - - /* increment cycle counter */ - gfx.cycles += lines * gfx.cyclesPerLine; - } - else - { - /* process remaining lines */ - lines = scd.regs[0x64>>1].byte.l; - - /* clear Vdot remaining size */ - scd.regs[0x64>>1].byte.l = 0; - - /* end of graphics operation */ - scd.regs[0x58>>1].byte.h = 0; - - /* SUB-CPU idle on register $58 polling ? */ - if (s68k.stopped & (1<<0x08)) - { - /* sync SUB-CPU with GFX chip */ - s68k.cycles = scd.cycles; - - /* restart SUB-CPU */ - s68k.stopped = 0; -#ifdef LOG_SCD - error("s68k started from %d cycles\n", s68k.cycles); -#endif - } - - /* level 1 interrupt enabled ? */ - if (scd.regs[0x32>>1].byte.l & 0x02) - { - /* trigger level 1 interrupt */ - scd.pending |= (1 << 1); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - - /* render lines */ - while (lines--) - { - /* process dots to image buffer */ - gfx_render(gfx.bufferStart, scd.regs[0x62>>1].w); - - /* increment image buffer start index for next line (8 pixels/line) */ - gfx.bufferStart += 8; - } - } -} diff --git a/waterbox/gpgx/core/cd_hw/gfx.h b/waterbox/gpgx/core/cd_hw/gfx.h deleted file mode 100644 index 18240bb0a9..0000000000 --- a/waterbox/gpgx/core/cd_hw/gfx.h +++ /dev/null @@ -1,115 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * CD graphics processor - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#ifndef _CD_GFX_ -#define _CD_GFX_ - -#define gfx scd.gfx_hw - -typedef struct -{ - uint32 cycles; /* current cycles count for graphics operation */ - uint32 cyclesPerLine; /* current graphics operation timings */ - uint32 dotMask; /* stamp map size mask */ - uint16 *tracePtr; /* trace vector pointer */ - uint16 *mapPtr; /* stamp map table base address */ - uint8 stampShift; /* stamp pixel shift value (related to stamp size) */ - uint8 mapShift; /* stamp map table shift value (related to stamp map size) */ - uint16 bufferOffset; /* image buffer column offset */ - uint32 bufferStart; /* image buffer start index */ - uint16 lut_offset[0x8000]; /* Cell Image -> WORD-RAM offset lookup table (1M Mode) */ - uint8 lut_prio[4][0x100][0x100]; /* WORD-RAM data writes priority lookup table */ - uint8 lut_pixel[0x200]; /* Graphics operation dot offset lookup table */ - uint8 lut_cell[0x100]; /* Graphics operation stamp offset lookup table */ -} gfx_t; - - -/***************************************************************/ -/* WORD-RAM DMA interfaces (1M & 2M modes) */ -/***************************************************************/ -extern void word_ram_0_dma_w(unsigned int words); -extern void word_ram_1_dma_w(unsigned int words); -extern void word_ram_2M_dma_w(unsigned int words); - -/***************************************************************/ -/* WORD-RAM 0 & 1 CPU interfaces (1M mode) */ -/***************************************************************/ -extern unsigned int word_ram_0_read16(unsigned int address); -extern unsigned int word_ram_1_read16(unsigned int address); -extern void word_ram_0_write16(unsigned int address, unsigned int data); -extern void word_ram_1_write16(unsigned int address, unsigned int data); -extern unsigned int word_ram_0_read8(unsigned int address); -extern unsigned int word_ram_1_read8(unsigned int address); -extern void word_ram_0_write8(unsigned int address, unsigned int data); -extern void word_ram_1_write8(unsigned int address, unsigned int data); - -/***************************************************************/ -/* WORD-RAM 0 & 1 DOT image SUB-CPU interface (1M mode) */ -/***************************************************************/ -extern unsigned int dot_ram_0_read16(unsigned int address); -extern unsigned int dot_ram_1_read16(unsigned int address); -extern void dot_ram_0_write16(unsigned int address, unsigned int data); -extern void dot_ram_1_write16(unsigned int address, unsigned int data); -extern unsigned int dot_ram_0_read8(unsigned int address); -extern unsigned int dot_ram_1_read8(unsigned int address); -extern void dot_ram_0_write8(unsigned int address, unsigned int data); -extern void dot_ram_1_write8(unsigned int address, unsigned int data); - - -/***************************************************************/ -/* WORD-RAM 0 & 1 CELL image MAIN-CPU interface (1M mode) */ -/***************************************************************/ -extern unsigned int cell_ram_0_read16(unsigned int address); -extern unsigned int cell_ram_1_read16(unsigned int address); -extern void cell_ram_0_write16(unsigned int address, unsigned int data); -extern void cell_ram_1_write16(unsigned int address, unsigned int data); -extern unsigned int cell_ram_0_read8(unsigned int address); -extern unsigned int cell_ram_1_read8(unsigned int address); -extern void cell_ram_0_write8(unsigned int address, unsigned int data); -extern void cell_ram_1_write8(unsigned int address, unsigned int data); - - -/***************************************************************/ -/* Rotation / Scaling operation (2M mode) */ -/***************************************************************/ -extern void gfx_init(void); -extern void gfx_reset(void); - -extern void gfx_start(unsigned int base, int cycles); -extern void gfx_update(int cycles); - -#endif diff --git a/waterbox/gpgx/core/cd_hw/pcm.c b/waterbox/gpgx/core/cd_hw/pcm.c deleted file mode 100644 index a74c836ef0..0000000000 --- a/waterbox/gpgx/core/cd_hw/pcm.c +++ /dev/null @@ -1,406 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * PCM sound chip (315-5476A) (RF5C164 compatible) - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#include "shared.h" - -#define PCM_SCYCLES_RATIO (384 * 4) - -#define pcm scd.pcm_hw - -static blip_t* blip[2]; - -void pcm_init(blip_t* left, blip_t* right) -{ - /* number of SCD master clocks run per second */ - double mclk = snd.frame_rate ? (SCYCLES_PER_LINE * (vdp_pal ? 313 : 262) * snd.frame_rate) : SCD_CLOCK; - - /* PCM chips is running at original rate and is synchronized with SUB-CPU */ - /* Chip output is resampled to desired rate using Blip Buffer. */ - blip[0] = left; - blip[1] = right; - blip_set_rates(left, mclk / PCM_SCYCLES_RATIO, snd.sample_rate); - blip_set_rates(right, mclk / PCM_SCYCLES_RATIO, snd.sample_rate); -} - -void pcm_reset(void) -{ - /* reset chip & clear external RAM */ - memset(&pcm, 0, sizeof(pcm_t)); - - /* reset default bank */ - pcm.bank = pcm.ram; - - /* reset channels stereo panning */ - pcm.chan[0].pan = 0xff; - pcm.chan[1].pan = 0xff; - pcm.chan[2].pan = 0xff; - pcm.chan[3].pan = 0xff; - pcm.chan[4].pan = 0xff; - pcm.chan[5].pan = 0xff; - pcm.chan[6].pan = 0xff; - pcm.chan[7].pan = 0xff; - - /* reset master clocks counter */ - pcm.cycles = 0; - - /* clear blip buffers */ - blip_clear(blip[0]); - blip_clear(blip[1]); -} - - -void pcm_run(unsigned int length) -{ -#ifdef LOG_PCM - error("[%d][%d]run %d PCM samples (from %d)\n", v_counter, s68k.cycles, length, pcm.cycles); -#endif - /* check if PCM chip is running */ - if (pcm.enabled) - { - int i, j, l, r; - - /* generate PCM samples */ - for (i=0; i> 11) & 0xffff]; - - /* loop data ? */ - if (data == 0xff) - { - /* reset WAVE RAM address */ - pcm.chan[j].addr = pcm.chan[j].ls.w << 11; - - /* read again from WAVE RAM address */ - data = pcm.ram[pcm.chan[j].ls.w]; - } - else - { - /* increment WAVE RAM address */ - pcm.chan[j].addr += pcm.chan[j].fd.w; - } - - /* infinite loop should not output any data */ - if (data != 0xff) - { - /* check sign bit (output centered around 0) */ - if (data & 0x80) - { - /* PCM data is positive */ - data = data & 0x7f; - } - else - { - /* PCM data is negative */ - data = -(data & 0x7f); - } - - /* multiply PCM data with ENV & stereo PAN data then add to L/R outputs (14.5 fixed point) */ - l += ((data * pcm.chan[j].env * (pcm.chan[j].pan & 0x0F)) >> 5); - r += ((data * pcm.chan[j].env * (pcm.chan[j].pan >> 4)) >> 5); - } - } - } - - /* limiter */ - if (l < -32768) l = -32768; - else if (l > 32767) l = 32767; - if (r < -32768) r = -32768; - else if (r > 32767) r = 32767; - - /* check if PCM left output changed */ - if (pcm.out[0] != l) - { - blip_add_delta_fast(blip[0], i, l-pcm.out[0]); - pcm.out[0] = l; - } - - /* check if PCM right output changed */ - if (pcm.out[1] != r) - { - blip_add_delta_fast(blip[1], i, r-pcm.out[1]); - pcm.out[1] = r; - } - } - } - else - { - /* check if PCM left output changed */ - if (pcm.out[0]) - { - blip_add_delta_fast(blip[0], 0, -pcm.out[0]); - pcm.out[0] = 0; - } - - /* check if PCM right output changed */ - if (pcm.out[1]) - { - blip_add_delta_fast(blip[1], 0, -pcm.out[1]); - pcm.out[1] = 0; - } - } - - /* end of blip buffer frame */ - blip_end_frame(blip[0], length); - blip_end_frame(blip[1], length); - - /* update PCM master clock counter */ - pcm.cycles += length * PCM_SCYCLES_RATIO; -} - -void pcm_update(unsigned int samples) -{ - /* get number of internal clocks (samples) needed */ - unsigned int clocks = blip_clocks_needed(blip[0], samples); - - /* run PCM chip */ - if (clocks > 0) - { - pcm_run(clocks); - } - - /* reset PCM master clocks counter */ - pcm.cycles = 0; -} - -void pcm_write(unsigned int address, unsigned char data) -{ - /* synchronize PCM chip with SUB-CPU */ - int clocks = s68k.cycles - pcm.cycles; - if (clocks > 0) - { - /* number of internal clocks (samples) to run */ - clocks = (clocks + PCM_SCYCLES_RATIO - 1) / PCM_SCYCLES_RATIO; - pcm_run(clocks); - } - -#ifdef LOG_PCM - error("[%d][%d]PCM write %x -> 0x%02x (%X)\n", v_counter, s68k.cycles, address, data, s68k.pc); -#endif - - /* external RAM is mapped to $1000-$1FFF */ - if (address >= 0x1000) - { - /* 4K bank access */ - pcm.bank[address & 0xfff] = data; - return; - } - - /* internal area si mapped to $0000-$0FFF */ - switch (address) - { - case 0x00: /* ENV register */ - { - /* update channel ENV multiplier */ - pcm.chan[pcm.index].env = data; - return; - } - - case 0x01: /* PAN register */ - { - /* update channel stereo panning value */ - pcm.chan[pcm.index].pan = data; - return; - } - - case 0x02: /* FD register (LSB) */ - { - /* update channel WAVE RAM address increment LSB */ - pcm.chan[pcm.index].fd.byte.l = data; - return; - } - - case 0x03: /* FD register (MSB) */ - { - /* update channel WAVE RAM address increment MSB */ - pcm.chan[pcm.index].fd.byte.h = data; - return; - } - - case 0x04: /* LS register (LSB) */ - { - /* update channel WAVE RAM loop address LSB */ - pcm.chan[pcm.index].ls.byte.l = data; - return; - } - - case 0x05: /* LS register (MSB) */ - { - /* update channel WAVE RAM loop address MSB */ - pcm.chan[pcm.index].ls.byte.h = data; - return; - } - - case 0x06: /* ST register */ - { - /* update channel WAVE RAM start address (16.11 fixed point) */ - pcm.chan[pcm.index].st = data << (8 + 11); - - /* reload WAVE RAM address if channel is OFF */ - if (!(pcm.status & (1 << pcm.index))) - { - pcm.chan[pcm.index].addr = pcm.chan[pcm.index].st; - } - return; - } - - case 0x07: /* CTRL register */ - { - if (data & 0x40) - { - /* channel selection (0-7) */ - pcm.index = data & 0x07; - } - else - { - /* external RAM bank selection (16 x 4K) */ - pcm.bank = &pcm.ram[(data & 0x0f) << 12]; - } - - /* update PCM chip status (bit 7) */ - pcm.enabled = data & 0x80; - return; - } - - case 0x08: /* ON/OFF register */ - { - /* update PCM channels status */ - pcm.status = ~data; - - /* reload WAVE RAM address pointers when channels are OFF */ - if (data & 0x01) pcm.chan[0].addr = pcm.chan[0].st; - if (data & 0x02) pcm.chan[1].addr = pcm.chan[1].st; - if (data & 0x04) pcm.chan[2].addr = pcm.chan[2].st; - if (data & 0x08) pcm.chan[3].addr = pcm.chan[3].st; - if (data & 0x10) pcm.chan[4].addr = pcm.chan[4].st; - if (data & 0x20) pcm.chan[5].addr = pcm.chan[5].st; - if (data & 0x40) pcm.chan[6].addr = pcm.chan[6].st; - if (data & 0x80) pcm.chan[7].addr = pcm.chan[7].st; - return; - } - - default: - { - /* illegal access */ - return; - } - } -} - -unsigned char pcm_read(unsigned int address) -{ - /* synchronize PCM chip with SUB-CPU */ - int clocks = s68k.cycles - pcm.cycles; - if (clocks > 0) - { - /* number of internal clocks (samples) to run */ - clocks = (clocks + PCM_SCYCLES_RATIO - 1) / PCM_SCYCLES_RATIO; - pcm_run(clocks); - } - -#ifdef LOG_PCM - error("[%d][%d]PCM read (%X)\n", v_counter, s68k.cycles, address, s68k.pc); -#endif - - /* external RAM (TODO: verify if possible to read, some docs claim it's not !) */ - if (address >= 0x1000) - { - /* 4K bank access */ - return pcm.bank[address & 0xfff]; - } - - /* read WAVE RAM address pointers */ - if ((address >= 0x10) && (address < 0x20)) - { - int index = (address >> 1) & 0x07; - - if (address & 1) - { - return (pcm.chan[index].addr >> (11 + 8)) & 0xff; - } - else - { - return (pcm.chan[index].addr >> 11) & 0xff; - } - } - - /* illegal access */ - return 0xff; -} - -void pcm_ram_dma_w(unsigned int words) -{ - uint16 data; - - /* CDC buffer source address */ - uint16 src_index = cdc.dac.w & 0x3ffe; - - /* PCM-RAM destination address*/ - uint16 dst_index = (scd.regs[0x0a>>1].w << 2) & 0xffe; - - /* update DMA destination address */ - scd.regs[0x0a>>1].w += (words >> 1); - - /* update DMA source address */ - cdc.dac.w += (words << 1); - - /* DMA transfer */ - while (words--) - { - /* read 16-bit word from CDC buffer */ - data = *(uint16 *)(cdc.ram + src_index); - - /* write 16-bit word to PCM RAM (endianness does not matter since PCM RAM is always accessed as byte)*/ - *(uint16 *)(pcm.bank + dst_index) = data ; - - /* increment CDC buffer source address */ - src_index = (src_index + 2) & 0x3ffe; - - /* increment PCM-RAM destination address */ - dst_index = (dst_index + 2) & 0xffe; - } -} - diff --git a/waterbox/gpgx/core/cd_hw/pcm.h b/waterbox/gpgx/core/cd_hw/pcm.h deleted file mode 100644 index 19641c1e37..0000000000 --- a/waterbox/gpgx/core/cd_hw/pcm.h +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * PCM sound chip (315-5476A) (RF5C164 compatible) - * - * Copyright (C) 2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#ifndef _CD_PCM_ -#define _CD_PCM_ - -#include "blip_buf.h" - -/* PCM channel */ -typedef struct -{ - uint32 addr; /* current Wave RAM address (16.11 fixed point) */ - uint32 st; /* Wave RAM start address (16.11 fixed point) */ - reg16_t ls; /* Wave RAM loop address ($0000-$ffff) */ - reg16_t fd; /* Wave RAM address increment (5.11 fixed point) */ - uint8 env; /* enveloppe multiplier */ - uint8 pan; /* stereo panning */ -} chan_t; - -/* PCM sound chip */ -typedef struct -{ - chan_t chan[8]; /* PCM channels 1-8 */ - int16 out[2]; /* previous PCM stereo output */ - uint8 *bank; /* external RAM bank pointer */ - uint8 enabled; /* PCM chip ON/OFF status */ - uint8 status; /* channels ON/OFF status */ - uint8 index; /* current channel index */ - uint8 ram[0x10000]; /* 64k external RAM */ - uint32 cycles; -} pcm_t; - -/* Function prototypes */ -extern void pcm_init(blip_t* left, blip_t* right); -extern void pcm_reset(void); -extern int pcm_context_save(uint8 *state); -extern int pcm_context_load(uint8 *state); -extern void pcm_update(unsigned int samples); -extern void pcm_write(unsigned int address, unsigned char data); -extern unsigned char pcm_read(unsigned int address); -extern void pcm_ram_dma_w(unsigned int words); - -#endif diff --git a/waterbox/gpgx/core/cd_hw/scd.c b/waterbox/gpgx/core/cd_hw/scd.c deleted file mode 100644 index ce963d9b69..0000000000 --- a/waterbox/gpgx/core/cd_hw/scd.c +++ /dev/null @@ -1,1408 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Mega CD / Sega CD hardware - * - * Copyright (C) 2012-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -/*--------------------------------------------------------------------------*/ -/* Unused area (return open bus data, i.e prefetched instruction word) */ -/*--------------------------------------------------------------------------*/ -static unsigned int s68k_read_bus_8(unsigned int address) -{ -#ifdef LOGERROR - error("[SUB 68k] Unused read8 %08X (%08X)\n", address, s68k.pc); -#endif - address = s68k.pc | (address & 1); - return READ_BYTE(s68k.memory_map[((address)>>16)&0xff].base, (address) & 0xffff); -} - -static unsigned int s68k_read_bus_16(unsigned int address) -{ -#ifdef LOGERROR - error("[SUB 68k] Unused read16 %08X (%08X)\n", address, s68k.pc); -#endif - address = s68k.pc; - return *(uint16 *)(s68k.memory_map[((address)>>16)&0xff].base + ((address) & 0xffff)); -} - -static void s68k_unused_8_w(unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error("[SUB 68k] Unused write8 %08X = %02X (%08X)\n", address, data, s68k.pc); -#endif -} - -static void s68k_unused_16_w(unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error("[SUB 68k] Unused write16 %08X = %04X (%08X)\n", address, data, s68k.pc); -#endif -} - -/*--------------------------------------------------------------------------*/ -/* PRG-RAM DMA access */ -/*--------------------------------------------------------------------------*/ -void prg_ram_dma_w(unsigned int words) -{ - uint16 data; - - /* CDC buffer source address */ - uint16 src_index = cdc.dac.w & 0x3ffe; - - /* PRG-RAM destination address*/ - uint32 dst_index = (scd.regs[0x0a>>1].w << 3) & 0x7fffe; - - /* update DMA destination address */ - scd.regs[0x0a>>1].w += (words >> 2); - - /* update DMA source address */ - cdc.dac.w += (words << 1); - - /* check PRG-RAM write protected area */ - if (dst_index < (scd.regs[0x02>>1].byte.h << 9)) - { - return; - } - - /* DMA transfer */ - while (words--) - { - /* read 16-bit word from CDC buffer */ - data = *(uint16 *)(cdc.ram + src_index); - -#ifdef LSB_FIRST - /* source data is stored in big endian format */ - data = ((data >> 8) | (data << 8)) & 0xffff; -#endif - - /* write 16-bit word to PRG-RAM */ - *(uint16 *)(scd.prg_ram + dst_index) = data ; - - /* increment CDC buffer source address */ - src_index = (src_index + 2) & 0x3ffe; - - /* increment PRG-RAM destination address */ - dst_index = (dst_index + 2) & 0x7fffe; - } -} - -/*--------------------------------------------------------------------------*/ -/* PRG-RAM write protected area */ -/*--------------------------------------------------------------------------*/ -static void prg_ram_write_byte(unsigned int address, unsigned int data) -{ - address &= 0x7ffff; - if (address >= (scd.regs[0x02>>1].byte.h << 9)) - { - WRITE_BYTE(scd.prg_ram, address, data); - return; - } -#ifdef LOGERROR - error("[SUB 68k] PRG-RAM protected write8 %08X = %02X (%08X)\n", address, data, s68k.pc); -#endif -} - -static void prg_ram_write_word(unsigned int address, unsigned int data) -{ - address &= 0x7fffe; - if (address >= (scd.regs[0x02>>1].byte.h << 9)) - { - *(uint16 *)(scd.prg_ram + address) = data; - return; - } -#ifdef LOGERROR - error("[SUB 68k] PRG-RAM protected write16 %08X = %02X (%08X)\n", address, data, s68k.pc); -#endif -} - -/*--------------------------------------------------------------------------*/ -/* internal backup RAM (8KB) */ -/*--------------------------------------------------------------------------*/ -static unsigned int bram_read_byte(unsigned int address) -{ - /* LSB only */ - if (address & 1) - { - return scd.bram[(address >> 1) & 0x1fff]; - } - - return 0xff; -} - -static unsigned int bram_read_word(unsigned int address) -{ - return (scd.bram[(address >> 1) & 0x1fff] | 0xff00); -} - -static void bram_write_byte(unsigned int address, unsigned int data) -{ - /* LSB only */ - if (address & 1) - { - scd.bram[(address >> 1) & 0x1fff] = data; - } -} - -static void bram_write_word(unsigned int address, unsigned int data) -{ - scd.bram[(address >> 1) & 0x1fff] = data & 0xff; -} - -/*--------------------------------------------------------------------------*/ -/* PCM chip & Gate-Array area */ -/*--------------------------------------------------------------------------*/ - -static void s68k_poll_detect(unsigned int reg_mask) -{ - /* detect SUB-CPU register polling */ - if (s68k.poll.detected & reg_mask) - { - if (s68k.cycles <= s68k.poll.cycle) - { - if (s68k.pc == s68k.poll.pc) - { - /* SUB-CPU polling confirmed ? */ - if (s68k.poll.detected & 1) - { - /* idle SUB-CPU until register is modified */ - s68k.cycles = s68k.cycle_end; - s68k.stopped = reg_mask; -#ifdef LOG_SCD - error("s68k stopped from %d cycles\n", s68k.cycles); -#endif - } - else - { - /* confirm SUB-CPU polling */ - s68k.poll.detected |= 1; - s68k.poll.cycle = s68k.cycles + 392; - } - } - return; - } - } - else - { - /* set SUB-CPU register access flag */ - s68k.poll.detected = reg_mask; - } - - /* reset SUB-CPU polling detection */ - s68k.poll.cycle = s68k.cycles + 392; - s68k.poll.pc = s68k.pc; -} - -static void s68k_poll_sync(unsigned int reg_mask) -{ - /* relative MAIN-CPU cycle counter */ - unsigned int cycles = (s68k.cycles * MCYCLES_PER_LINE) / SCYCLES_PER_LINE; - - /* sync MAIN-CPU with SUB-CPU */ - if (!m68k.stopped) - { - m68k_run(cycles); - } - - /* MAIN-CPU idle on register polling ? */ - if (m68k.stopped & reg_mask) - { - /* sync MAIN-CPU with SUB-CPU */ - m68k.cycles = cycles; - - /* restart MAIN-CPU */ - m68k.stopped = 0; -#ifdef LOG_SCD - error("m68k started from %d cycles\n", cycles); -#endif - } - - /* clear CPU register access flags */ - s68k.poll.detected &= ~reg_mask; - m68k.poll.detected &= ~reg_mask; -} - -static unsigned int scd_read_byte(unsigned int address) -{ - /* PCM area (8K) is mirrored into $FF0000-$FF7FFF */ - if (address < 0xff8000) - { - /* get /LDS only */ - if (address & 1) - { - return pcm_read((address >> 1) & 0x1fff); - } - - return s68k_read_bus_8(address); - } - -#ifdef LOG_SCD - error("[%d][%d]read byte CD register %X (%X)\n", v_counter, s68k.cycles, address, s68k.pc); -#endif - - /* Memory Mode */ - if (address == 0xff8003) - { - s68k_poll_detect(1<<0x03); - return scd.regs[0x03>>1].byte.l; - } - - /* MAIN-CPU communication flags */ - if (address == 0xff800e) - { - s68k_poll_detect(1<<0x0e); - return scd.regs[0x0e>>1].byte.h; - } - - /* CDC transfer status */ - if (address == 0xff8004) - { - s68k_poll_detect(1<<0x04); - return scd.regs[0x04>>1].byte.h; - } - - /* GFX operation status */ - if (address == 0xff8058) - { - s68k_poll_detect(1<<0x08); - return scd.regs[0x58>>1].byte.h; - } - - /* CDC register data (controlled by BIOS, byte access only ?) */ - if (address == 0xff8007) - { - unsigned int data = cdc_reg_r(); -#ifdef LOG_CDC - error("CDC register %X read 0x%02X (%X)\n", scd.regs[0x04>>1].byte.l & 0x0F, data, s68k.pc); -#endif - return data; - } - - /* LED status */ - if (address == 0xff8000) - { - /* register $00 is reserved for MAIN-CPU, we use $06 instead */ - return scd.regs[0x06>>1].byte.h; - } - - /* RESET status */ - if (address == 0xff8001) - { - /* always return 1 */ - return 0x01; - } - - /* Font data */ - if ((address >= 0xff8050) && (address <= 0xff8056)) - { - /* shifted 4-bit input (xxxx00) */ - uint8 bits = (scd.regs[0x4e>>1].w >> (((address & 6) ^ 6) << 1)) << 2; - - /* color code */ - uint8 code = scd.regs[0x4c>>1].byte.l; - - /* 16-bit font data (4 pixels = 16 bits) */ - uint16 data = (code >> (bits & 4)) & 0x0f; - - bits = bits >> 1; - data = data | (((code >> (bits & 4)) << 4) & 0xf0); - - bits = bits >> 1; - data = data | (((code >> (bits & 4)) << 8) & 0xf00); - - bits = bits >> 1; - data = data | (((code >> (bits & 4)) << 12) & 0xf000); - - return (address & 1) ? (data & 0xff) : (data >> 8); - } - - /* MAIN-CPU communication words */ - if ((address & 0x1f0) == 0x10) - { - s68k_poll_detect(1 << (address & 0x1f)); - } - - /* default registers */ - if (address & 1) - { - /* register LSB */ - return scd.regs[(address >> 1) & 0xff].byte.l; - } - - /* register MSB */ - return scd.regs[(address >> 1) & 0xff].byte.h; -} - -static unsigned int scd_read_word(unsigned int address) -{ - /* PCM area (8K) is mirrored into $FF0000-$FF7FFF */ - if (address < 0xff8000) - { - /* get /LDS only */ - return pcm_read((address >> 1) & 0x1fff); - } - -#ifdef LOG_SCD - error("[%d][%d]read word CD register %X (%X)\n", v_counter, s68k.cycles, address, s68k.pc); -#endif - - /* Memory Mode */ - if (address == 0xff8002) - { - s68k_poll_detect(1<<0x03); - return scd.regs[0x03>>1].w; - } - - /* CDC host data (word access only ?) */ - if (address == 0xff8008) - { - return cdc_host_r(); - } - - /* LED & RESET status */ - if (address == 0xff8000) - { - /* register $00 is reserved for MAIN-CPU, we use $06 instead */ - return scd.regs[0x06>>1].w; - } - - /* Stopwatch counter (word access only ?) */ - if (address == 0xff800c) - { - /* cycle-accurate counter value */ - return (scd.regs[0x0c>>1].w + ((s68k.cycles - scd.stopwatch) / TIMERS_SCYCLES_RATIO)) & 0xfff; - } - - /* Font data */ - if ((address >= 0xff8050) && (address <= 0xff8056)) - { - /* shifted 4-bit input (xxxx00) */ - uint8 bits = (scd.regs[0x4e>>1].w >> (((address & 6) ^ 6) << 1)) << 2; - - /* color code */ - uint8 code = scd.regs[0x4c>>1].byte.l; - - /* 16-bit font data (4 pixels = 16 bits) */ - uint16 data = (code >> (bits & 4)) & 0x0f; - - bits = bits >> 1; - data = data | (((code >> (bits & 4)) << 4) & 0xf0); - - bits = bits >> 1; - data = data | (((code >> (bits & 4)) << 8) & 0xf00); - - bits = bits >> 1; - data = data | (((code >> (bits & 4)) << 12) & 0xf000); - - return data; - } - - /* MAIN-CPU communication words */ - if ((address & 0x1f0) == 0x10) - { - if (!m68k.stopped) - { - /* relative MAIN-CPU cycle counter */ - unsigned int cycles = (s68k.cycles * MCYCLES_PER_LINE) / SCYCLES_PER_LINE; - - /* sync MAIN-CPU with SUB-CPU (Mighty Morphin Power Rangers) */ - m68k_run(cycles); - } - - s68k_poll_detect(3 << (address & 0x1e)); - } - - /* default registers */ - return scd.regs[(address >> 1) & 0xff].w; -} - -INLINE void word_ram_switch(uint8 mode) -{ - int i; - uint16 *ptr1 = (uint16 *)(scd.word_ram_2M); - uint16 *ptr2 = (uint16 *)(scd.word_ram[0]); - uint16 *ptr3 = (uint16 *)(scd.word_ram[1]); - - if (mode & 0x04) - { - /* 2M -> 1M mode */ - for (i=0; i<0x10000; i++) - { - *ptr2++=*ptr1++; - *ptr3++=*ptr1++; - } - } - else - { - /* 1M -> 2M mode */ - for (i=0; i<0x10000; i++) - { - *ptr1++=*ptr2++; - *ptr1++=*ptr3++; - } - - /* allow Word-RAM access from both CPU in 2M mode (fixes sync issues in Mortal Kombat) */ - for (i=scd.cartridge.boot+0x20; i> 1) & 0x1fff, data); - return; - } - - s68k_unused_8_w(address, data); - return; - } - -#ifdef LOG_SCD - error("[%d][%d]write byte CD register %X -> 0x%02x (%X)\n", v_counter, s68k.cycles, address, data, s68k.pc); -#endif - - /* Gate-Array registers */ - switch (address & 0x1ff) - { - case 0x00: /* LED status */ - { - /* register $00 is reserved for MAIN-CPU, use $06 instead */ - scd.regs[0x06 >> 1].byte.h = data; - return; - } - - case 0x01: /* RESET status */ - { - /* RESET bit cleared ? */ - if (!(data & 0x01)) - { - /* reset CD hardware */ - scd_reset(0); - } - return; - } - - case 0x03: /* Memory Mode */ - { - s68k_poll_sync(1<<0x03); - - /* detect MODE & RET bits modifications */ - if ((data ^ scd.regs[0x03 >> 1].byte.l) & 0x05) - { - int i; - - /* MODE bit */ - if (data & 0x04) - { - /* 2M->1M mode switch */ - if (!(scd.regs[0x03 >> 1].byte.l & 0x04)) - { - /* re-arrange Word-RAM banks */ - word_ram_switch(0x04); - } - - /* RET bit in 1M Mode */ - if (data & 0x01) - { - /* Word-RAM 1 assigned to MAIN-CPU */ - for (i=scd.cartridge.boot+0x20; i> 1].byte.l = (scd.regs[0x02 >> 1].byte.l & ~0x1f) | (data & 0x1d); - return; - } - else - { - /* 1M->2M mode switch */ - if (scd.regs[0x02 >> 1].byte.l & 0x04) - { - /* re-arrange Word-RAM banks */ - word_ram_switch(0x00); - - /* RET bit set during 1M mode ? */ - data |= ~scd.dmna & 0x01; - - /* check if RET bit is cleared */ - if (!(data & 0x01)) - { - /* set DMNA bit */ - data |= 0x02; - - /* mask BK0-1 bits (MAIN-CPU side only) */ - scd.regs[0x02 >> 1].byte.l = (scd.regs[0x02 >> 1].byte.l & ~0x1f) | (data & 0x1f); - return; - } - } - - /* RET bit set in 2M mode */ - if (data & 0x01) - { - /* Word-RAM is returned to MAIN-CPU */ - scd.dmna = 0; - - /* clear DMNA bit */ - scd.regs[0x02 >> 1].byte.l = (scd.regs[0x02 >> 1].byte.l & ~0x1f) | (data & 0x1d); - return; - } - } - } - - /* update PM0-1 & MODE bits */ - scd.regs[0x02 >> 1].byte.l = (scd.regs[0x02 >> 1].byte.l & ~0x1c) | (data & 0x1c); - return; - } - - case 0x07: /* CDC register write */ - { - cdc_reg_w(data); - return; - } - - case 0x0e: /* SUB-CPU communication flags */ - case 0x0f: /* !LWR is ignored (Space Ace, Dragon's Lair) */ - { - s68k_poll_sync(1<<0x0f); - scd.regs[0x0f>>1].byte.l = data; - return; - } - - case 0x31: /* Timer */ - { - /* reload timer (one timer clock = 384 CPU cycles) */ - scd.timer = data * TIMERS_SCYCLES_RATIO; - - /* only non-zero data starts timer, writing zero stops it */ - if (data) - { - /* adjust regarding current CPU cycle */ - scd.timer += (s68k.cycles - scd.cycles); - } - - scd.regs[0x30>>1].byte.l = data; - return; - } - - case 0x33: /* Interrupts */ - { - /* update register value before updating interrupts */ - scd.regs[0x32>>1].byte.l = data; - - /* update IEN2 flag */ - scd.regs[0x00].byte.h = (scd.regs[0x00].byte.h & 0x7f) | ((data & 0x04) << 5); - - /* clear level 1 interrupt if disabled ("Batman Returns" option menu) */ - scd.pending &= ~(data & 0x02); - - /* update IRQ level */ - s68k_update_irq((scd.pending & data) >> 1); - return; - } - - case 0x37: /* CDD control (controlled by BIOS, byte access only ?) */ - { - /* CDD communication started ? */ - if ((data & 0x04) && !(scd.regs[0x37>>1].byte.l & 0x04)) - { - /* reset CDD cycle counter */ - cdd.cycles = (scd.cycles - s68k.cycles) * 3; - - /* set pending interrupt level 4 */ - scd.pending |= (1 << 4); - - /* update IRQ level if interrupt is enabled */ - if (scd.regs[0x32>>1].byte.l & 0x10) - { - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - - scd.regs[0x37>>1].byte.l = data; - return; - } - - default: - { - /* SUB-CPU communication words */ - if ((address & 0x1f0) == 0x20) - { - s68k_poll_sync(1 << ((address - 0x10) & 0x1f)); - } - /* MAIN-CPU communication words */ - else if ((address & 0x1f0) == 0x10) - { - /* read-only (Sega Classic Arcade Collection) */ - return; - } - - /* default registers */ - if (address & 1) - { - /* register LSB */ - scd.regs[(address >> 1) & 0xff].byte.l = data; - return; - } - - /* register MSB */ - scd.regs[(address >> 1) & 0xff].byte.h = data; - return; - } - } -} - -static void scd_write_word(unsigned int address, unsigned int data) -{ - /* PCM area (8K) is mirrored into $FF0000-$FF7FFF */ - if (address < 0xff8000) - { - /* get /LDS only */ - pcm_write((address >> 1) & 0x1fff, data); - return; - } - -#ifdef LOG_SCD - error("[%d][%d]write word CD register %X -> 0x%04x (%X)\n", v_counter, s68k.cycles, address, data, s68k.pc); -#endif - - /* Gate-Array registers */ - switch (address & 0x1fe) - { - case 0x00: /* LED status & RESET */ - { - /* only update LED status (register $00 is reserved for MAIN-CPU, use $06 instead) */ - scd.regs[0x06>>1].byte.h = data >> 8; - - /* RESET bit cleared ? */ - if (!(data & 0x01)) - { - /* reset CD hardware */ - scd_reset(0); - } - return; - } - - case 0x02: /* Memory Mode */ - { - s68k_poll_sync(1<<0x03); - - /* detect MODE & RET bits modifications */ - if ((data ^ scd.regs[0x03>>1].byte.l) & 0x05) - { - int i; - - /* MODE bit */ - if (data & 0x04) - { - /* 2M->1M mode switch */ - if (!(scd.regs[0x03 >> 1].byte.l & 0x04)) - { - /* re-arrange Word-RAM banks */ - word_ram_switch(0x04); - } - - /* RET bit in 1M Mode */ - if (data & 0x01) - { - /* Word-RAM 1 assigned to MAIN-CPU */ - for (i=scd.cartridge.boot+0x20; i>1].byte.l = (scd.regs[0x03>>1].byte.l & ~0x1f) | (data & 0x1d); - return; - } - else - { - /* 1M->2M mode switch */ - if (scd.regs[0x03>>1].byte.l & 0x04) - { - /* re-arrange Word-RAM banks */ - word_ram_switch(0x00); - - /* RET bit set during 1M mode ? */ - data |= ~scd.dmna & 0x01; - - /* check if RET bit is cleared */ - if (!(data & 0x01)) - { - /* set DMNA bit */ - data |= 0x02; - - /* mask BK0-1 bits (MAIN-CPU side only) */ - scd.regs[0x03>>1].byte.l = (scd.regs[0x03>>1].byte.l & ~0x1f) | (data & 0x1f); - return; - } - } - - /* RET bit set in 2M mode */ - if (data & 0x01) - { - /* Word-RAM is returned to MAIN-CPU */ - scd.dmna = 0; - - /* clear DMNA bit */ - scd.regs[0x03>>1].byte.l = (scd.regs[0x03>>1].byte.l & ~0x1f) | (data & 0x1d); - return; - } - } - } - - /* update PM0-1 & MODE bits */ - scd.regs[0x03>>1].byte.l = (scd.regs[0x03>>1].byte.l & ~0x1c) | (data & 0x1c); - return; - } - - case 0x06: /* CDC register write */ - { - cdc_reg_w(data); - return; - } - - case 0x0c: /* Stopwatch (word access only) */ - { - /* synchronize the counter with SUB-CPU */ - int ticks = (s68k.cycles - scd.stopwatch) / TIMERS_SCYCLES_RATIO; - scd.stopwatch += (ticks * TIMERS_SCYCLES_RATIO); - - /* any writes clear the counter */ - scd.regs[0x0c>>1].w = 0; - return; - } - - case 0x0e: /* CPU Communication flags */ - { - s68k_poll_sync(1<<0x0f); - - /* D8-D15 ignored -> only SUB-CPU flags are updated */ - scd.regs[0x0f>>1].byte.l = data & 0xff; - return; - } - - case 0x30: /* Timer */ - { - /* LSB only */ - data &= 0xff; - - /* reload timer (one timer clock = 384 CPU cycles) */ - scd.timer = data * TIMERS_SCYCLES_RATIO; - - /* only non-zero data starts timer, writing zero stops it */ - if (data) - { - /* adjust regarding current CPU cycle */ - scd.timer += (s68k.cycles - scd.cycles); - } - - scd.regs[0x30>>1].byte.l = data; - return; - } - - case 0x32: /* Interrupts */ - { - /* LSB only */ - data &= 0xff; - - /* update register value before updating interrupts */ - scd.regs[0x32>>1].byte.l = data; - - /* update IEN2 flag */ - scd.regs[0x00].byte.h = (scd.regs[0x00].byte.h & 0x7f) | ((data & 0x04) << 5); - - /* clear pending level 1 interrupt if disabled ("Batman Returns" option menu) */ - scd.pending &= ~(data & 0x02); - - /* update IRQ level */ - s68k_update_irq((scd.pending & data) >> 1); - return; - } - - case 0x4a: /* CDD command 9 (controlled by BIOS, word access only ?) */ - { - scd.regs[0x4a>>1].w = 0; - cdd_process(); -#ifdef LOG_CDD - error("CDD command: %02x %02x %02x %02x %02x %02x %02x %02x\n",scd.regs[0x42>>1].byte.h, scd.regs[0x42>>1].byte.l, scd.regs[0x44>>1].byte.h, scd.regs[0x44>>1].byte.l, scd.regs[0x46>>1].byte.h, scd.regs[0x46>>1].byte.l, scd.regs[0x48>>1].byte.h, scd.regs[0x48>>1].byte.l); - error("CDD status: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",scd.regs[0x38>>1].byte.h, scd.regs[0x38>>1].byte.l, scd.regs[0x3a>>1].byte.h, scd.regs[0x3a>>1].byte.l, scd.regs[0x3c>>1].byte.h, scd.regs[0x3c>>1].byte.l, scd.regs[0x3e>>1].byte.h, scd.regs[0x3e>>1].byte.l, scd.regs[0x40>>1].byte.h, scd.regs[0x40>>1].byte.l); -#endif - break; - } - - case 0x66: /* Trace vector base address */ - { - scd.regs[0x66>>1].w = data; - - /* start GFX operation */ - gfx_start(data, s68k.cycles); - return; - } - - default: - { - /* SUB-CPU communication words */ - if ((address & 0x1f0) == 0x20) - { - s68k_poll_sync(3 << ((address - 0x10) & 0x1e)); - } - /* MAIN-CPU communication words */ - else if ((address & 0x1f0) == 0x10) - { - /* read-only (Sega Classic Arcade Collection) */ - return; - } - - /* default registers */ - scd.regs[(address >> 1) & 0xff].w = data; - return; - } - } -} - - -void scd_init(void) -{ - int i; - - scd.prg_ram = malloc(0x80000); - scd.word_ram[0] = malloc(0x20000); - scd.word_ram[1] = malloc(0x20000); - scd.word_ram_2M = malloc(0x40000); - scd.bram = malloc(0x2000); - - /****************************************************************/ - /* MAIN-CPU low memory map ($000000-$7FFFFF) */ - /****************************************************************/ - - /* 0x00: boot from CD (Mode 2), 0x40: boot from cartridge (Mode 1) */ - uint8 base = scd.cartridge.boot; - - /* $400000-$7FFFFF (resp. $000000-$3FFFFF): cartridge area (4MB) */ - cd_cart_init(); - - /* $000000-$1FFFFF (resp. $400000-$5FFFFF): CD memory area */ - for (i=base; i>1].w = 0x0002; - scd.regs[0x02>>1].w = 0x0001; - - /* 2M mode */ - word_ram_switch(0); - - /* reset PRG-RAM banking on MAIN-CPU side */ - for (i=scd.cartridge.boot+0x02; i>1], 0, sizeof(scd.regs) - 4); - } - - /* SUB-CPU side default values */ - scd.regs[0x08>>1].w = 0xffff; - scd.regs[0x0a>>1].w = 0xffff; - scd.regs[0x36>>1].w = 0x0100; - scd.regs[0x40>>1].w = 0x000f; - scd.regs[0x42>>1].w = 0xffff; - scd.regs[0x44>>1].w = 0xffff; - scd.regs[0x46>>1].w = 0xffff; - scd.regs[0x48>>1].w = 0xffff; - scd.regs[0x4a>>1].w = 0xffff; - - /* RESET register always return 1 (register $06 is unused by both sides, it is used for SUB-CPU first register) */ - scd.regs[0x06>>1].byte.l = 0x01; - - /* Reset Timer & Stopwatch counters */ - scd.timer = 0; - scd.stopwatch = 0; - - /* Reset frame cycle counter */ - scd.cycles = 0; - - /* Clear pending interrupts */ - scd.pending = 0; - - /* Clear CPU polling detection */ - memset(&m68k.poll, 0, sizeof(m68k.poll)); - memset(&s68k.poll, 0, sizeof(s68k.poll)); - - /* Reset CD hardware */ - cdd_reset(); - cdc_reset(); - gfx_reset(); - pcm_reset(); -} - -void scd_update(unsigned int cycles) -{ - /* update CDC DMA transfer */ - if (cdc.dma_w) - { - cdc_dma_update(); - } - - /* run both CPU in sync until end of line */ - do - { - m68k_run(cycles); - s68k_run(scd.cycles + SCYCLES_PER_LINE); - } - while ((m68k.cycles < cycles) || (s68k.cycles < (scd.cycles + SCYCLES_PER_LINE))); - - /* increment CD hardware cycle counter */ - scd.cycles += SCYCLES_PER_LINE; - - /* CDD processing at 75Hz (one clock = 12500000/75 = 500000/3 CPU clocks) */ - cdd.cycles += (SCYCLES_PER_LINE * 3); - if (cdd.cycles >= (500000 * 4)) - { - /* reload CDD cycle counter */ - cdd.cycles -= (500000 * 4); - - /* update CDD sector */ - cdd_update(); - - /* check if a new CDD command has been processed */ - if (!(scd.regs[0x4a>>1].byte.l & 0xf0)) - { - /* reset CDD command wait flag */ - scd.regs[0x4a>>1].byte.l = 0xf0; - - /* pending level 4 interrupt */ - scd.pending |= (1 << 4); - - /* level 4 interrupt enabled */ - if (scd.regs[0x32>>1].byte.l & 0x10) - { - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - } - - /* Timer */ - if (scd.timer) - { - /* decrement timer */ - scd.timer -= SCYCLES_PER_LINE; - if (scd.timer <= 0) - { - /* reload timer (one timer clock = 384 CPU cycles) */ - scd.timer += (scd.regs[0x30>>1].byte.l * TIMERS_SCYCLES_RATIO); - - /* level 3 interrupt enabled ? */ - if (scd.regs[0x32>>1].byte.l & 0x08) - { - /* trigger level 3 interrupt */ - scd.pending |= (1 << 3); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - } - - /* GFX processing */ - if (scd.regs[0x58>>1].byte.h & 0x80) - { - /* update graphics operation if running */ - gfx_update(scd.cycles); - } -} - -void scd_end_frame(unsigned int cycles) -{ - /* run Stopwatch until end of frame */ - int ticks = (cycles - scd.stopwatch) / TIMERS_SCYCLES_RATIO; - scd.regs[0x0c>>1].w = (scd.regs[0x0c>>1].w + ticks) & 0xfff; - - /* adjust Stopwatch counter for next frame (can be negative) */ - scd.stopwatch += (ticks * TIMERS_SCYCLES_RATIO) - cycles; - - /* adjust SUB-CPU & GPU cycle counters for next frame */ - s68k.cycles -= cycles; - gfx.cycles -= cycles; - - /* reset CPU registers polling */ - m68k.poll.cycle = 0; - s68k.poll.cycle = 0; -} - -int scd_68k_irq_ack(int level) -{ -#ifdef LOG_SCD - error("INT ack level %d (%X)\n", level, s68k.pc); -#endif - -#if 0 - /* level 5 interrupt is normally acknowledged by CDC */ - if (level != 5) -#endif - { - /* clear pending interrupt flag */ - scd.pending &= ~(1 << level); - - /* level 2 interrupt acknowledge */ - if (level == 2) - { - /* clear IFL2 flag */ - scd.regs[0x00].byte.h &= ~0x01; - } - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - - return M68K_INT_ACK_AUTOVECTOR; -} diff --git a/waterbox/gpgx/core/cd_hw/scd.h b/waterbox/gpgx/core/cd_hw/scd.h deleted file mode 100644 index 286760c892..0000000000 --- a/waterbox/gpgx/core/cd_hw/scd.h +++ /dev/null @@ -1,88 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Mega CD / Sega CD hardware - * - * Copyright (C) 2012-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ -#ifndef _HW_SCD_ -#define _HW_SCD_ - -#include "cdd.h" -#include "cdc.h" -#include "gfx.h" -#include "pcm.h" -#include "cd_cart.h" - -#define scd ext.cd_hw - -/* 5000000 SCD clocks/s = ~3184 clocks/line with a Master Clock of 53.693175 MHz */ -/* This would be slightly (~30 clocks) more on PAL systems because of the slower */ -/* Master Clock (53.203424 MHz) but not enough to really care about since clocks */ -/* are not running in sync anyway. */ -#define SCD_CLOCK 50000000 -#define SCYCLES_PER_LINE 3184 - -/* Timer & Stopwatch clocks divider */ -#define TIMERS_SCYCLES_RATIO (384 * 4) - -/* CD hardware */ -typedef struct -{ - cd_cart_t cartridge; /* ROM/RAM Cartridge */ - uint8 *bootrom; /* 128K internal BOOT ROM */ - uint8 *prg_ram; /* 512K PRG-RAM */ - uint8 *word_ram[2]; /* 2 x 128K Word RAM (1M mode) */ - uint8 *word_ram_2M; /* 256K Word RAM (2M mode) */ - uint8 *bram; /* 8K Backup RAM */ - reg16_t regs[0x100]; /* 256 x 16-bit ASIC registers */ - uint32 cycles; /* Master clock counter */ - int32 stopwatch; /* Stopwatch counter */ - int32 timer; /* Timer counter */ - uint8 pending; /* Pending interrupts */ - uint8 dmna; /* Pending DMNA write status */ - gfx_t gfx_hw; /* Graphics processor */ - cdc_t cdc_hw; /* CD data controller */ - cdd_t cdd_hw; /* CD drive processor */ - pcm_t pcm_hw; /* PCM chip */ -} cd_hw_t; - -/* Function prototypes */ -extern void scd_init(void); -extern void scd_reset(int hard); -extern void scd_update(unsigned int cycles); -extern void scd_end_frame(unsigned int cycles); -extern int scd_68k_irq_ack(int level); -extern void prg_ram_dma_w(unsigned int words); - -#endif diff --git a/waterbox/gpgx/core/genesis.c b/waterbox/gpgx/core/genesis.c deleted file mode 100644 index 49203c7d53..0000000000 --- a/waterbox/gpgx/core/genesis.c +++ /dev/null @@ -1,540 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Internal Hardware & Bus controllers - * - * Support for SG-1000, Mark-III, Master System, Game Gear, Mega Drive & Mega CD hardware - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -external_t ext; /* External Hardware (Cartridge, CD unit, ...) */ -uint8 boot_rom[0x800]; /* Genesis BOOT ROM */ -uint8 work_ram[0x10000]; /* 68K RAM */ -uint8 zram[0x2000]; /* Z80 RAM */ -uint32 zbank; /* Z80 bank window address */ -uint8 zstate; /* Z80 bus state (d0 = BUSACK, d1 = /RESET) */ -uint8 pico_current; /* PICO current page */ - -uint8 tmss[4]; /* TMSS security register */ - -/*--------------------------------------------------------------------------*/ -/* Init, reset, shutdown functions */ -/*--------------------------------------------------------------------------*/ - -void gen_init(void) -{ - int i; - - /* initialize Z80 */ - z80_init(0,z80_irq_callback); - - /* 8-bit / 16-bit modes */ - if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) - { - /* initialize main 68k */ - m68k_init(); - m68k.aerr_enabled = config.addr_error; - - /* initialize main 68k memory map */ - - /* $800000-$DFFFFF : illegal access by default */ - for (i=0x80; i<0xe0; i++) - { - m68k.memory_map[i].base = work_ram; /* for VDP DMA */ - m68k.memory_map[i].read8 = m68k_lockup_r_8; - m68k.memory_map[i].read16 = m68k_lockup_r_16; - m68k.memory_map[i].write8 = m68k_lockup_w_8; - m68k.memory_map[i].write16 = m68k_lockup_w_16; - zbank_memory_map[i].read = zbank_lockup_r; - zbank_memory_map[i].write = zbank_lockup_w; - } - - /* $C0xxxx, $C8xxxx, $D0xxxx, $D8xxxx : VDP ports */ - for (i=0xc0; i<0xe0; i+=8) - { - m68k.memory_map[i].read8 = vdp_read_byte; - m68k.memory_map[i].read16 = vdp_read_word; - m68k.memory_map[i].write8 = vdp_write_byte; - m68k.memory_map[i].write16 = vdp_write_word; - zbank_memory_map[i].read = zbank_read_vdp; - zbank_memory_map[i].write = zbank_write_vdp; - } - - /* $E00000-$FFFFFF : Work RAM (64k) */ - for (i=0xe0; i<0x100; i++) - { - m68k.memory_map[i].base = work_ram; - m68k.memory_map[i].read8 = NULL; - m68k.memory_map[i].read16 = NULL; - m68k.memory_map[i].write8 = NULL; - m68k.memory_map[i].write16 = NULL; - - /* Z80 can ONLY write to 68k RAM, not read it */ - zbank_memory_map[i].read = zbank_unused_r; - zbank_memory_map[i].write = NULL; - } - - if (system_hw == SYSTEM_PICO) - { - /* additional registers mapped to $800000-$80FFFF */ - m68k.memory_map[0x80].read8 = pico_read_byte; - m68k.memory_map[0x80].read16 = pico_read_word; - m68k.memory_map[0x80].write8 = m68k_unused_8_w; - m68k.memory_map[0x80].write16 = m68k_unused_16_w; - - /* there is no I/O area (Notaz) */ - m68k.memory_map[0xa1].read8 = m68k_read_bus_8; - m68k.memory_map[0xa1].read16 = m68k_read_bus_16; - m68k.memory_map[0xa1].write8 = m68k_unused_8_w; - m68k.memory_map[0xa1].write16 = m68k_unused_16_w; - - /* initialize page index (closed) */ - pico_current = 0; - } - else - { - /* $A10000-$A1FFFF : I/O & Control registers */ - m68k.memory_map[0xa1].read8 = ctrl_io_read_byte; - m68k.memory_map[0xa1].read16 = ctrl_io_read_word; - m68k.memory_map[0xa1].write8 = ctrl_io_write_byte; - m68k.memory_map[0xa1].write16 = ctrl_io_write_word; - zbank_memory_map[0xa1].read = zbank_read_ctrl_io; - zbank_memory_map[0xa1].write = zbank_write_ctrl_io; - - /* initialize Z80 memory map */ - /* $0000-$3FFF is mapped to Z80 RAM (8K mirrored) */ - /* $4000-$FFFF is mapped to hardware but Z80 PC should never point there */ - for (i=0; i<64; i++) - { - z80_readmap[i] = &zram[(i & 7) << 10]; - } - - /* initialize Z80 memory handlers */ - z80_writemem = z80_memory_w; - z80_readmem = z80_memory_r; - - /* initialize Z80 port handlers */ - z80_writeport = z80_unused_port_w; - z80_readport = z80_unused_port_r; - } - - /* $000000-$7FFFFF : external hardware area */ - if (system_hw == SYSTEM_MCD) - { - /* initialize SUB-CPU */ - s68k_init(); - - /* initialize CD hardware */ - scd_init(); - } - else - { - /* Cartridge hardware */ - md_cart_init(); - } - } - else - { - /* initialize cartridge hardware & Z80 memory handlers */ - sms_cart_init(); - - /* initialize Z80 ports handlers */ - switch (system_hw) - { - /* Master System compatibility mode */ - case SYSTEM_PBC: - { - z80_writeport = z80_md_port_w; - z80_readport = z80_md_port_r; - break; - } - - /* Game Gear hardware */ - case SYSTEM_GG: - case SYSTEM_GGMS: - { - /* initialize cartridge hardware & Z80 memory handlers */ - sms_cart_init(); - - /* initialize Z80 ports handlers */ - z80_writeport = z80_gg_port_w; - z80_readport = z80_gg_port_r; - break; - } - - /* Master SYstem hardware */ - case SYSTEM_SMS: - case SYSTEM_SMS2: - { - z80_writeport = z80_ms_port_w; - z80_readport = z80_ms_port_r; - break; - } - - /* Mark-III hardware */ - case SYSTEM_MARKIII: - { - z80_writeport = z80_m3_port_w; - z80_readport = z80_m3_port_r; - break; - } - - /* SG-1000 hardware */ - case SYSTEM_SG: - { - z80_writeport = z80_sg_port_w; - z80_readport = z80_sg_port_r; - break; - } - } - } -} - -void gen_reset(int hard_reset) -{ - /* System Reset */ - if (hard_reset) - { - /* clear RAM (TODO: use random bit patterns for all systems, like on real hardware) */ - memset(work_ram, 0x00, sizeof (work_ram)); - memset(zram, 0x00, sizeof (zram)); - } - else - { - /* reset YM2612 (on hard reset, this is done by sound_reset) */ - fm_reset(0); - } - - /* 68k & Z80 could be anywhere in VDP frame (Bonkers, Eternal Champions, X-Men 2) */ - m68k.cycles = Z80.cycles = 0; //(uint32)((MCYCLES_PER_LINE * lines_per_frame) * ((double)rand() / (double)RAND_MAX)); - - /* 68k cycles should be a multiple of 7 */ - m68k.cycles = (m68k.cycles / 7) * 7; - - /* Z80 cycles should be a multiple of 15 */ - Z80.cycles = (Z80.cycles / 15) * 15; - - /* 8-bit / 16-bit modes */ - if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) - { - if (system_hw == SYSTEM_MCD) - { - /* FRES is only asserted on Power ON */ - if (hard_reset) - { - /* reset CD hardware */ - scd_reset(1); - } - } - - /* reset MD cartridge hardware */ - md_cart_reset(hard_reset); - - /* Z80 bus is released & Z80 is reseted */ - m68k.memory_map[0xa0].read8 = m68k_read_bus_8; - m68k.memory_map[0xa0].read16 = m68k_read_bus_16; - m68k.memory_map[0xa0].write8 = m68k_unused_8_w; - m68k.memory_map[0xa0].write16 = m68k_unused_16_w; - zstate = 0; - - /* assume default bank is $000000-$007FFF */ - zbank = 0; - - /* TMSS support */ - if ((config.bios & 1) && (system_hw == SYSTEM_MD) && hard_reset) - { - int i; - - /* clear TMSS register */ - memset(tmss, 0x00, sizeof(tmss)); - - /* VDP access is locked by default */ - for (i=0xc0; i<0xe0; i+=8) - { - m68k.memory_map[i].read8 = m68k_lockup_r_8; - m68k.memory_map[i].read16 = m68k_lockup_r_16; - m68k.memory_map[i].write8 = m68k_lockup_w_8; - m68k.memory_map[i].write16 = m68k_lockup_w_16; - zbank_memory_map[i].read = zbank_lockup_r; - zbank_memory_map[i].write = zbank_lockup_w; - } - - /* check if BOOT ROM is loaded */ - if (system_bios & SYSTEM_MD) - { - /* save default cartridge slot mapping */ - cart.base = m68k.memory_map[0].base; - - /* BOOT ROM is mapped at $000000-$0007FF */ - m68k.memory_map[0].base = boot_rom; - } - } - - /* reset MAIN-CPU */ - m68k_pulse_reset(); - } - else - { - /* RAM state at power-on is undefined on some systems */ - if ((system_hw == SYSTEM_MARKIII) || ((system_hw & SYSTEM_SMS) && (region_code == REGION_JAPAN_NTSC))) - { - /* some korean games rely on RAM to be initialized with values different from $00 or $ff */ - memset(work_ram, 0xf0, sizeof(work_ram)); - } - - /* reset cartridge hardware */ - sms_cart_reset(); - - /* halt 68k (/VRES is forced low) */ - m68k_pulse_halt(); - } - - /* reset Z80 */ - z80_reset(); - - /* some Z80 registers need to be initialized on Power ON */ - if (hard_reset) - { - /* Power Base Converter specific */ - if (system_hw == SYSTEM_PBC) - { - /* startup code logic (verified on real hardware): */ - /* 21 01 E1 : LD HL, $E101 - 25 -- -- : DEC H - F9 -- -- : LD SP,HL - C7 -- -- : RST $00 - 01 01 -- : LD BC, $xx01 - */ - Z80.hl.w.l = 0xE001; - Z80.sp.w.l = 0xDFFF; - Z80.r = 4; - } - - /* Master System specific (when BIOS is disabled) */ - else if ((system_hw & SYSTEM_SMS) && (!(config.bios & 1) || !(system_bios & SYSTEM_SMS))) - { - /* usually done by BIOS & required by some SMS games that don't initialize SP */ - Z80.sp.w.l = 0xDFFF; - } - } -} - -/*-----------------------------------------------------------------------*/ -/* OS ROM / TMSS register control functions (Genesis mode) */ -/*-----------------------------------------------------------------------*/ - -void gen_tmss_w(unsigned int offset, unsigned int data) -{ - int i; - - /* write TMSS register */ - WRITE_WORD(tmss, offset, data); - - /* VDP requires "SEGA" value to be written in TMSS register */ - if (memcmp((char *)tmss, "SEGA", 4) == 0) - { - for (i=0xc0; i<0xe0; i+=8) - { - m68k.memory_map[i].read8 = vdp_read_byte; - m68k.memory_map[i].read16 = vdp_read_word; - m68k.memory_map[i].write8 = vdp_write_byte; - m68k.memory_map[i].write16 = vdp_write_word; - zbank_memory_map[i].read = zbank_read_vdp; - zbank_memory_map[i].write = zbank_write_vdp; - } - } - else - { - for (i=0xc0; i<0xe0; i+=8) - { - m68k.memory_map[i].read8 = m68k_lockup_r_8; - m68k.memory_map[i].read16 = m68k_lockup_r_16; - m68k.memory_map[i].write8 = m68k_lockup_w_8; - m68k.memory_map[i].write16 = m68k_lockup_w_16; - zbank_memory_map[i].read = zbank_lockup_r; - zbank_memory_map[i].write = zbank_lockup_w; - } - } -} - -void gen_bankswitch_w(unsigned int data) -{ - /* check if BOOT ROM is loaded */ - if (system_bios & SYSTEM_MD) - { - if (data & 1) - { - /* enable cartridge ROM */ - m68k.memory_map[0].base = cart.base; - } - else - { - /* enable internal BOOT ROM */ - m68k.memory_map[0].base = boot_rom; - } - } -} - -unsigned int gen_bankswitch_r(void) -{ - /* check if BOOT ROM is loaded */ - if (system_bios & SYSTEM_MD) - { - return (m68k.memory_map[0].base == cart.base); - } - - return 0xff; -} - - -/*-----------------------------------------------------------------------*/ -/* Z80 Bus controller chip functions (Genesis mode) */ -/* ----------------------------------------------------------------------*/ - -void gen_zbusreq_w(unsigned int data, unsigned int cycles) -{ - if (data) /* !ZBUSREQ asserted */ - { - /* check if Z80 is going to be stopped */ - if (zstate == 1) - { - /* resynchronize with 68k */ - z80_run(cycles); - - /* enable 68k access to Z80 bus */ - m68k.memory_map[0xa0].read8 = z80_read_byte; - m68k.memory_map[0xa0].read16 = z80_read_word; - m68k.memory_map[0xa0].write8 = z80_write_byte; - m68k.memory_map[0xa0].write16 = z80_write_word; - } - - /* update Z80 bus status */ - zstate |= 2; - } - else /* !ZBUSREQ released */ - { - /* check if Z80 is going to be restarted */ - if (zstate == 3) - { - /* resynchronize with 68k */ - Z80.cycles = cycles; - - /* disable 68k access to Z80 bus */ - m68k.memory_map[0xa0].read8 = m68k_read_bus_8; - m68k.memory_map[0xa0].read16 = m68k_read_bus_16; - m68k.memory_map[0xa0].write8 = m68k_unused_8_w; - m68k.memory_map[0xa0].write16 = m68k_unused_16_w; - } - - /* update Z80 bus status */ - zstate &= 1; - } -} - -void gen_zreset_w(unsigned int data, unsigned int cycles) -{ - if (data) /* !ZRESET released */ - { - /* check if Z80 is going to be restarted */ - if (zstate == 0) - { - /* resynchronize with 68k */ - Z80.cycles = cycles; - - /* reset Z80 & YM2612 */ - z80_reset(); - fm_reset(cycles); - } - - /* check if 68k access to Z80 bus is granted */ - else if (zstate == 2) - { - /* enable 68k access to Z80 bus */ - m68k.memory_map[0xa0].read8 = z80_read_byte; - m68k.memory_map[0xa0].read16 = z80_read_word; - m68k.memory_map[0xa0].write8 = z80_write_byte; - m68k.memory_map[0xa0].write16 = z80_write_word; - - /* reset Z80 & YM2612 */ - z80_reset(); - fm_reset(cycles); - } - - /* update Z80 bus status */ - zstate |= 1; - } - else /* !ZRESET asserted */ - { - /* check if Z80 is going to be stopped */ - if (zstate == 1) - { - /* resynchronize with 68k */ - z80_run(cycles); - } - - /* check if 68k had access to Z80 bus */ - else if (zstate == 3) - { - /* disable 68k access to Z80 bus */ - m68k.memory_map[0xa0].read8 = m68k_read_bus_8; - m68k.memory_map[0xa0].read16 = m68k_read_bus_16; - m68k.memory_map[0xa0].write8 = m68k_unused_8_w; - m68k.memory_map[0xa0].write16 = m68k_unused_16_w; - } - - /* stop YM2612 */ - fm_reset(cycles); - - /* update Z80 bus status */ - zstate &= 2; - } -} - -void gen_zbank_w (unsigned int data) -{ - zbank = ((zbank >> 1) | ((data & 1) << 23)) & 0xFF8000; -} - - -/*-----------------------------------------------------------------------*/ -/* Z80 interrupt callback */ -/* ----------------------------------------------------------------------*/ - -int z80_irq_callback (int param) -{ - return -1; -} diff --git a/waterbox/gpgx/core/genesis.h b/waterbox/gpgx/core/genesis.h deleted file mode 100644 index 99d9a8c96b..0000000000 --- a/waterbox/gpgx/core/genesis.h +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Internal hardware & Bus controllers - * - * Support for SG-1000, Mark-III, Master System, Game Gear, Mega Drive & Mega CD hardware - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _GENESIS_H_ -#define _GENESIS_H_ - -#include "md_cart.h" -#include "sms_cart.h" -#include "scd.h" - -/* External Hardware */ -typedef struct -{ - md_cart_t md_cart; - cd_hw_t cd_hw; -} external_t; - -/* Global variables */ -extern external_t ext; -extern uint8 boot_rom[0x800]; -extern uint8 work_ram[0x10000]; -extern uint8 zram[0x2000]; -extern uint32 zbank; -extern uint8 zstate; -extern uint8 pico_current; - -/* Function prototypes */ -extern void gen_init(void); -extern void gen_reset(int hard_reset); -extern void gen_tmss_w(unsigned int offset, unsigned int data); -extern void gen_bankswitch_w(unsigned int data); -extern unsigned int gen_bankswitch_r(void); -extern void gen_zbusreq_w(unsigned int state, unsigned int cycles); -extern void gen_zreset_w(unsigned int state, unsigned int cycles); -extern void gen_zbank_w(unsigned int state); -extern int z80_irq_callback(int param); - -#endif /* _GEN_H_ */ - diff --git a/waterbox/gpgx/core/hvc.h b/waterbox/gpgx/core/hvc.h deleted file mode 100644 index ebda28562e..0000000000 --- a/waterbox/gpgx/core/hvc.h +++ /dev/null @@ -1,652 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * HV Counters - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -/* - NTSC, 256x192 - ------------- - - Lines Description - - 192 Active display - 24 Bottom border - 3 Bottom blanking - 3 Vertical blanking - 13 Top blanking - 27 Top border - - V counter values - 00-DA, D5-FF - - NTSC, 256x224 - ------------- - - Lines Description - - 224 Active display - 8 Bottom border - 3 Bottom blanking - 3 Vertical blanking - 13 Top blanking - 11 Top border - - V counter values - 00-EA, E5-FF - - NTSC, 256x240 - ------------- - - This mode does not work on NTSC machines. All 30 rows of the name table are - displayed, there is no border, blanking, or retrace period, and the next - frame starts after the 30th row. The display rolls continuously though it - can be stabilized by adjusting the vertical hold. - - V counter values - 00-FF, 00-06 - - PAL, 256x192 - ------------ - - Lines Description - - 192 Active display - 48 Bottom border - 3 Bottom blanking - 3 Vertical blanking - 13 Top blanking - 54 Top border - - V counter values - 00-F2, BA-FF - - PAL, 256x224 - ------------ - - Lines Description - - 224 Active display - 32 Bottom border - 3 Bottom blanking - 3 Vertical blanking - 13 Top blanking - 38 Top border - - V counter values - 00-FF, 00-02, CA-FF - - PAL, 256x240 - ------------ - - Lines Description - - 240 Active display - 24 Bottom border - 3 Bottom blanking - 3 Vertical blanking - 13 Top blanking - 30 Top border - - V counter values - 00-FF, 00-0A, D2-FF - - Here are some details about what the different screen areas look like, - useful if you are emulating overscan or if you want to have a 'virtual' - vertical hold control in your emulator. - - Active display - Where the display generated by the VDP goes. - Bottom border - Filled with border color from VDP register #7. - Bottom blanking - Filled with a light black color. (like display was blanked) - Vertical sync - Filled with a pure black color. (like display was turned off) - Top blanking - Filled with a light black color. (like display was blanked) - Top border - Filled with the border color from VDP register #7. - -*/ -#ifndef _HVC_H_ -#define _HVC_H_ - -/***************************************************************/ -/* */ -/* H-counter timings in H32 & H40 modes (starts from HINT) */ -/* */ -/* There are normally 3420 Master Clock counts per raster line */ -/* with 342 dots/line in H32 mode & 420 dots/line in H40 mode. */ -/* */ -/* in H32 mode, dot clock is divided from MCLK (MCLK/10) */ -/* in H40 mode, dot clock is divided from EDCLK (EDCLK/2) */ -/* */ -/* EDCLK (external dot clock ?) is generated outside the VDP: */ -/* When HSYNC is low, EDCLK varies between MCLK/10 and MCLK/8, */ -/* otherwise it is fixed to MCLK/8. */ -/* */ -/* Notes: */ -/* (1) VDP register 12 bit 7 enables use of EDCLK when set */ -/* (2) VDP register 12 bit 5 forces HSYNC high when set */ -/* (3) H32 or H40 mode is selected with VDP register $0C bit 0 */ -/* and can be set independently from above settings */ -/* */ -/* On real hardware, non-standard timings can be obtained by */ -/* modifying those settings (for example, dot clock can be set */ -/* to MCLK/8 in both modes if HSYNC output is disabled and if */ -/* EDCLK input is enabled in H32 mode / disabled in H40 mode), */ -/* resulting in slightly different H-counter and VDP timings. */ -/* */ -/* Genesis Plus GX timings always assume standard settings i.e */ -/* HSYNC output always enabled and EDCLK input enabled in H40 */ -/* mode / disabled in H32 mode. */ -/* */ -/***************************************************************/ - -static const uint8 cycle2hc32[3420] = -{ - /* end of active display (14 pixels -> 140 Mcycles) , H interrupt triggered, Vcounter increment */ - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, - - /* right border (14 pixels -> 140 Mcycles) */ - 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, - - /* right blanking (9 pixels -> 90 Mcycles), VDP status HBLANK flag set */ - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, - 0xe9, 0xe9, 0xe9, 0xe9, - 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, - 0xea, 0xea, 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, - 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, - 0xec, 0xec, - - /* horizontal sync (26 pixels -> 260 Mcycles) */ - 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, - 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, - 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, - 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, - 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, - 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, - 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, - 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, - 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, - 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, - 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, - - /* left blanking (24 pixels -> 240 Mcycles) */ - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, - 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, - 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, - 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, - 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, - 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, - 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, - 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - /* V interrupt triggered (MD mode) */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - - /* left border (13 pixels -> 130 Mcycles) , VDP status HBLANK flag cleared */ - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, - 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, - 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, - - /* remaining active display (252 pixels -> 2520 Mcycles) */ - - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, - 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, - 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, - 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, - 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, - 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, - 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, - 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, - 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, - 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, - 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, - 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, - 0x1a, 0x1a, 0x1a, 0x1a, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, - 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x1d, 0x1d, 0x1d, - 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, - 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x21, - 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, - 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, - 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, - 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, - 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, - 0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, - 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, - 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, - 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, - 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, - 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, - 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x31, - 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, - 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, - 0x32, 0x32, 0x32, 0x32, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, - 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x35, 0x35, 0x35, - 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, - 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, - 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, - 0x3a, 0x3a, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, - 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, - 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3d, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, - 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, - 0x3e, 0x3e, 0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, - 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, - 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x45, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, - 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, - 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, - 0x4a, 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, - 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, - 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4d, - 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, - 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x51, - 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, - 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, - 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, - 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, - 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, - 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, - 0x5a, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, - 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, - 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5d, 0x5d, 0x5d, 0x5d, - 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, - 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, - 0x5e, 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, - 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, - 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, - 0x62, 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, - 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, - 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65, 0x65, 0x65, 0x65, - 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, - 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, - 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, - 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, - 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, - 0x6a, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, - 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, - 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, - 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, - 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x71, - 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, - 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, - 0x72, 0x72, 0x72, 0x72, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, - 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, - 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, - 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, - 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, - 0x76, 0x76, 0x76, 0x76, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, - 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79, - 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84 -}; - -static const uint8 cycle2hc40[3420] = -{ - /* end of active display (16 pixels -> 128 Mcycles) , HINT triggered , Vcounter increment */ - 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, - 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, - 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, - 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, - 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, - 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, - - /* right border (14 pixels -> 112 Mcycles) */ - 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, - 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, - 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, - 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, - 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, - 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, - 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, - - /* right blanking (9 pixels -> 72 Mcycles) , VDP status HBLANK flag set */ - 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, - 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, - 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, - 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - - /* horizontal sync (32 pixels -> 313 Mcycles) */ - 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, - 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, - 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, - 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, - 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, - 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb, - 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, - 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, - 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, - 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee, - 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, - 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, - 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, - 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, - 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, - 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, - 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, - 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, - 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, - 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, - 0xf6, - - /* left blanking (32 pixels -> 259 Mcycles) */ - 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, - 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, - 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, - 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, - 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, - 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, - 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, - 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, - 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - /* Vertical Interrupt triggered */ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, - - /* left border (13 pixels -> 104 Mcycles) , VDP status HBLANK flag cleared */ - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, - 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, 0x0a, 0x0a, - 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0b, 0x0b, 0x0b, - 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0c, 0x0c, 0x0c, 0x0c, - 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, - - /* remaining active display (304 pixels -> 2432 Mcycles) */ - 0x0d, 0x0d, 0x0d, 0x0d, - 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, - 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, - 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, - 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, - 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, - 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, - 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, - 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17, - 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x18, 0x18, - 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x19, 0x19, - 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1a, 0x1a, 0x1a, 0x1a, - 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1b, 0x1b, 0x1b, 0x1b, - 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x1d, 0x1d, 0x1d, - 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1e, 0x1e, 0x1e, 0x1e, - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f, - 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x21, - 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22, 0x22, - 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x23, - 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x24, - 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, - 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x26, 0x26, 0x26, 0x26, - 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27, 0x27, - 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x28, 0x28, 0x28, 0x28, - 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, - 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2a, 0x2a, 0x2a, 0x2a, - 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2c, 0x2c, 0x2c, 0x2c, - 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x2e, 0x2e, - 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2f, 0x2f, 0x2f, 0x2f, - 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x30, 0x30, 0x30, 0x30, - 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x31, - 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x32, - 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x34, - 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x35, 0x35, 0x35, - 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x37, 0x37, - 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x39, - 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x3a, 0x3a, 0x3a, 0x3a, - 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3b, - 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3c, 0x3c, - 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3d, 0x3d, 0x3d, 0x3d, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3e, 0x3e, 0x3e, 0x3e, - 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3f, 0x3f, 0x3f, 0x3f, - 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x40, 0x40, 0x40, 0x40, - 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, - 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, - 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, - 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x44, 0x44, 0x44, 0x44, - 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x45, - 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x46, 0x46, 0x46, 0x46, - 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x47, - 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x48, 0x48, 0x48, 0x48, - 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, - 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4a, 0x4a, - 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4b, - 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c, 0x4c, 0x4c, - 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4d, - 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4e, 0x4e, 0x4e, 0x4e, - 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4f, 0x4f, 0x4f, 0x4f, - 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x4f, 0x50, 0x50, 0x50, 0x50, - 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x51, - 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, - 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, - 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, - 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x56, 0x56, 0x56, - 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, - 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, 0x58, - 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, - 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5a, - 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5b, - 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c, 0x5c, - 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5c, 0x5d, 0x5d, 0x5d, 0x5d, - 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5e, 0x5e, 0x5e, 0x5e, - 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x5f, - 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x60, - 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, - 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x62, - 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, - 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x64, 0x64, 0x64, 0x64, - 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65, 0x65, 0x65, 0x65, - 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, 0x66, - 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x67, - 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, - 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, - 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6a, - 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6b, 0x6b, - 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6b, 0x6c, 0x6c, 0x6c, 0x6c, - 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, - 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6e, - 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, - 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x70, - 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x71, - 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x72, 0x72, 0x72, 0x72, - 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x73, 0x73, 0x73, 0x73, - 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x74, - 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, - 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x76, 0x76, 0x76, 0x76, - 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x77, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x78, - 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79, - 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, - 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, - 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, - 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, - 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7e, - 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, - 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80, - 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, - 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82, - 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83, 0x83, - 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x84, 0x84, 0x84, 0x84, - 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, - 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x86, - 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x87, 0x87, 0x87, 0x87, - 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, - 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, - 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8c, - 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d, 0x8d, 0x8d, - 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, - 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, - 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90, - 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91, - 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92, - 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, - 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94, - 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x95, 0x95, 0x95, 0x95, - 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x96, 0x96, 0x96, 0x96, - 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97, - 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98, 0x98, - 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a, 0x9a, - 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, - 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, - 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, - 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, - 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f, 0x9f, 0x9f, - 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xa0, 0xa0, 0xa0, 0xa0, - 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, - 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, - 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, - 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, - 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4}; - -#endif /* _HVC_H_ */ - diff --git a/waterbox/gpgx/core/input_hw/activator.c b/waterbox/gpgx/core/input_hw/activator.c deleted file mode 100644 index c1f6b425fe..0000000000 --- a/waterbox/gpgx/core/input_hw/activator.c +++ /dev/null @@ -1,134 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Activator support - * - * Copyright (C) 2011-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 State; - uint8 Counter; -} activator[2]; - -void activator_reset(int index) -{ - - activator[index].State = 0x40; - activator[index].Counter = 0; -} - -INLINE unsigned char activator_read(int index) -{ - /* IR sensors 1-16 data (active low) */ - uint16 data = ~input.pad[index << 2]; - - /* D1 = D0 (data is ready) */ - uint8 temp = (activator[index].State & 0x01) << 1; - - switch (activator[index].Counter) - { - case 0: /* x x x x 0 1 0 0 */ - temp |= 0x04; - break; - - case 1: /* x x l1 l2 l3 l4 1 1 */ - temp |= ((data << 2) & 0x3C); - break; - - case 2: /* x x l5 l6 l7 l8 0 0 */ - temp |= ((data >> 2) & 0x3C); - break; - - case 3: /* x x h1 h2 h3 h4 1 1 */ - temp |= ((data >> 6) & 0x3C); - break; - - case 4: /* x x h5 h6 h7 h8 0 0 */ - temp |= ((data >> 10) & 0x3C); - break; - } - - return temp; -} - -INLINE void activator_write(int index, unsigned char data, unsigned char mask) -{ - /* update bits set as output only */ - data = (activator[index].State & ~mask) | (data & mask); - - /* TH transitions */ - if ((activator[index].State ^ data) & 0x40) - { - /* reset sequence cycle */ - activator[index].Counter = 0; - } - else - { - /* D0 transitions */ - if ((activator[index].State ^ data) & 0x01) - { - /* increment sequence cycle */ - if (activator[index].Counter < 4) - { - activator[index].Counter++; - } - } - } - - /* update internal state */ - activator[index].State = data; -} - -unsigned char activator_1_read(void) -{ - return activator_read(0); -} - -unsigned char activator_2_read(void) -{ - return activator_read(1); -} - -void activator_1_write(unsigned char data, unsigned char mask) -{ - activator_write(0, data, mask); -} - -void activator_2_write(unsigned char data, unsigned char mask) -{ - activator_write(1, data, mask); -} diff --git a/waterbox/gpgx/core/input_hw/activator.h b/waterbox/gpgx/core/input_hw/activator.h deleted file mode 100644 index 7158404ac4..0000000000 --- a/waterbox/gpgx/core/input_hw/activator.h +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Activator support - * - * Copyright (C) 2011-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _ACTIVATOR_H_ -#define _ACTIVATOR_H_ - -/* Function prototypes */ -extern void activator_reset(int index); -extern unsigned char activator_1_read(void); -extern unsigned char activator_2_read(void); -extern void activator_1_write(unsigned char data, unsigned char mask); -extern void activator_2_write(unsigned char data, unsigned char mask); - -#endif diff --git a/waterbox/gpgx/core/input_hw/gamepad.c b/waterbox/gpgx/core/input_hw/gamepad.c deleted file mode 100644 index 7657b672ec..0000000000 --- a/waterbox/gpgx/core/input_hw/gamepad.c +++ /dev/null @@ -1,234 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * 3-Buttons & 6-Buttons pad support - * Support for J-CART & 4-Way Play adapters - * - * Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "gamepad.h" - -uint8 pad_index; - - -void gamepad_reset(int port) -{ - /* default state (Gouketsuji Ichizoku / Power Instinct, Samurai Spirits / Samurai Shodown) */ - gamepad[port].State = 0x40; - gamepad[port].Counter = 0; - gamepad[port].Timeout = 0; - - /* reset pad index (4-WayPlay) */ - pad_index = 0; -} - -void gamepad_refresh(int port) -{ - /* 6-buttons pad */ - if (gamepad[port].Timeout++ > 25) - { - gamepad[port].Counter = 0; - gamepad[port].Timeout = 0; - } -} - -INLINE unsigned char gamepad_read(int port) -{ - /* bit 7 is latched, returns current TH state */ - unsigned int data = (gamepad[port].State & 0x40) | 0x3F; - - /* pad value */ - unsigned int val = input.pad[port]; - - /* get current step (TH state) */ - unsigned int step = gamepad[port].Counter | ((data >> 6) & 1); - - switch (step) - { - case 1: /*** First High ***/ - case 3: /*** Second High ***/ - case 5: /*** Third High ***/ - { - /* TH = 1 : ?1CBRLDU */ - data &= ~(val & 0x3F); - break; - } - - case 0: /*** First low ***/ - case 2: /*** Second low ***/ - { - /* TH = 0 : ?0SA00DU */ - data &= ~(val & 0x03); - data &= ~((val >> 2) & 0x30); - data &= ~0x0C; - break; - } - - /* 6buttons specific (taken from gen-hw.txt) */ - /* A 6-button gamepad allows the extra buttons to be read based on how */ - /* many times TH is switched from 1 to 0 (and not 0 to 1). Observe the */ - /* following sequence */ - /* - TH = 1 : ?1CBRLDU 3-button pad return value - TH = 0 : ?0SA00DU 3-button pad return value - TH = 1 : ?1CBRLDU 3-button pad return value - TH = 0 : ?0SA0000 D3-0 are forced to '0' - TH = 1 : ?1CBMXYZ Extra buttons returned in D3-0 - TH = 0 : ?0SA1111 D3-0 are forced to '1' - */ - case 4: /*** Third Low ***/ - { - /* TH = 0 : ?0SA0000 D3-0 are forced to '0'*/ - data &= ~((val >> 2) & 0x30); - data &= ~0x0F; - break; - } - - case 6: /*** Fourth Low ***/ - { - /* TH = 0 : ?0SA1111 D3-0 are forced to '1'*/ - data &= ~((val >> 2) & 0x30); - break; - } - - case 7: /*** Fourth High ***/ - { - /* TH = 1 : ?1CBMXYZ Extra buttons returned in D3-0*/ - data &= ~(val & 0x30); - data &= ~((val >> 8) & 0x0F); - break; - } - } - - return data; -} - -INLINE void gamepad_write(int port, unsigned char data, unsigned char mask) -{ - /* update bits set as output only */ - data = (gamepad[port].State & ~mask) | (data & mask); - - if (input.dev[port] == DEVICE_PAD6B) - { - /* TH=0 to TH=1 transition */ - if (!(gamepad[port].State & 0x40) && (data & 0x40)) - { - gamepad[port].Counter = (gamepad[port].Counter + 2) & 6; - gamepad[port].Timeout = 0; - } - } - - /* update internal state */ - gamepad[port].State = data; -} - - -/*--------------------------------------------------------------------------*/ -/* Default ports handlers */ -/*--------------------------------------------------------------------------*/ - -unsigned char gamepad_1_read(void) -{ - return gamepad_read(0); -} - -unsigned char gamepad_2_read(void) -{ - return gamepad_read(4); -} - -void gamepad_1_write(unsigned char data, unsigned char mask) -{ - gamepad_write(0, data, mask); -} - -void gamepad_2_write(unsigned char data, unsigned char mask) -{ - gamepad_write(4, data, mask); -} - -/*--------------------------------------------------------------------------*/ -/* 4-WayPlay ports handler */ -/*--------------------------------------------------------------------------*/ - -unsigned char wayplay_1_read(void) -{ - if (pad_index < 4) - { - return gamepad_read(pad_index); - } - - /* multitap detection */ - return 0x70; -} - -unsigned char wayplay_2_read(void) -{ - return 0x7F; -} - -void wayplay_1_write(unsigned char data, unsigned char mask) -{ - if (pad_index < 4) - { - gamepad_write(pad_index, data, mask); - } -} - -void wayplay_2_write(unsigned char data, unsigned char mask) -{ - if ((mask & 0x70) == 0x70) - { - pad_index = (data & 0x70) >> 4; - } -} - - -/*--------------------------------------------------------------------------*/ -/* J-Cart memory handlers */ -/*--------------------------------------------------------------------------*/ - -unsigned int jcart_read(unsigned int address) -{ - /* TH2 output read is fixed to zero (fixes Micro Machines 2) */ - return ((gamepad_read(5) & 0x7F) | ((gamepad_read(6) & 0x3F) << 8)); -} - -void jcart_write(unsigned int address, unsigned int data) -{ - gamepad_write(5, (data & 1) << 6, 0x40); - gamepad_write(6, (data & 1) << 6, 0x40); - return; -} diff --git a/waterbox/gpgx/core/input_hw/gamepad.h b/waterbox/gpgx/core/input_hw/gamepad.h deleted file mode 100644 index 7062a41916..0000000000 --- a/waterbox/gpgx/core/input_hw/gamepad.h +++ /dev/null @@ -1,57 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * 3-Buttons & 6-Buttons pad support - * Support for J-CART & 4-Way Play adapters - * - * Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _GAMEPAD_H_ -#define _GAMEPAD_H_ - -/* Function prototypes */ -extern void gamepad_reset(int port); -extern void gamepad_refresh(int port); -extern unsigned char gamepad_1_read(void); -extern unsigned char gamepad_2_read(void); -extern void gamepad_1_write(unsigned char data, unsigned char mask); -extern void gamepad_2_write(unsigned char data, unsigned char mask); -extern unsigned char wayplay_1_read(void); -extern unsigned char wayplay_2_read(void); -extern void wayplay_1_write(unsigned char data, unsigned char mask); -extern void wayplay_2_write(unsigned char data, unsigned char mask); -extern unsigned int jcart_read(unsigned int address); -extern void jcart_write(unsigned int address, unsigned int data); - -#endif diff --git a/waterbox/gpgx/core/input_hw/input.c b/waterbox/gpgx/core/input_hw/input.c deleted file mode 100644 index fa04dfeb33..0000000000 --- a/waterbox/gpgx/core/input_hw/input.c +++ /dev/null @@ -1,374 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Input peripherals support - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "gamepad.h" -#include "lightgun.h" -#include "mouse.h" -#include "activator.h" -#include "xe_a1p.h" -#include "teamplayer.h" -#include "paddle.h" -#include "sportspad.h" -#include "terebi_oekaki.h" - -t_input input; -int old_system[2] = {-1,-1}; - - -void input_init(void) -{ - int i; - int player = 0; - - for (i=0; i> 2); - break; - } - - case DEVICE_XE_A1P: - { - xe_a1p_reset(i); - break; - } - - case DEVICE_PADDLE: - { - paddle_reset(i); - break; - } - - case DEVICE_SPORTSPAD: - { - sportspad_reset(i); - break; - } - - case DEVICE_TEREBI: - { - terebi_oekaki_reset(); - break; - } - - default: - { - break; - } - } - } - - /* Team Player */ - for (i=0; i<2; i++) - { - if (input.system[i] == SYSTEM_TEAMPLAYER) - { - teamplayer_reset(i); - } - } -} - -void input_refresh(void) -{ - int i; - for (i=0; i> 2) & 0x10); - - /* Check that TH is set as an input */ - if (io_reg[0x0F] & (0x02 << (port >> 1))) - { - /* Get current X position (phaser is only used in MS compatiblity mode) */ - int hcounter = hctab[(Z80.cycles + SMS_CYCLE_OFFSET) % MCYCLES_PER_LINE]; - - /* Compare with gun position */ - int dx = input.analog[port][0] - (hcounter << 1); - int dy = input.analog[port][1] - (v_counter); - - /* Check if current pixel is within lightgun spot ? */ - if ((abs(dy) <= 5) && (abs(dx) <= 60)) - { - /* set TH low */ - temp &= ~0x40; - - /* prevents multiple latch at each port read */ - if (lightgun.State) - { - /* latch estimated HC value */ - hvc_latch = 0x10000 | (input.x_offset + (input.analog[port][0] >> 1)); - lightgun.State = 0; - } - else - { - lightgun.State = 1; - } - } - } - - return temp & 0x7F; -} - -unsigned char phaser_1_read(void) -{ - return phaser_read(0); -} - -unsigned char phaser_2_read(void) -{ - return phaser_read(4); -} - - -/*--------------------------------------------------------------------------*/ -/* Sega Menacer */ -/*--------------------------------------------------------------------------*/ - -unsigned char menacer_read(void) -{ - /* D0=??? (INPUT_B), D1=TRIGGER (INPUT_A), D2=??? (INPUT_C), D3= START (INPUT_START) (active high) */ - /* TL & TR pins always return 0 (normally set as output) */ - /* TH always return 1 (0 on active pixel but button acquisition is always done during VBLANK) */ - unsigned data = input.pad[4] >> 4; - return ((data & 0x09) | ((data >> 1) & 0x02) | ((data << 1) & 0x04) | 0x40); -} - - -/*--------------------------------------------------------------------------*/ -/* Konami Justifiers */ -/*--------------------------------------------------------------------------*/ - -unsigned char justifier_read(void) -{ - /* Gun detection */ - if (lightgun.State & 0x40) - { - return 0x30; - } - - /* Return TRIGGER (INPUT_A) & START (INPUT_START) button status in D0-D1 (active low) */ - /* TL & TR pins should always return 1 (normally set as output) */ - /* LEFT & RIGHT pins should always return 0 */ - return (((~input.pad[lightgun.Port] >> 6) & 0x03) | 0x70); -} - -void justifier_write(unsigned char data, unsigned char mask) -{ - /* update bits set as output only, other bits are cleared (fixes Lethal Enforcers 2) */ - data &= mask; - - /* gun index */ - lightgun.Port = 4 + ((data >> 5) & 1); - - /* update internal state */ - lightgun.State = data; -} diff --git a/waterbox/gpgx/core/input_hw/lightgun.h b/waterbox/gpgx/core/input_hw/lightgun.h deleted file mode 100644 index 1042594188..0000000000 --- a/waterbox/gpgx/core/input_hw/lightgun.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Light Phaser, Menacer & Konami Justifiers support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _LIGHTGUN_H_ -#define _LIGHTGUN_H_ - -/* Input devices port handlers */ -extern void lightgun_reset(int index); -extern void lightgun_refresh(int port); -extern unsigned char phaser_1_read(void); -extern unsigned char phaser_2_read(void); -extern unsigned char menacer_read(void); -extern unsigned char justifier_read(void); -extern void justifier_write(unsigned char data, unsigned char mask); - -#endif diff --git a/waterbox/gpgx/core/input_hw/mouse.c b/waterbox/gpgx/core/input_hw/mouse.c deleted file mode 100644 index 777bcb57d1..0000000000 --- a/waterbox/gpgx/core/input_hw/mouse.c +++ /dev/null @@ -1,159 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Mouse support - * - * Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 State; - uint8 Counter; - uint8 Wait; - uint8 Port; -} mouse; - -void mouse_reset(int port) -{ - input.analog[port][0] = 0; - input.analog[port][1] = 0; - mouse.State = 0x60; - mouse.Counter = 0; - mouse.Wait = 0; - mouse.Port = port; -} - -unsigned char mouse_read() -{ - unsigned int temp = 0x00; - int x = input.analog[mouse.Port][0]; - int y = input.analog[mouse.Port][1]; - - switch (mouse.Counter) - { - case 0: /* initial */ - temp = 0x00; - break; - - case 1: /* xxxx1011 */ - temp = 0x0B; - break; - - case 2: /* xxxx1111 */ - temp = 0x0F; - break; - - case 3: /* xxxx1111 */ - temp = 0x0F; - break; - - case 4: /* Axis sign & overflow (not emulated) bits */ - temp |= (x < 0); - temp |= (y < 0) << 1; - /* - temp |= (abs(x) > 255) << 2; - temp |= (abs(y) > 255) << 3; - */ - break; - - case 5: /* START, A, B, C buttons state (active high) */ - temp = (input.pad[mouse.Port] >> 4) & 0x0F; - break; - - case 6: /* X Axis MSB */ - temp = (x >> 4) & 0x0F; - break; - - case 7: /* X Axis LSB */ - temp = (x & 0x0F); - break; - - case 8: /* Y Axis MSB */ - temp = (y >> 4) & 0x0F; - break; - - case 9: /* Y Axis LSB */ - temp = (y & 0x0F); - break; - } - - /* TL = busy status */ - if (mouse.Wait) - { - /* wait before ACK, fix some buggy mouse routine (Cannon Fodder, Shangai 2, Wack World,...) */ - mouse.Wait = 0; - - /* TL = !TR */ - temp |= (~mouse.State & 0x20) >> 1; - } - else - { - /* TL = TR (data is ready) */ - temp |= (mouse.State & 0x20) >> 1; - } - - return temp; -} - -void mouse_write(unsigned char data, unsigned char mask) -{ - /* update bits set as output only */ - data = (mouse.State & ~mask) | (data & mask); - - /* TH transition */ - if ((mouse.State ^ data) & 0x40) - { - /* start (TH=0) or stop (TH=1) acquisition */ - mouse.Counter = 1 - ((data & 0x40) >> 6); - } - - /* TR transition */ - if ((mouse.State ^ data) & 0x20) - { - /* acquisition in progress */ - if ((mouse.Counter > 0) && (mouse.Counter < 10)) - { - /* increment phase */ - mouse.Counter++; - } - - /* TL handshake latency */ - mouse.Wait = 1; - } - - /* update internal state */ - mouse.State = data; -} diff --git a/waterbox/gpgx/core/input_hw/mouse.h b/waterbox/gpgx/core/input_hw/mouse.h deleted file mode 100644 index 82088f80ce..0000000000 --- a/waterbox/gpgx/core/input_hw/mouse.h +++ /dev/null @@ -1,47 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Mouse support - * - * Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _MOUSE_H_ -#define _MOUSE_H_ - -/* Function prototypes */ -extern void mouse_reset(int port); -extern unsigned char mouse_read(void); -extern void mouse_write(unsigned char data, unsigned char mask); - -#endif diff --git a/waterbox/gpgx/core/input_hw/paddle.c b/waterbox/gpgx/core/input_hw/paddle.c deleted file mode 100644 index 6be726a2f4..0000000000 --- a/waterbox/gpgx/core/input_hw/paddle.c +++ /dev/null @@ -1,111 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Paddle Control support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 State; -} paddle[2]; - -void paddle_reset(int index) -{ - input.analog[index][0] = 128; - paddle[index>>2].State = 0x40; -} - -INLINE unsigned char paddle_read(int port) -{ - /* FIRE button status (active low) */ - unsigned char temp = ~(input.pad[port] & 0x10); - - /* Pad index */ - int index = port >> 2; - - /* Clear low bits */ - temp &= 0x70; - - /* Japanese model: automatic flip-flop */ - if (region_code < REGION_USA) - { - paddle[index].State ^= 0x40; - } - - if (paddle[index].State & 0x40) - { - /* return higher bits */ - temp |= (input.analog[port][0] >> 4) & 0x0F; - } - else - { - /* return lower bits */ - temp |= input.analog[port][0] & 0x0F; - - /* set TR low */ - temp &= ~0x20; - } - - return temp; -} - -INLINE void paddle_write(int index, unsigned char data, unsigned char mask) -{ - /* update bits set as output only */ - paddle[index].State = (paddle[index].State & ~mask) | (data & mask); -} - - -unsigned char paddle_1_read(void) -{ - return paddle_read(0); -} - -unsigned char paddle_2_read(void) -{ - return paddle_read(4); -} - -void paddle_1_write(unsigned char data, unsigned char mask) -{ - paddle_write(0, data, mask); -} - -void paddle_2_write(unsigned char data, unsigned char mask) -{ - paddle_write(1, data, mask); -} diff --git a/waterbox/gpgx/core/input_hw/paddle.h b/waterbox/gpgx/core/input_hw/paddle.h deleted file mode 100644 index f6b4b48d51..0000000000 --- a/waterbox/gpgx/core/input_hw/paddle.h +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Paddle Control support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _PADDLE_H_ -#define _PADDLE_H_ - -/* Function prototypes */ -extern void paddle_reset(int index); -extern unsigned char paddle_1_read(void); -extern unsigned char paddle_2_read(void); -extern void paddle_1_write(unsigned char data, unsigned char mask); -extern void paddle_2_write(unsigned char data, unsigned char mask); - -#endif diff --git a/waterbox/gpgx/core/input_hw/sportspad.c b/waterbox/gpgx/core/input_hw/sportspad.c deleted file mode 100644 index c50818d8a5..0000000000 --- a/waterbox/gpgx/core/input_hw/sportspad.c +++ /dev/null @@ -1,134 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Sports Pad support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 State; - uint8 Counter; -} sportspad[2]; - -void sportspad_reset(int index) -{ - input.analog[index][0] = 128; - input.analog[index][1] = 128; - sportspad[index>>2].State = 0x40; - sportspad[index>>2].Counter = 0; -} - -INLINE unsigned char sportspad_read(int port) -{ - /* Buttons 1(B) & 2(C) status (active low) */ - unsigned char temp = ~(input.pad[port] & 0x30); - - /* Pad index */ - int index = port >> 2; - - /* Clear low bits */ - temp &= 0x70; - - /* Detect current state */ - switch (sportspad[index].Counter & 3) - { - case 1: - { - /* X position high bits */ - temp |= (input.analog[port][0] >> 4) & 0x0F; - break; - } - - case 2: - { - /* X position low bits */ - temp |= input.analog[port][0] & 0x0F; - break; - } - - case 3: - { - /* Y position high bits */ - temp |= (input.analog[port][1] >> 4) & 0x0F; - break; - } - - default: - { - /* Y position low bits */ - temp |= input.analog[port][1] & 0x0F; - break; - } - } - - return temp; -} - -INLINE void sportspad_write(int index, unsigned char data, unsigned char mask) -{ - /* update bits set as output only */ - data = (sportspad[index].State & ~mask) | (data & mask); - - /* check TH transitions */ - if ((data ^ sportspad[index].State) & 0x40) - { - sportspad[index].Counter++; - } - - /* update internal state */ - sportspad[index].State = data; -} - -unsigned char sportspad_1_read(void) -{ - return sportspad_read(0); -} - -unsigned char sportspad_2_read(void) -{ - return sportspad_read(4); -} - -void sportspad_1_write(unsigned char data, unsigned char mask) -{ - sportspad_write(0, data, mask); -} - -void sportspad_2_write(unsigned char data, unsigned char mask) -{ - sportspad_write(1, data, mask); -} diff --git a/waterbox/gpgx/core/input_hw/sportspad.h b/waterbox/gpgx/core/input_hw/sportspad.h deleted file mode 100644 index 3a6c482727..0000000000 --- a/waterbox/gpgx/core/input_hw/sportspad.h +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sega Sports Pad support - * - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _SPORTSPAD_H_ -#define _SPORTSPAD_H_ - -/* Function prototypes */ -extern void sportspad_reset(int index); -extern unsigned char sportspad_1_read(void); -extern unsigned char sportspad_2_read(void); -extern void sportspad_1_write(unsigned char data, unsigned char mask); -extern void sportspad_2_write(unsigned char data, unsigned char mask); - -#endif diff --git a/waterbox/gpgx/core/input_hw/teamplayer.c b/waterbox/gpgx/core/input_hw/teamplayer.c deleted file mode 100644 index 4d690f085c..0000000000 --- a/waterbox/gpgx/core/input_hw/teamplayer.c +++ /dev/null @@ -1,177 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Team Player support - * - * Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 State; - uint8 Counter; - uint8 Table[12]; -} teamplayer[2]; - - -void teamplayer_init(int port) -{ - int i,padnum; - int index = 0; - - /* this table determines which gamepad input should be returned during acquisition sequence - index = teamplayer read table index: 0=1st read, 1=2nd read, ... - table = high bits are pad index, low bits are pad input shift: 0=RLDU, 4=SABC, 8=MXYZ - */ - for (i=0; i<4; i++) - { - padnum = (4 * port) + i; - if (input.dev[padnum] == DEVICE_PAD3B) - { - padnum = padnum << 4; - teamplayer[port].Table[index++] = padnum; - teamplayer[port].Table[index++] = padnum | 4; - } - else - { - padnum = padnum << 4; - teamplayer[port].Table[index++] = padnum; - teamplayer[port].Table[index++] = padnum | 4; - teamplayer[port].Table[index++] = padnum | 8; - } - } -} - -void teamplayer_reset(int port) -{ - teamplayer[port].State = 0x60; /* TH = 1, TR = 1 */ - teamplayer[port].Counter = 0; -} - -INLINE unsigned int teamplayer_read(int port) -{ - unsigned int counter = teamplayer[port].Counter; - - /* acquisition sequence */ - switch (counter) - { - case 0: /* initial state: xxx0011 */ - { - /* TL should match TR */ - return ((teamplayer[port].State & 0x20) >> 1) | 0x03; - } - - case 1: /* start request: xxx1111 */ - { - /* TL should match TR */ - return ((teamplayer[port].State & 0x20) >> 1) | 0x0F; - } - - case 2: - case 3: /* ack request: xxx0000 */ - { - /* TL should match TR */ - return ((teamplayer[port].State & 0x20) >> 1); - } - - case 4: - case 5: - case 6: - case 7: /* PAD type: xxx0000 (3B), xxx0001 (6B) or xxx1111 (NC)*/ - { - unsigned int retval = input.dev[(port << 2) + (counter - 4)]; - - /* TL should match TR */ - return (((teamplayer[port].State & 0x20) >> 1) | retval); - } - - default: /* PAD status: xxxRLDU -> xxxSACB -> xxxMXYZ */ - { - unsigned int retval = 0x0F; - - /* SEGA teamplayer returns successively PAD1 -> PAD2 -> PAD3 -> PAD4 inputs */ - unsigned int padnum = teamplayer[port].Table[counter - 8] >> 4; - - /* Each PAD inputs is obtained through 2 or 3 sequential reads: RLDU -> SACB -> MXYZ */ - retval &= ~(input.pad[padnum] >> (teamplayer[port].Table[counter - 8] & 0x0F)); - - /* TL should match TR */ - return (((teamplayer[port].State & 0x20) >> 1) | retval); - } - } -} - -INLINE void teamplayer_write(int port, unsigned char data, unsigned char mask) -{ - /* update bits set as output only */ - unsigned int state = (teamplayer[port].State & ~mask) | (data & mask); - - /* check if TH is HIGH */ - if (state & 0x40) - { - /* reset counter */ - teamplayer[port].Counter = 0; - } - - /* TH & TR handshaking */ - else if ((teamplayer[port].State ^ state) & 0x60) - { - /* increment counter */ - teamplayer[port].Counter++; - } - - /* update internal state */ - teamplayer[port].State = state; -} - -unsigned char teamplayer_1_read(void) -{ - return teamplayer_read(0); -} - -unsigned char teamplayer_2_read(void) -{ - return teamplayer_read(1); -} - -void teamplayer_1_write(unsigned char data, unsigned char mask) -{ - teamplayer_write(0, data, mask); -} - -void teamplayer_2_write(unsigned char data, unsigned char mask) -{ - teamplayer_write(1, data, mask); -} diff --git a/waterbox/gpgx/core/input_hw/teamplayer.h b/waterbox/gpgx/core/input_hw/teamplayer.h deleted file mode 100644 index 52d42959d0..0000000000 --- a/waterbox/gpgx/core/input_hw/teamplayer.h +++ /dev/null @@ -1,50 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Team Player support - * - * Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _TEAMPLAYER_H_ -#define _TEAMPLAYER_H_ - -/* Function prototypes */ -extern void teamplayer_init(int port); -extern void teamplayer_reset(int port); -extern unsigned char teamplayer_1_read(void); -extern unsigned char teamplayer_2_read(void); -extern void teamplayer_1_write(unsigned char data, unsigned char mask); -extern void teamplayer_2_write(unsigned char data, unsigned char mask); - -#endif diff --git a/waterbox/gpgx/core/input_hw/terebi_oekaki.c b/waterbox/gpgx/core/input_hw/terebi_oekaki.c deleted file mode 100644 index dca0ee13e8..0000000000 --- a/waterbox/gpgx/core/input_hw/terebi_oekaki.c +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Terebi Oekaki graphic board support - * - * Copyright (C) 2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 axis; - uint8 busy; -} tablet; - -void terebi_oekaki_reset(void) -{ - input.analog[0][0] = 128; - input.analog[0][1] = 128; - tablet.axis = 1; - tablet.busy = 1; -} - -unsigned short terebi_oekaki_read(void) -{ - uint16 data = (tablet.busy << 15) | input.analog[0][tablet.axis]; - - if (!(input.pad[0] & INPUT_B)) - { - data |= 0x100; - } - - /* clear BUSY flag */ - tablet.busy = 0; - - return data; -} - -void terebi_oekaki_write(unsigned char data) -{ - /* X (1) or Y (0) axis */ - tablet.axis = (data & 1) ^ 1; - - /* set BUSY flag */ - tablet.busy = 1; -} diff --git a/waterbox/gpgx/core/input_hw/terebi_oekaki.h b/waterbox/gpgx/core/input_hw/terebi_oekaki.h deleted file mode 100644 index b319393cd2..0000000000 --- a/waterbox/gpgx/core/input_hw/terebi_oekaki.h +++ /dev/null @@ -1,47 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Terebi Oekaki graphic board support - * - * Copyright (C) 2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _TEREBI_H_ -#define _TEREBI_H_ - -/* Function prototypes */ -extern void terebi_oekaki_reset(void); -extern unsigned short terebi_oekaki_read(void); -extern void terebi_oekaki_write(unsigned char data); - -#endif diff --git a/waterbox/gpgx/core/input_hw/xe_a1p.c b/waterbox/gpgx/core/input_hw/xe_a1p.c deleted file mode 100644 index fecedab160..0000000000 --- a/waterbox/gpgx/core/input_hw/xe_a1p.c +++ /dev/null @@ -1,182 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * XE-A1P analog controller support - * - * Copyright (C) 2011-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -struct -{ - uint8 State; - uint8 Counter; - uint8 Latency; -} xe_a1p[2]; - -void xe_a1p_reset(int index) -{ - input.analog[index][0] = 128; - input.analog[index][1] = 128; - input.analog[index+1][0] = 128; - index >>= 2; - xe_a1p[index].State = 0x40; - xe_a1p[index].Counter = 0; - xe_a1p[index].Latency = 0; -} - -INLINE unsigned char xe_a1p_read(int index) -{ - unsigned int temp = 0x40; - unsigned int port = index << 2; - - /* Left Stick X & Y analog values (bidirectional) */ - int x = input.analog[port][0]; - int y = input.analog[port][1]; - - /* Right Stick X or Y value (unidirectional) */ - int z = input.analog[port+1][0]; - - /* Buttons status (active low) */ - uint16 pad = ~input.pad[port]; - - /* Current internal cycle (0-7) */ - unsigned int cycle = xe_a1p[index].Counter & 7; - - /* Current 4-bit data cycle */ - /* There are eight internal data cycle for each 5 acquisition sequence */ - /* First 4 return the same 4-bit data, next 4 return next 4-bit data */ - switch (xe_a1p[index].Counter >> 2) - { - case 0: - temp |= ((pad >> 8) & 0x0F); /* E1 E2 Start Select */ - break; - case 1: - temp |= ((pad >> 4) & 0x0F); /* A B C D */ - break; - case 2: - temp |= ((x >> 4) & 0x0F); - break; - case 3: - temp |= ((y >> 4) & 0x0F); - break; - case 4: - break; - case 5: - temp |= ((z >> 4) & 0x0F); - break; - case 6: - temp |= (x & 0x0F); - break; - case 7: - temp |= (y & 0x0F); - break; - case 8: - break; - case 9: - temp |= (z & 0x0F); - break; - } - - /* TL indicates which part of data is returned (0=1st part, 1=2nd part) */ - temp |= ((cycle & 4) << 2); - - /* TR indicates if data is ready (0=ready, 1=not ready) */ - /* Fastest One input routine actually expects this bit to switch between 0 & 1 */ - /* so we make the first read of a data cycle return 1 then 0 for remaining reads */ - temp |= (!(cycle & 3) << 5); - - /* Automatically increment data cycle on each read (within current acquisition sequence) */ - cycle = (cycle + 1) & 7; - - /* Update internal cycle counter */ - xe_a1p[index].Counter = (xe_a1p[index].Counter & ~7) | cycle; - - /* Update internal latency on each read */ - xe_a1p[index].Latency++; - - return temp; -} - -INLINE void xe_a1p_write(int index, unsigned char data, unsigned char mask) -{ - /* update bits set as output only */ - data = (xe_a1p[index].State & ~mask) | (data & mask); - - /* look for TH 1->0 transitions */ - if (!(data & 0x40) && (xe_a1p[index].State & 0x40)) - { - /* reset acquisition cycle */ - xe_a1p[index].Latency = xe_a1p[index].Counter = 0; - } - else - { - /* some games immediately write new data to TH */ - /* so we make sure first sequence has actually been handled */ - if (xe_a1p[index].Latency > 2) - { - /* next acquisition sequence */ - xe_a1p[index].Counter = (xe_a1p[index].Counter & ~7) + 8; - - /* 5 sequence max with 8 cycles each */ - if (xe_a1p[index].Counter > 32) - { - xe_a1p[index].Counter = 32; - } - } - } - - /* update internal state */ - xe_a1p[index].State = data; -} - -unsigned char xe_a1p_1_read(void) -{ - return xe_a1p_read(0); -} - -unsigned char xe_a1p_2_read(void) -{ - return xe_a1p_read(1); -} - -void xe_a1p_1_write(unsigned char data, unsigned char mask) -{ - xe_a1p_write(0, data, mask); -} - -void xe_a1p_2_write(unsigned char data, unsigned char mask) -{ - xe_a1p_write(1, data, mask); -} diff --git a/waterbox/gpgx/core/input_hw/xe_a1p.h b/waterbox/gpgx/core/input_hw/xe_a1p.h deleted file mode 100644 index 40095dcda1..0000000000 --- a/waterbox/gpgx/core/input_hw/xe_a1p.h +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * XE-A1P analog controller support - * - * Copyright (C) 2011-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _XE_A1PH_ -#define _XE_A1PH_ - -/* Function prototypes */ -extern void xe_a1p_reset(int index); -extern unsigned char xe_a1p_1_read(void); -extern unsigned char xe_a1p_2_read(void); -extern void xe_a1p_1_write(unsigned char data, unsigned char mask); -extern void xe_a1p_2_write(unsigned char data, unsigned char mask); - -#endif diff --git a/waterbox/gpgx/core/io_ctrl.c b/waterbox/gpgx/core/io_ctrl.c deleted file mode 100644 index 256114182e..0000000000 --- a/waterbox/gpgx/core/io_ctrl.c +++ /dev/null @@ -1,595 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * I/O controller (Genesis & Master System modes) - * - * Support for Master System (315-5216, 315-5237 & 315-5297), Game Gear & Mega Drive I/O chips - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "gamepad.h" -#include "lightgun.h" -#include "mouse.h" -#include "activator.h" -#include "xe_a1p.h" -#include "teamplayer.h" -#include "paddle.h" -#include "sportspad.h" - -uint8 io_reg[0x10]; - -uint8 region_code = REGION_USA; - -static struct port_t -{ - void (*data_w)(unsigned char data, unsigned char mask); - unsigned char (*data_r)(void); -} port[3]; - -static void dummy_write(unsigned char data, unsigned char mask) -{ -} - -static unsigned char dummy_read(void) -{ - return 0x7F; -} - -/***************************************************************************** - * I/O chip initialization * - * * - *****************************************************************************/ -void io_init(void) -{ - /* Initialize connected peripherals */ - input_init(); - - /* Initialize IO Ports handlers & connected peripherals */ - switch (input.system[0]) - { - case SYSTEM_MS_GAMEPAD: - { - port[0].data_w = dummy_write; - port[0].data_r = gamepad_1_read; - break; - } - - case SYSTEM_MD_GAMEPAD: - { - port[0].data_w = gamepad_1_write; - port[0].data_r = gamepad_1_read; - break; - } - - case SYSTEM_MOUSE: - { - port[0].data_w = mouse_write; - port[0].data_r = mouse_read; - break; - } - - case SYSTEM_ACTIVATOR: - { - port[0].data_w = activator_1_write; - port[0].data_r = activator_1_read; - break; - } - - case SYSTEM_XE_A1P: - { - port[0].data_w = xe_a1p_1_write; - port[0].data_r = xe_a1p_1_read; - break; - } - - case SYSTEM_WAYPLAY: - { - port[0].data_w = wayplay_1_write; - port[0].data_r = wayplay_1_read; - break; - } - - case SYSTEM_TEAMPLAYER: - { - port[0].data_w = teamplayer_1_write; - port[0].data_r = teamplayer_1_read; - break; - } - - case SYSTEM_LIGHTPHASER: - { - port[0].data_w = dummy_write; - port[0].data_r = phaser_1_read; - break; - } - - case SYSTEM_PADDLE: - { - port[0].data_w = paddle_1_write; - port[0].data_r = paddle_1_read; - break; - } - - case SYSTEM_SPORTSPAD: - { - port[0].data_w = sportspad_1_write; - port[0].data_r = sportspad_1_read; - break; - } - - default: - { - port[0].data_w = dummy_write; - port[0].data_r = dummy_read; - break; - } - } - - switch (input.system[1]) - { - case SYSTEM_MS_GAMEPAD: - { - port[1].data_w = dummy_write; - port[1].data_r = gamepad_2_read; - break; - } - - case SYSTEM_MD_GAMEPAD: - { - port[1].data_w = gamepad_2_write; - port[1].data_r = gamepad_2_read; - break; - } - - case SYSTEM_MOUSE: - { - port[1].data_w = mouse_write; - port[1].data_r = mouse_read; - break; - } - - case SYSTEM_XE_A1P: - { - port[1].data_w = xe_a1p_2_write; - port[1].data_r = xe_a1p_2_read; - break; - } - - case SYSTEM_ACTIVATOR: - { - port[1].data_w = activator_2_write; - port[1].data_r = activator_2_read; - break; - } - - case SYSTEM_MENACER: - { - port[1].data_w = dummy_write; - port[1].data_r = menacer_read; - break; - } - - case SYSTEM_JUSTIFIER: - { - port[1].data_w = justifier_write; - port[1].data_r = justifier_read; - break; - } - - case SYSTEM_WAYPLAY: - { - port[1].data_w = wayplay_2_write; - port[1].data_r = wayplay_2_read; - break; - } - - case SYSTEM_TEAMPLAYER: - { - port[1].data_w = teamplayer_2_write; - port[1].data_r = teamplayer_2_read; - break; - } - - case SYSTEM_LIGHTPHASER: - { - port[1].data_w = dummy_write; - port[1].data_r = phaser_2_read; - break; - } - - case SYSTEM_PADDLE: - { - port[1].data_w = paddle_2_write; - port[1].data_r = paddle_2_read; - break; - } - - case SYSTEM_SPORTSPAD: - { - port[1].data_w = sportspad_2_write; - port[1].data_r = sportspad_2_read; - break; - } - - default: - { - port[1].data_w = dummy_write; - port[1].data_r = dummy_read; - break; - } - } - - /* External Port (unconnected) */ - port[2].data_w = dummy_write; - port[2].data_r = dummy_read; -} - - -void io_reset(void) -{ - /* Reset I/O registers */ - if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) - { - io_reg[0x00] = region_code | (config.bios & 1); - io_reg[0x01] = 0x00; - io_reg[0x02] = 0x00; - io_reg[0x03] = 0x00; - io_reg[0x04] = 0x00; - io_reg[0x05] = 0x00; - io_reg[0x06] = 0x00; - io_reg[0x07] = 0xFF; - io_reg[0x08] = 0x00; - io_reg[0x09] = 0x00; - io_reg[0x0A] = 0xFF; - io_reg[0x0B] = 0x00; - io_reg[0x0C] = 0x00; - io_reg[0x0D] = 0xFB; - io_reg[0x0E] = 0x00; - io_reg[0x0F] = 0x00; - - /* CD unit detection */ - if (system_hw != SYSTEM_MCD) - { - io_reg[0x00] |= 0x20; - } - } - else - { - /* Game Gear specific registers */ - io_reg[0x00] = 0x80 | (region_code >> 1); - io_reg[0x01] = 0x00; - io_reg[0x02] = 0xFF; - io_reg[0x03] = 0x00; - io_reg[0x04] = 0xFF; - io_reg[0x05] = 0x00; - io_reg[0x06] = 0xFF; - - /* initial !RESET input */ - io_reg[0x0D] = IO_RESET_HI; - - /* default !CONT input */ - if (system_hw != SYSTEM_PBC) - { - io_reg[0x0D] |= IO_CONT1_HI; - } - - /* Control registers */ - io_reg[0x0E] = 0x00; - io_reg[0x0F] = 0xFF; - } - - /* Reset connected peripherals */ - input_reset(); -} - - -/***************************************************************************** - * I/O ports access from 68k (Genesis mode) * - * * - *****************************************************************************/ - -void io_68k_write(unsigned int offset, unsigned int data) -{ - switch (offset) - { - case 0x01: /* Port A Data */ - case 0x02: /* Port B Data */ - case 0x03: /* Port C Data */ - { - io_reg[offset] = data; - port[offset-1].data_w(data, io_reg[offset + 3]); - return; - } - - case 0x04: /* Port A Ctrl */ - case 0x05: /* Port B Ctrl */ - case 0x06: /* Port C Ctrl */ - { - if (data != io_reg[offset]) - { - io_reg[offset] = data; - port[offset-4].data_w(io_reg[offset-3], data); - } - return; - } - - case 0x07: /* Port A TxData */ - case 0x0A: /* Port B TxData */ - case 0x0D: /* Port C TxData */ - { - io_reg[offset] = data; - return; - } - - case 0x09: /* Port A S-Ctrl */ - case 0x0C: /* Port B S-Ctrl */ - case 0x0F: /* Port C S-Ctrl */ - { - io_reg[offset] = data & 0xF8; - return; - } - - default: /* Read-only ports */ - { - return; - } - } -} - -unsigned int io_68k_read(unsigned int offset) -{ - switch(offset) - { - case 0x01: /* Port A Data */ - case 0x02: /* Port B Data */ - case 0x03: /* Port C Data */ - { - unsigned int mask, data; - real_input_callback(); - mask = 0x80 | io_reg[offset + 3]; - data = port[offset-1].data_r(); - return (io_reg[offset] & mask) | (data & ~mask); - } - - default: /* return register value */ - { - return io_reg[offset]; - } - } -} - - -/***************************************************************************** - * I/O ports access from Z80 * - * * - *****************************************************************************/ - -void io_z80_write(unsigned int offset, unsigned int data, unsigned int cycles) -{ - if (offset) - { - /* I/O Control register */ - if (region_code & REGION_USA) - { - /* - Bit Function - -------------- - D7 : Port B TH pin output level (1=high, 0=low) - D6 : Port B TR pin output level (1=high, 0=low) - D5 : Port A TH pin output level (1=high, 0=low) - D4 : Port A TR pin output level (1=high, 0=low) - D3 : Port B TH pin direction (1=input, 0=output) - D2 : Port B TR pin direction (1=input, 0=output) - D1 : Port A TH pin direction (1=input, 0=output) - D0 : Port A TR pin direction (1=input, 0=output) - */ - - /* Send TR/TH state to connected peripherals */ - port[0].data_w((data << 1) & 0x60, (~io_reg[0x0F] << 5) & 0x60); - port[1].data_w((data >> 1) & 0x60, (~io_reg[0x0F] << 3) & 0x60); - - - /* Check for TH low-to-high transitions on both ports */ - if ((!(io_reg[0x0F] & 0x80) && (data & 0x80)) || - (!(io_reg[0x0F] & 0x20) && (data & 0x20))) - { - /* Latch new HVC */ - hvc_latch = hctab[cycles % MCYCLES_PER_LINE] | 0x10000; - } - - /* Update I/O Control register */ - io_reg[0x0F] = data; - } - else - { - /* TH output is fixed to 0 & TR is always an input on japanese hardware */ - io_reg[0x0F] = (data | 0x05) & 0x5F; - - /* Port $DD bits D4-D5 return D0-D2 (cf. http://www2.odn.ne.jp/~haf09260/Sms/EnrSms.htm) */ - io_reg[0x0D] = ((data & 0x01) << 4) | ((data & 0x04) << 3); - } - } - else - { - /* Update Memory Control register */ - io_reg[0x0E] = data; - - /* Switch cartridge & BIOS ROM */ - sms_cart_switch(~data); - } -} - -unsigned int io_z80_read(unsigned int offset) -{ - unsigned int data, ctrl; - real_input_callback(); - /* Read port A & port B input data */ - data = (port[0].data_r()) | (port[1].data_r() << 8); - - /* I/O control register value */ - ctrl = io_reg[0x0F]; - - /* I/O ports */ - if (offset) - { - /* - Bit Function - -------------- - D7 : Port B TH pin input - D6 : Port A TH pin input - D5 : CONT input (0 on Mega Drive hardware, 1 otherwise) - D4 : RESET button (1: default, 0: pressed, only on Master System hardware) - D3 : Port B TR pin input - D2 : Port B TL pin input - D1 : Port B Right pin input - D0 : Port B Left pin input - */ - data = ((data >> 10) & 0x0F) | (data & 0x40) | ((data >> 7) & 0x80) | io_reg[0x0D]; - - /* clear !RESET input */ - io_reg[0x0D] |= IO_RESET_HI; - - /* Adjust port B TH state if configured as output */ - if (!(ctrl & 0x08)) - { - data &= ~0x80; - data |= (ctrl & 0x80); - } - - /* Adjust port A TH state if configured as output */ - if (!(ctrl & 0x02)) - { - data &= ~0x40; - data |= ((ctrl & 0x20) << 1); - } - - /* Adjust port B TR state if configured as output */ - if (!(ctrl & 0x04)) - { - data &= ~0x08; - data |= ((ctrl & 0x40) >> 3); - } - } - else - { - /* - Bit Function - -------------- - D7 : Port B Down pin input - D6 : Port B Up pin input - D5 : Port A TR pin input - D4 : Port A TL pin input - D3 : Port A Right pin input - D2 : Port A Left pin input - D1 : Port A Down pin input - D0 : Port A Up pin input - */ - data = (data & 0x3F) | ((data >> 2) & 0xC0); - - /* Adjust port A TR state if configured as output */ - if (!(ctrl & 0x01)) - { - data &= ~0x20; - data |= ((ctrl & 0x10) << 1); - } - } - - return data; -} - - -/***************************************************************************** - * Game Gear communication ports access * - * * - *****************************************************************************/ - -void io_gg_write(unsigned int offset, unsigned int data) -{ - switch (offset) - { - case 1: /* Parallel data register */ - io_reg[1] = data; - return; - - case 2: /* Data direction register and NMI enable */ - io_reg[2] = data; - return; - - case 3: /* Transmit data buffer */ - io_reg[3] = data; - return; - - case 5: /* Serial control (bits 0-2 are read-only) */ - io_reg[5] = data & 0xF8; - return; - - case 6: /* PSG Stereo output control */ - io_reg[6] = data; - SN76489_Config(Z80.cycles, config.psg_preamp, config.psgBoostNoise, data); - return; - - default: /* Read-only */ - return; - } -} - -unsigned int io_gg_read(unsigned int offset) -{ - switch (offset) - { - case 0: /* Mode Register */ - return (io_reg[0] & ~(input.pad[0] & INPUT_START)); - - case 1: /* Parallel data register (not connected) */ - return ((io_reg[1] & ~(io_reg[2] & 0x7F)) | (io_reg[2] & 0x7F)); - - case 2: /* Data direction register and NMI enable */ - return io_reg[2]; - - case 3: /* Transmit data buffer */ - return io_reg[3]; - - case 4: /* Receive data buffer */ - return io_reg[4]; - - case 5: /* Serial control */ - return io_reg[5]; - - default: /* Write-Only */ - return 0xFF; - } -} - diff --git a/waterbox/gpgx/core/io_ctrl.h b/waterbox/gpgx/core/io_ctrl.h deleted file mode 100644 index 35daef8c00..0000000000 --- a/waterbox/gpgx/core/io_ctrl.h +++ /dev/null @@ -1,68 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * I/O controller - * - * Support for Master System (315-5216, 315-5237 & 315-5297), Game Gear & Mega Drive I/O chips - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _IO_CTRL_H_ -#define _IO_CTRL_H_ - -#define IO_RESET_HI 0x10 -#define IO_CONT1_HI 0x20 - -#define REGION_JAPAN_NTSC 0x00 -#define REGION_JAPAN_PAL 0x40 -#define REGION_USA 0x80 -#define REGION_EUROPE 0xC0 - -/* Global variables */ -extern uint8 io_reg[0x10]; -extern uint8 region_code; - -/* Function prototypes */ -extern void io_init(void); -extern void io_reset(void); -extern void io_68k_write(unsigned int offset, unsigned int data); -extern unsigned int io_68k_read(unsigned int offset); -extern void io_z80_write(unsigned int offset, unsigned int data, unsigned int cycles); -extern unsigned int io_z80_read(unsigned int offset); -extern void io_gg_write(unsigned int offset, unsigned int data); -extern unsigned int io_gg_read(unsigned int offset); - -#endif /* _IO_CTRL_H_ */ - diff --git a/waterbox/gpgx/core/loadrom.c b/waterbox/gpgx/core/loadrom.c deleted file mode 100644 index 06d01d28a6..0000000000 --- a/waterbox/gpgx/core/loadrom.c +++ /dev/null @@ -1,1144 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * ROM Loading Support - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include -#include "shared.h" -#include - -/*** ROM Information ***/ -#define ROMCONSOLE 256 -#define ROMCOPYRIGHT 272 -#define ROMDOMESTIC 288 -#define ROMWORLD 336 -#define ROMTYPE 384 -#define ROMPRODUCT 386 -#define ROMCHECKSUM 398 -#define ROMIOSUPPORT 400 -#define ROMROMSTART 416 -#define ROMROMEND 420 -#define ROMRAMINFO 424 -#define ROMRAMSTART 436 -#define ROMRAMEND 440 -#define ROMMODEMINFO 444 -#define ROMMEMO 456 -#define ROMCOUNTRY 496 - -#define P3BUTTONS 1 -#define P6BUTTONS 2 -#define PKEYBOARD 4 -#define PPRINTER 8 -#define PBALL 16 -#define PFLOPPY 32 -#define PACTIVATOR 64 -#define PTEAMPLAYER 128 -#define PMSYSTEMPAD 256 -#define PSERIAL 512 -#define PTABLET 1024 -#define PPADDLE 2048 -#define PCDROM 4096 -#define PMOUSE 8192 - -#define MAXCOMPANY 64 -#define MAXPERIPHERALS 15 - -typedef struct -{ - char companyid[6]; - char company[26]; -} COMPANYINFO; - -typedef struct -{ - char pID[2]; - char pName[14]; -} PERIPHERALINFO; - - -ROMINFO rominfo; -uint8 romtype; - -uint8 rom_region; - -/*************************************************************************** - * Genesis ROM Manufacturers - * - * Based on the document provided at - * http://www.zophar.net/tech/files/Genesis_ROM_Format.txt - **************************************************************************/ -static const COMPANYINFO companyinfo[MAXCOMPANY] = -{ - {"ACLD", "Ballistic"}, - {"RSI", "Razorsoft"}, - {"SEGA", "SEGA"}, - {"TREC", "Treco"}, - {"VRGN", "Virgin Games"}, - {"WSTN", "Westone"}, - {"10", "Takara"}, - {"11", "Taito or Accolade"}, - {"12", "Capcom"}, - {"13", "Data East"}, - {"14", "Namco or Tengen"}, - {"15", "Sunsoft"}, - {"16", "Bandai"}, - {"17", "Dempa"}, - {"18", "Technosoft"}, - {"19", "Technosoft"}, - {"20", "Asmik"}, - {"22", "Micronet"}, - {"23", "Vic Tokai"}, - {"24", "American Sammy"}, - {"29", "Kyugo"}, - {"32", "Wolfteam"}, - {"33", "Kaneko"}, - {"35", "Toaplan"}, - {"36", "Tecmo"}, - {"40", "Toaplan"}, - {"42", "UFL Company Limited"}, - {"43", "Human"}, - {"45", "Game Arts"}, - {"47", "Sage's Creation"}, - {"48", "Tengen"}, - {"49", "Renovation or Telenet"}, - {"50", "Electronic Arts"}, - {"56", "Razorsoft"}, - {"58", "Mentrix"}, - {"60", "Victor Musical Ind."}, - {"69", "Arena"}, - {"70", "Virgin"}, - {"73", "Soft Vision"}, - {"74", "Palsoft"}, - {"76", "Koei"}, - {"79", "U.S. Gold"}, - {"81", "Acclaim/Flying Edge"}, - {"83", "Gametek"}, - {"86", "Absolute"}, - {"87", "Mindscape"}, - {"93", "Sony"}, - {"95", "Konami"}, - {"97", "Tradewest"}, - {"100", "T*HQ Software"}, - {"101", "Tecmagik"}, - {"112", "Designer Software"}, - {"113", "Psygnosis"}, - {"119", "Accolade"}, - {"120", "Code Masters"}, - {"125", "Interplay"}, - {"130", "Activision"}, - {"132", "Shiny & Playmates"}, - {"144", "Atlus"}, - {"151", "Infogrames"}, - {"161", "Fox Interactive"}, - {"177", "Ubisoft"}, - {"239", "Disney Interactive"}, - {"---", "Unknown"} -}; - -/*************************************************************************** - * Genesis Peripheral Information - * - * Based on the document provided at - * http://www.zophar.net/tech/files/Genesis_ROM_Format.txt - ***************************************************************************/ -static const PERIPHERALINFO peripheralinfo[MAXPERIPHERALS] = -{ - {"J", "3B Joypad"}, - {"6", "6B Joypad"}, - {"K", "Keyboard"}, - {"P", "Printer"}, - {"B", "Control Ball"}, - {"F", "Floppy Drive"}, - {"L", "Activator"}, - {"4", "Team Player"}, - {"0", "MS Joypad"}, - {"R", "RS232C Serial"}, - {"T", "Tablet"}, - {"V", "Paddle"}, - {"C", "CD-ROM"}, - {"M", "Mega Mouse"}, - {"G", "Menacer"}, -}; - -/*************************************************************************** - * - * Compute ROM real checksum. - ***************************************************************************/ -static uint16 getchecksum(uint8 *rom, int length) -{ - int i; - uint16 checksum = 0; - - for (i = 0; i < length; i += 2) - { - checksum += ((rom[i] << 8) + rom[i + 1]); - } - - return checksum; -} - - -/*************************************************************************** - * deinterleave_block - * - * Convert interleaved (.smd) ROM files. - ***************************************************************************/ -static void deinterleave_block(uint8 * src) -{ - int i; - uint8 block[0x4000]; - memcpy (block, src, 0x4000); - for (i = 0; i < 0x2000; i += 1) - { - src[i * 2 + 0] = block[0x2000 + (i)]; - src[i * 2 + 1] = block[0x0000 + (i)]; - } -} - -/*************************************************************************** - * - * Pass a pointer to the ROM base address. - ***************************************************************************/ -void getrominfo(char *romheader) -{ - /* Clear ROM info structure */ - memset (&rominfo, 0, sizeof (ROMINFO)); - - /* Genesis ROM header support */ - if (system_hw & SYSTEM_MD) - { - int i,j; - - memcpy (&rominfo.consoletype, romheader + ROMCONSOLE, 16); - memcpy (&rominfo.copyright, romheader + ROMCOPYRIGHT, 16); - - /* Domestic (japanese) name */ - rominfo.domestic[0] = romheader[ROMDOMESTIC]; - j = 1; - for (i=1; i<48; i++) - { - if ((rominfo.domestic[j-1] != 32) || (romheader[ROMDOMESTIC + i] != 32)) - { - rominfo.domestic[j] = romheader[ROMDOMESTIC + i]; - j++; - } - } - rominfo.domestic[j] = 0; - - /* International name */ - rominfo.international[0] = romheader[ROMWORLD]; - j=1; - for (i=1; i<48; i++) - { - if ((rominfo.international[j-1] != 32) || (romheader[ROMWORLD + i] != 32)) - { - rominfo.international[j] = romheader[ROMWORLD + i]; - j++; - } - } - rominfo.international[j] = 0; - - /* ROM informations */ - memcpy (&rominfo.ROMType, romheader + ROMTYPE, 2); - memcpy (&rominfo.product, romheader + ROMPRODUCT, 12); - memcpy (&rominfo.checksum, romheader + ROMCHECKSUM, 2); - memcpy (&rominfo.romstart, romheader + ROMROMSTART, 4); - memcpy (&rominfo.romend, romheader + ROMROMEND, 4); - memcpy (&rominfo.country, romheader + ROMCOUNTRY, 16); - - /* Checksums */ -#ifdef LSB_FIRST - rominfo.checksum = (rominfo.checksum >> 8) | ((rominfo.checksum & 0xff) << 8); -#endif - rominfo.realchecksum = getchecksum(((uint8 *) cart.rom) + 0x200, cart.romsize - 0x200); - - /* Supported peripherals */ - rominfo.peripherals = 0; - for (i = 0; i < 14; i++) - for (j=0; j < 14; j++) - if (romheader[ROMIOSUPPORT+i] == peripheralinfo[j].pID[0]) - rominfo.peripherals |= (1 << j); - } - else - { - uint16 offset = 0; - - /* detect Master System ROM header */ - if (!memcmp (&romheader[0x1ff0], "TMR SEGA", 8)) - { - offset = 0x1ff0; - } - else if (!memcmp (&romheader[0x3ff0], "TMR SEGA", 8)) - { - offset = 0x3ff0; - } - else if (!memcmp (&romheader[0x7ff0], "TMR SEGA", 8)) - { - offset = 0x7ff0; - } - - /* if found, get infos from header */ - if (offset) - { - /* checksum */ - rominfo.checksum = romheader[offset + 0x0a] | (romheader[offset + 0x0b] << 8); - - /* product code & version */ - sprintf(&rominfo.product[0], "%02d", romheader[offset + 0x0e] >> 4); - sprintf(&rominfo.product[2], "%02x", romheader[offset + 0x0d]); - sprintf(&rominfo.product[4], "%02x", romheader[offset + 0x0c]); - sprintf(&rominfo.product[6], "-%d", romheader[offset + 0x0e] & 0x0F); - - /* region code */ - switch (romheader[offset + 0x0f] >> 4) - { - case 3: - strcpy(rominfo.country,"SMS Japan"); - break; - case 4: - strcpy(rominfo.country,"SMS Export"); - break; - case 5: - strcpy(rominfo.country,"GG Japan"); - break; - case 6: - strcpy(rominfo.country,"GG Export"); - break; - case 7: - strcpy(rominfo.country,"GG International"); - break; - default: - sprintf(rominfo.country,"Unknown (%d)", romheader[offset + 0x0f] >> 4); - break; - } - - /* ROM size */ - rominfo.romstart = 0; - switch (romheader[offset + 0x0f] & 0x0F) - { - case 0x00: - rominfo.romend = 0x3FFFF; - break; - case 0x01: - rominfo.romend = 0x7FFFF; - break; - case 0x02: - rominfo.romend = 0xFFFFF; - break; - case 0x0a: - rominfo.romend = 0x1FFF; - break; - case 0x0b: - rominfo.romend = 0x3FFF; - break; - case 0x0c: - rominfo.romend = 0x7FFF; - break; - case 0x0d: - rominfo.romend = 0xBFFF; - break; - case 0x0e: - rominfo.romend = 0xFFFF; - break; - case 0x0f: - rominfo.romend = 0x1FFFF; - break; - } - } - } -} - -/*************************************************************************** - * load_bios - * - * Load current system BIOS file. - * - * Return loaded size (-1 if already loaded) - * - ***************************************************************************/ -int load_bios(void) -{ - int size = 0; - - switch (system_hw) - { - case SYSTEM_MCD: - { - /* check if CD BOOTROM is already loaded */ - if (!(system_bios & 0x10) || ((system_bios & 0x0c) != (region_code >> 4))) - { - // GPGX emulates the HINT vector patching by actually writing to the rom, - // so we can't move this to alloc_sealed without some other changes - scd.bootrom = malloc(0x20000); - - /* load CD BOOTROM (fixed 128KB size) */ - switch (region_code) - { - case REGION_USA: - size = load_archive(CD_BIOS_US, scd.bootrom, 0x20000, 0); - break; - case REGION_EUROPE: - size = load_archive(CD_BIOS_EU, scd.bootrom, 0x20000, 0); - break; - default: - size = load_archive(CD_BIOS_JP, scd.bootrom, 0x20000, 0); - break; - } - - /* CD BOOTROM loaded ? */ - if (size > 0) - { -#ifdef LSB_FIRST - /* Byteswap ROM to optimize 16-bit access */ - int i; - for (i = 0; i < size; i += 2) - { - uint8 temp = scd.bootrom[i]; - scd.bootrom[i] = scd.bootrom[i+1]; - scd.bootrom[i+1] = temp; - } -#endif - /* mark CD BIOS as being loaded */ - system_bios = system_bios | 0x10; - - /* loaded BIOS region */ - system_bios = (system_bios & 0xf0) | (region_code >> 4); - } - - return size; - } - - return -1; - } - - case SYSTEM_GG: - case SYSTEM_GGMS: - { - /* check if Game Gear BOOTROM is already loaded */ - if (!(system_bios & SYSTEM_GG)) - { - /* mark both Master System & Game Gear BOOTROM as unloaded */ - system_bios &= ~(SYSTEM_SMS | SYSTEM_GG); - - /* BOOTROM is stored above cartridge ROM area (max. 4MB) */ - if (cart.romsize <= 0x400000) - { - /* load Game Gear BOOTROM file */ - size = load_archive(GG_BIOS, cart.rom + 0x400000, 0x100000, 0); - - if (size > 0) - { - /* mark Game Gear BOOTROM as loaded */ - system_bios |= SYSTEM_GG; - } - } - - return size; - } - - return -1; - } - - case SYSTEM_SMS: - case SYSTEM_SMS2: - { - /* check if Master System BOOTROM is already loaded */ - if (!(system_bios & SYSTEM_SMS) || ((system_bios & 0x0c) != (region_code >> 4))) - { - /* mark both Master System & Game Gear BOOTROM as unloaded */ - system_bios &= ~(SYSTEM_SMS | SYSTEM_GG); - - /* BOOTROM is stored above cartridge ROM area (max. 4MB) */ - if (cart.romsize <= 0x400000) - { - /* load Master System BOOTROM file */ - switch (region_code) - { - case REGION_USA: - size = load_archive(MS_BIOS_US, cart.rom + 0x400000, 0x400000, 0); - break; - case REGION_EUROPE: - size = load_archive(MS_BIOS_EU, cart.rom + 0x400000, 0x400000, 0); - break; - default: - size = load_archive(MS_BIOS_JP, cart.rom + 0x400000, 0x400000, 0); - break; - } - - if (size > 0) - { - /* mark Master System BOOTROM as loaded */ - system_bios |= SYSTEM_SMS; - - /* loaded BOOTROM region */ - system_bios = (system_bios & 0xf0) | (region_code >> 4); - } - } - - return size; - } - - return -1; - } - - default: - { - return 0; - } - } -} - -/*************************************************************************** - * load_rom - * - * Load a new ROM file. - * - * Return 0 on error, 1 on success - * - ***************************************************************************/ -int load_rom(const char *filename) -{ - int i, size; - - /* clear any existing patches */ - ggenie_shutdown(); - areplay_shutdown(); - - /* check previous loaded ROM size */ - if (cart.romsize > 0x800000) - { - /* assume no CD is currently loaded */ - cdd.loaded = 0; - } - - /* auto-detect CD image files */ - size = cdd_load("PRIMARY_CD", (char *)(cart.rom)); - if (size < 0) - { - /* error opening file */ - return 0; - } - - if (size > 0) - { - /* CD image file loaded */ - system_hw = SYSTEM_MCD; - } - else - { - /* load file into ROM buffer */ - char extension[4]; - size = load_archive(filename, cart.rom, 32 * 1024 * 1024, extension); - if (!size) - { - /* mark all BOOTROM as unloaded since they could have been overwritten */ - system_bios &= ~(0x10 | SYSTEM_SMS | SYSTEM_GG); - return 0; - } - - /* mark BOOTROM as unloaded if they have been overwritten by cartridge ROM */ - if (size > 0x800000) - { - /* CD BIOS ROM are loaded at the start of CD area */ - system_bios &= ~0x10; - } - else if (size > 0x400000) - { - /* Master System or Game Gear BIOS ROM are loaded within $400000-$4FFFFF area */ - system_bios &= ~(SYSTEM_SMS | SYSTEM_GG); - } - - /* convert lower case to upper case */ - *(uint32 *)(extension) &= 0xdfdfdfdf; - - /* auto-detect system hardware from ROM file extension */ - if (!memcmp("SMS", &extension[0], 3)) - { - /* Master System II hardware */ - system_hw = SYSTEM_SMS2; - } - else if (!memcmp("GG", &extension[1], 2)) - { - /* Game Gear hardware (GG mode) */ - system_hw = SYSTEM_GG; - } - else if (!memcmp("SG", &extension[1], 2)) - { - /* SG-1000 hardware */ - system_hw = SYSTEM_SG; - } - else - { - /* Mega Drive hardware (Genesis mode) */ - system_hw = SYSTEM_MD; - - /* decode .MDX format */ - if (!memcmp("MDX", &extension[0], 3)) - { - for (i = 4; i < size - 1; i++) - { - cart.rom[i-4] = cart.rom[i] ^ 0x40; - } - size = size - 5; - } - - /* auto-detect byte-swapped dumps */ - if (!memcmp((char *)(cart.rom + 0x100),"ESAGM GE ARDVI E", 16) || - !memcmp((char *)(cart.rom + 0x100),"ESAGG NESESI", 12)) - { - for(i = 0; i < size; i += 2) - { - uint8 temp = cart.rom[i]; - cart.rom[i] = cart.rom[i+1]; - cart.rom[i+1] = temp; - } - } - } - - /* auto-detect 512 byte extra header */ - if (memcmp((char *)(cart.rom + 0x100), "SEGA", 4) && ((size / 512) & 1) && !(size % 512)) - { - /* remove header */ - size -= 512; - memcpy (cart.rom, cart.rom + 512, size); - - /* assume interleaved Genesis ROM format (.smd) */ - if (system_hw == SYSTEM_MD) - { - for (i = 0; i < (size / 0x4000); i++) - { - deinterleave_block (cart.rom + (i * 0x4000)); - } - } - } - } - - /* initialize ROM size */ - cart.romsize = size; - - /* get infos from ROM header */ - getrominfo((char *)(cart.rom)); - - /* set console region */ - get_region((char *)(cart.rom)); - - /* CD image file */ - if (system_hw == SYSTEM_MCD) - { - /* load CD BOOT ROM */ - if (!load_bios()) - { - /* unmount CD image */ - cdd_unload(); - - /* error loading CD BOOT ROM */ - return (0); - } - - /* boot from CD */ - scd.cartridge.boot = 0x00; - } - -#ifdef LSB_FIRST - /* 16-bit ROM specific */ - else if (system_hw == SYSTEM_MD) - { - /* Byteswap ROM to optimize 16-bit access */ - for (i = 0; i < cart.romsize; i += 2) - { - uint8 temp = cart.rom[i]; - cart.rom[i] = cart.rom[i+1]; - cart.rom[i+1] = temp; - } - } -#endif - - /* Save auto-detected system hardware */ - romtype = system_hw; - - /* PICO ROM */ - if (strstr(rominfo.consoletype, "SEGA PICO") != NULL) - { - /* PICO hardware */ - system_hw = SYSTEM_PICO; - } - - /* CD BOOTROM */ - else if (strstr(rominfo.ROMType, "BR") != NULL) - { - /* enable CD hardware */ - system_hw = SYSTEM_MCD; - - /* boot from CD */ - scd.cartridge.boot = 0x00; - - /* copy ROM to BOOTROM area */ - memcpy(scd.bootrom, cart.rom, 0x20000); - - /* mark CD BIOS as being loaded */ - system_bios = system_bios | 0x10; - - /* loaded CD BIOS region */ - system_bios = (system_bios & 0xf0) | (region_code >> 4); - } - - /* ROM cartridges with CD support */ - else if ((strstr(rominfo.domestic,"FLUX") != NULL) || - (strstr(rominfo.domestic,"WONDER LIBRARY") != NULL) || - (strstr(rominfo.product,"T-5740") != NULL)) - { - /* check if console hardware is set to AUTO */ - if (config.system == 0x00) - { - /* auto-enable CD hardware */ - system_hw = SYSTEM_MCD; - - /* try to load CD BOOTROM */ - if (load_bios()) - { - /* boot from cartridge */ - scd.cartridge.boot = 0x40; - - /* automatically load associated .iso image */ - // this will only possibly work if a CD and a ROM are provided at the same time, which the frontend - // has no provision for at the moment - if (cdd_load("SECONDARY_CD", (char *)cdc.ram) <= 0) - // no load, so disable CD hardware - system_hw = SYSTEM_MD; - } - else - { - /* if not found, disable CD hardware */ - system_hw = SYSTEM_MD; - } - } - } - - /* Force system hardware if requested */ - if (config.system == SYSTEM_MD) - { - if (!(system_hw & SYSTEM_MD)) - { - /* Mega Drive in MS compatibility mode */ - system_hw = SYSTEM_PBC; - } - } - else if (config.system == SYSTEM_GG) - { - if (system_hw != SYSTEM_GG) - { - /* Game Gear in MS compatibility mode */ - system_hw = SYSTEM_GGMS; - } - } - else if (config.system) - { - system_hw = config.system; - } - - /* restore previous input settings */ - if (old_system[0] != -1) - { - input.system[0] = old_system[0]; - } - if (old_system[1] != -1) - { - input.system[1] = old_system[1]; - } - - /* default gun settings */ - input.x_offset = (input.system[1] == SYSTEM_MENACER) ? 64 : 0; - input.y_offset = 0; - - /* autodetect gun support */ - if (strstr(rominfo.international,"MENACER") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 82; - input.y_offset = 0; - } - else if (strstr(rominfo.international,"T2 ; THE ARCADE GAME") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 133; - input.y_offset = -8; - } - else if (strstr(rominfo.international,"BODY COUNT") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 68; - input.y_offset = -24; - } - else if (strstr(rominfo.international,"CORPSE KILLER") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 64; - input.y_offset = -8; - } - else if (strstr(rominfo.international,"CRIME PATROL") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 61; - input.y_offset = 0; - } - else if (strstr(rominfo.international,"MAD DOG II THE LOST GOLD") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 70; - input.y_offset = 18; - } - else if (strstr(rominfo.international,"MAD DOG MCCREE") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 49; - input.y_offset = 0; - } - else if (strstr(rominfo.international,"WHO SHOT JOHNNY ROCK?") != NULL) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force MENACER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_MENACER; - input.x_offset = 60; - input.y_offset = 30; - } - else if ((strstr(rominfo.international,"LETHAL ENFORCERS") != NULL) || - (strstr(rominfo.international,"SNATCHER") != NULL)) - { - /* save current setting */ - if (old_system[0] == -1) - { - old_system[0] = input.system[0]; - } - if (old_system[1] == -1) - { - old_system[1] = input.system[1]; - } - - /* force JUSTIFIER configuration */ - input.system[0] = SYSTEM_MD_GAMEPAD; - input.system[1] = SYSTEM_JUSTIFIER; - input.x_offset = (strstr(rominfo.international,"GUN FIGHTERS") != NULL) ? 24 : 0; - input.y_offset = 0; - } - - return(1); -} - -/**************************************************************************** - * get_region - * - * Set console region from ROM header passed as parameter or - * from previous auto-detection (if NULL) - * - ****************************************************************************/ -void get_region(char *romheader) -{ - /* region auto-detection ? */ - if (romheader) - { - /* Mega CD image */ - if (system_hw == SYSTEM_MCD) - { - /* security code */ - switch (romheader[0x20b]) - { - case 0x7a: - region_code = REGION_USA; - break; - - case 0x64: - region_code = REGION_EUROPE; - break; - - default: - region_code = REGION_JAPAN_NTSC; - break; - } - } - - /* 16-bit cartridge */ - else if (system_hw & SYSTEM_MD) - { - /* country codes used to differentiate region */ - /* 0001 = japan ntsc (1) */ - /* 0010 = japan pal (2) -> does not exist ? */ - /* 0100 = usa (4) */ - /* 1000 = europe (8) */ - int country = 0; - - /* from Gens */ - if (!memcmp(rominfo.country, "eur", 3)) country |= 8; - else if (!memcmp(rominfo.country, "EUR", 3)) country |= 8; - else if (!memcmp(rominfo.country, "jap", 3)) country |= 1; - else if (!memcmp(rominfo.country, "JAP", 3)) country |= 1; - else if (!memcmp(rominfo.country, "usa", 3)) country |= 4; - else if (!memcmp(rominfo.country, "USA", 3)) country |= 4; - else - { - int i; - char c; - - /* look for each characters */ - for(i = 0; i < 4; i++) - { - c = toupper((int)rominfo.country[i]); - - if (c == 'U') country |= 4; - else if (c == 'J') country |= 1; - else if (c == 'E') country |= 8; - else if (c == 'K') country |= 1; - else if (c < 16) country |= c; - else if ((c >= '0') && (c <= '9')) country |= c - '0'; - else if ((c >= 'A') && (c <= 'F')) country |= c - 'A' + 10; - } - } - - /* set default console region (USA > JAPAN > EUROPE) */ - if (country & 4) region_code = REGION_USA; - else if (country & 1) region_code = REGION_JAPAN_NTSC; - else if (country & 8) region_code = REGION_EUROPE; - else if (country & 2) region_code = REGION_JAPAN_PAL; - else region_code = REGION_USA; - - /* some games need specific region settings but have wrong header*/ - if (((strstr(rominfo.product,"T-45033") != NULL) && (rominfo.checksum == 0x0F81)) || /* Alisia Dragon (Europe) */ - (strstr(rominfo.product,"T-69046-50") != NULL) || /* Back to the Future III (Europe) */ - (strstr(rominfo.product,"T-120106-00") != NULL) || /* Brian Lara Cricket (Europe) */ - (strstr(rominfo.product,"T-70096 -00") != NULL)) /* Muhammad Ali Heavyweight Boxing (Europe) */ - { - /* need PAL settings */ - region_code = REGION_EUROPE; - } - else if ((rominfo.realchecksum == 0x532e) && (strstr(rominfo.product,"1011-00") != NULL)) - { - /* On Dal Jang Goon (Korea) needs JAPAN region code */ - region_code = REGION_JAPAN_NTSC; - } - } - - /* 8-bit cartridge */ - else - { - region_code = sms_cart_region_detect(); - } - - /* save auto-detected region */ - rom_region = region_code; - } - else - { - /* restore auto-detected region */ - region_code = rom_region; - } - - /* force console region if requested */ - if (config.region_detect == 1) region_code = REGION_USA; - else if (config.region_detect == 2) region_code = REGION_EUROPE; - else if (config.region_detect == 3) region_code = REGION_JAPAN_NTSC; - else if (config.region_detect == 4) region_code = REGION_JAPAN_PAL; - - /* autodetect PAL/NTSC timings */ - vdp_pal = (region_code >> 6) & 0x01; - - /* autodetect PAL/NTSC master clock */ - system_clock = vdp_pal ? MCLOCK_PAL : MCLOCK_NTSC; - - /* force PAL/NTSC timings if requested */ - if (config.vdp_mode == 1) vdp_pal = 0; - else if (config.vdp_mode == 2) vdp_pal = 1; - - /* force PAL/NTSC master clock if requested */ - if (config.master_clock == 1) system_clock = MCLOCK_NTSC; - else if (config.master_clock == 2) system_clock = MCLOCK_PAL; -} - - -/**************************************************************************** - * get_company (Softdev - 2006) - * - * Try to determine which company made this rom - * - * Ok, for some reason there's no standard for this. - * It seems that there can be pretty much anything you like following the - * copyright (C) symbol! - ****************************************************************************/ -char *get_company(void) -{ - char *s; - int i; - char company[10]; - - for (i = 3; i < 8; i++) - { - company[i - 3] = rominfo.copyright[i]; - } - company[5] = 0; - - /** OK, first look for a hyphen - * Capcom use T-12 for example - */ - s = strstr (company, "-"); - if (s != NULL) - { - s++; - strcpy (company, s); - } - - /** Strip any trailing spaces **/ - for (i = strlen (company) - 1; i >= 0; i--) - if (company[i] == 32) - company[i] = 0; - - if (strlen (company) == 0) - return (char *)companyinfo[MAXCOMPANY - 1].company; - - for (i = 0; i < MAXCOMPANY - 1; i++) - { - if (!(strncmp (company, companyinfo[i].companyid, strlen (company)))) - return (char *)companyinfo[i].company; - } - - return (char *)companyinfo[MAXCOMPANY - 1].company; -} - -/**************************************************************************** - * get_peripheral (Softdev - 2006) - * - * Return peripheral name based on header code - * - ****************************************************************************/ -char *get_peripheral(int index) -{ - if (index < MAXPERIPHERALS) - return (char *)peripheralinfo[index].pName; - return (char *)companyinfo[MAXCOMPANY - 1].company; -} - diff --git a/waterbox/gpgx/core/loadrom.h b/waterbox/gpgx/core/loadrom.h deleted file mode 100644 index 849915b2e9..0000000000 --- a/waterbox/gpgx/core/loadrom.h +++ /dev/null @@ -1,75 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * ROM Loading Support - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _LOADROM_H_ -#define _LOADROM_H_ - -#define MAXROMSIZE (32*1024*1024) - -typedef struct -{ - char consoletype[18]; /* Genesis or Mega Drive */ - char copyright[18]; /* Copyright message */ - char domestic[50]; /* Domestic name of ROM */ - char international[50]; /* International name of ROM */ - char ROMType[4]; /* Boot ROM (BR), Educational (AL) or Game (GM) program */ - char product[14]; /* Product serial number */ - unsigned short checksum; /* ROM Checksum (header) */ - unsigned short realchecksum; /* ROM Checksum (calculated) */ - unsigned int romstart; /* ROM start address */ - unsigned int romend; /* ROM end address */ - char country[18]; /* Country flag */ - uint16 peripherals; /* Supported peripherals */ -} ROMINFO; - - -/* Global variables */ -extern ROMINFO rominfo; -extern uint8 romtype; - -/* Function prototypes */ -extern int load_bios(void); -extern int load_rom(const char *filename); -extern void get_region(char *romheader); -extern char *get_company(void); -extern char *get_peripheral(int index); -extern void getrominfo(char *romheader); - -#endif /* _LOADROM_H_ */ - diff --git a/waterbox/gpgx/core/m68k/m68k.h b/waterbox/gpgx/core/m68k/m68k.h deleted file mode 100644 index d93fdd20b4..0000000000 --- a/waterbox/gpgx/core/m68k/m68k.h +++ /dev/null @@ -1,389 +0,0 @@ -#ifndef M68K__HEADER -#define M68K__HEADER - -/* ======================================================================== */ -/* ========================= LICENSING & COPYRIGHT ======================== */ -/* ======================================================================== */ -/* - * MUSASHI - * Version 3.32 - * - * A portable Motorola M680x0 processor emulation engine. - * Copyright Karl Stenerud. All rights reserved. - * - * This code may be freely used for non-commercial purposes as long as this - * copyright notice remains unaltered in the source code and any binary files - * containing this code in compiled form. - * - * All other licensing terms must be negotiated with the author - * (Karl Stenerud). - * - * The latest version of this code can be obtained at: - * http://kstenerud.cjb.net - */ - - /* Modified by Eke-Eke for Genesis Plus GX: - - - removed unused stuff to reduce memory usage / optimize execution (multiple CPU types support, NMI support, ...) - - moved stuff to compile statically in a single object file - - implemented support for global cycle count (shared by 68k & Z80 CPU) - - added support for interrupt latency (Sesame's Street Counting Cafe, Fatal Rewind) - - added proper cycle use on reset - - added cycle accurate timings for MUL/DIV instructions (thanks to Jorge Cwik !) - - fixed undocumented flags for DIV instructions (Blood Shot) - - added MAIN-CPU & SUB-CPU support for Mega CD emulation - - */ - -/* ======================================================================== */ -/* ================================ INCLUDES ============================== */ -/* ======================================================================== */ - -#include -#include "macros.h" - -/* ======================================================================== */ -/* ==================== ARCHITECTURE-DEPENDANT DEFINES ==================== */ -/* ======================================================================== */ - -/* Check for > 32bit sizes */ -#if UINT_MAX > 0xffffffff - #define M68K_INT_GT_32_BIT 1 -#else - #define M68K_INT_GT_32_BIT 0 -#endif - -/* Data types used in this emulation core */ -#undef sint8 -#undef sint16 -#undef sint32 -#undef sint64 -#undef uint8 -#undef uint16 -#undef uint32 -#undef uint64 -#undef sint -#undef uint - -#define sint8 signed char /* ASG: changed from char to signed char */ -#define sint16 signed short -#define sint32 signed int /* AWJ: changed from long to int */ -#define uint8 unsigned char -#define uint16 unsigned short -#define uint32 unsigned int /* AWJ: changed from long to int */ - -/* signed and unsigned int must be at least 32 bits wide */ -#define sint signed int -#define uint unsigned int - - -#if M68K_USE_64_BIT -#define sint64 signed long long -#define uint64 unsigned long long -#else -#define sint64 sint32 -#define uint64 uint32 -#endif /* M68K_USE_64_BIT */ - - - -/* Allow for architectures that don't have 8-bit sizes */ -/*#if UCHAR_MAX == 0xff*/ - #define MAKE_INT_8(A) (sint8)(A) -/*#else - #undef sint8 - #define sint8 signed int - #undef uint8 - #define uint8 unsigned int - INLINE sint MAKE_INT_8(uint value) - { - return (value & 0x80) ? value | ~0xff : value & 0xff; - }*/ -/*#endif *//* UCHAR_MAX == 0xff */ - - -/* Allow for architectures that don't have 16-bit sizes */ -/*#if USHRT_MAX == 0xffff*/ - #define MAKE_INT_16(A) (sint16)(A) -/*#else - #undef sint16 - #define sint16 signed int - #undef uint16 - #define uint16 unsigned int - INLINE sint MAKE_INT_16(uint value) - { - return (value & 0x8000) ? value | ~0xffff : value & 0xffff; - }*/ -/*#endif *//* USHRT_MAX == 0xffff */ - - -/* Allow for architectures that don't have 32-bit sizes */ -/*#if UINT_MAX == 0xffffffff*/ - #define MAKE_INT_32(A) (sint32)(A) -/*#else - #undef sint32 - #define sint32 signed int - #undef uint32 - #define uint32 unsigned int - INLINE sint MAKE_INT_32(uint value) - { - return (value & 0x80000000) ? value | ~0xffffffff : value & 0xffffffff; - }*/ -/*#endif *//* UINT_MAX == 0xffffffff */ - - - -/* ======================================================================== */ -/* ============================ GENERAL DEFINES =========================== */ - -/* ======================================================================== */ - -/* There are 7 levels of interrupt to the 68K. - * A transition from < 7 to 7 will cause a non-maskable interrupt (NMI). - */ -#define M68K_IRQ_NONE 0 -#define M68K_IRQ_1 1 -#define M68K_IRQ_2 2 -#define M68K_IRQ_3 3 -#define M68K_IRQ_4 4 -#define M68K_IRQ_5 5 -#define M68K_IRQ_6 6 -#define M68K_IRQ_7 7 - - -/* Special interrupt acknowledge values. - * Use these as special returns from the interrupt acknowledge callback - * (specified later in this header). - */ - -/* Causes an interrupt autovector (0x18 + interrupt level) to be taken. - * This happens in a real 68K if VPA or AVEC is asserted during an interrupt - * acknowledge cycle instead of DTACK. - */ -#define M68K_INT_ACK_AUTOVECTOR 0xffffffff - -/* Causes the spurious interrupt vector (0x18) to be taken - * This happens in a real 68K if BERR is asserted during the interrupt - * acknowledge cycle (i.e. no devices responded to the acknowledge). - */ -#define M68K_INT_ACK_SPURIOUS 0xfffffffe - - -/* Registers used by m68k_get_reg() and m68k_set_reg() */ -typedef enum -{ - /* Real registers */ - M68K_REG_D0, /* Data registers */ - M68K_REG_D1, - M68K_REG_D2, - M68K_REG_D3, - M68K_REG_D4, - M68K_REG_D5, - M68K_REG_D6, - M68K_REG_D7, - M68K_REG_A0, /* Address registers */ - M68K_REG_A1, - M68K_REG_A2, - M68K_REG_A3, - M68K_REG_A4, - M68K_REG_A5, - M68K_REG_A6, - M68K_REG_A7, - M68K_REG_PC, /* Program Counter */ - M68K_REG_SR, /* Status Register */ - M68K_REG_SP, /* The current Stack Pointer (located in A7) */ - M68K_REG_USP, /* User Stack Pointer */ - M68K_REG_ISP, /* Interrupt Stack Pointer */ - -#if M68K_EMULATE_PREFETCH - /* Assumed registers */ - /* These are cheat registers which emulate the 1-longword prefetch - * present in the 68000 and 68010. - */ - M68K_REG_PREF_ADDR, /* Last prefetch address */ - M68K_REG_PREF_DATA, /* Last prefetch data */ -#endif - - /* Convenience registers */ - M68K_REG_IR /* Instruction register */ -} m68k_register_t; - - -/* 68k memory map structure */ -typedef struct -{ - unsigned char *base; /* memory-based access (ROM, RAM) */ - unsigned int (*read8)(unsigned int address); /* I/O byte read access */ - unsigned int (*read16)(unsigned int address); /* I/O word read access */ - void (*write8)(unsigned int address, unsigned int data); /* I/O byte write access */ - void (*write16)(unsigned int address, unsigned int data); /* I/O word write access */ -} cpu_memory_map; - -/* 68k idle loop detection */ -typedef struct -{ - uint pc; - uint cycle; - uint detected; -} cpu_idle_t; - -typedef struct -{ - cpu_memory_map memory_map[256]; /* memory mapping */ - - cpu_idle_t poll; /* polling detection */ // 0x1400 - - uint cycles; /* current master cycle count */ - uint cycle_end; /* aimed master cycle count for current execution frame */ - - uint dar[16]; /* Data and Address Registers */ - uint pc; /* Program Counter */ - uint sp[5]; /* User and Interrupt Stack Pointers */ - uint ir; /* Instruction Register */ - uint t1_flag; /* Trace 1 */ - uint s_flag; /* Supervisor */ - uint x_flag; /* Extend */ - uint n_flag; /* Negative */ - uint not_z_flag; /* Zero, inverted for speedups */ - uint v_flag; /* Overflow */ - uint c_flag; /* Carry */ - uint int_mask; /* I0-I2 */ - uint int_level; /* State of interrupt pins IPL0-IPL2 -- ASG: changed from ints_pending */ - uint stopped; /* Stopped state */ - - uint pref_addr; /* Last prefetch address */ - uint pref_data; /* Data in the prefetch queue */ - - uint instr_mode; /* Stores whether we are in instruction mode or group 0/1 exception mode */ - uint run_mode; /* Stores whether we are processing a reset, bus error, address error, or something else */ - uint aerr_enabled; /* Enables/deisables address error checks at runtime */ - jmp_buf aerr_trap; /* Address error jump */ - uint aerr_address; /* Address error location */ - uint aerr_write_mode; /* Address error write mode */ - uint aerr_fc; /* Address error FC code */ - - uint tracing; /* Tracing enable flag */ - - uint address_space; /* Current FC code */ - - /* Callbacks to host */ - int (*int_ack_callback)(int int_line); /* Interrupt Acknowledge */ - void (*reset_instr_callback)(void); /* Called when a RESET instruction is encountered */ - int (*tas_instr_callback)(void); /* Called when a TAS instruction is encountered, allows / disallows writeback */ - void (*set_fc_callback)(unsigned int new_fc); /* Called when the CPU function code changes */ -} m68ki_cpu_core; - -/* CPU cores */ -extern m68ki_cpu_core m68k; -extern m68ki_cpu_core s68k; - - -/* ======================================================================== */ -/* ============================== CALLBACKS =============================== */ -/* ======================================================================== */ - -/* These functions allow you to set callbacks to the host when specific events - * occur. Note that you must enable the corresponding value in m68kconf.h - * in order for these to do anything useful. - * Note: I have defined default callbacks which are used if you have enabled - * the corresponding #define in m68kconf.h but either haven't assigned a - * callback or have assigned a callback of NULL. - */ - -#if M68K_EMULATE_INT_ACK == OPT_ON -/* Set the callback for an interrupt acknowledge. - * You must enable M68K_EMULATE_INT_ACK in m68kconf.h. - * The CPU will call the callback with the interrupt level being acknowledged. - * The host program must return either a vector from 0x02-0xff, or one of the - * special interrupt acknowledge values specified earlier in this header. - * If this is not implemented, the CPU will always assume an autovectored - * interrupt, and will automatically clear the interrupt request when it - * services the interrupt. - * Default behavior: return M68K_INT_ACK_AUTOVECTOR. - */ -void m68k_set_int_ack_callback(int (*callback)(int int_level)); -#endif - -#if M68K_EMULATE_RESET == OPT_ON -/* Set the callback for the RESET instruction. - * You must enable M68K_EMULATE_RESET in m68kconf.h. - * The CPU calls this callback every time it encounters a RESET instruction. - * Default behavior: do nothing. - */ -void m68k_set_reset_instr_callback(void (*callback)(void)); -#endif - -#if M68K_TAS_HAS_CALLBACK == OPT_ON -/* Set the callback for the TAS instruction. - * You must enable M68K_TAS_HAS_CALLBACK in m68kconf.h. - * The CPU calls this callback every time it encounters a TAS instruction. - * Default behavior: return 1, allow writeback. - */ -void m68k_set_tas_instr_callback(int (*callback)(void)); -#endif - -#if M68K_EMULATE_FC == OPT_ON -/* Set the callback for CPU function code changes. - * You must enable M68K_EMULATE_FC in m68kconf.h. - * The CPU calls this callback with the function code before every memory - * access to set the CPU's function code according to what kind of memory - * access it is (supervisor/user, program/data and such). - * Default behavior: do nothing. - */ -void m68k_set_fc_callback(void (*callback)(unsigned int new_fc)); -#endif - - -/* ======================================================================== */ -/* ====================== FUNCTIONS TO ACCESS THE CPU ===================== */ -/* ======================================================================== */ - -/* Do whatever initialisations the core requires. Should be called - * at least once at init time. - */ -extern void m68k_init(void); -extern void s68k_init(void); - -/* Pulse the RESET pin on the CPU. - * You *MUST* reset the CPU at least once to initialize the emulation - */ -extern void m68k_pulse_reset(void); -extern void s68k_pulse_reset(void); - -/* Run until given cycle count is reached */ -extern void m68k_run(unsigned int cycles); -extern void s68k_run(unsigned int cycles); - -/* Set the IPL0-IPL2 pins on the CPU (IRQ). - * A transition from < 7 to 7 will cause a non-maskable interrupt (NMI). - * Setting IRQ to 0 will clear an interrupt request. - */ -extern void m68k_set_irq(unsigned int int_level); -extern void m68k_set_irq_delay(unsigned int int_level); -extern void m68k_update_irq(unsigned int mask); -extern void s68k_update_irq(unsigned int mask); - -/* Halt the CPU as if you pulsed the HALT pin. */ -extern void m68k_pulse_halt(void); -extern void m68k_clear_halt(void); -extern void s68k_pulse_halt(void); -extern void s68k_clear_halt(void); - - -/* Peek at the internals of a CPU context. This can either be a context - * retrieved using m68k_get_context() or the currently running context. - * If context is NULL, the currently running CPU context will be used. - */ -extern unsigned int m68k_get_reg(m68k_register_t reg); -extern unsigned int s68k_get_reg(m68k_register_t reg); - -/* Poke values into the internals of the currently running CPU context */ -extern void m68k_set_reg(m68k_register_t reg, unsigned int value); -extern void s68k_set_reg(m68k_register_t reg, unsigned int value); - - -/* ======================================================================== */ -/* ============================== END OF FILE ============================= */ -/* ======================================================================== */ - -#endif /* M68K__HEADER */ diff --git a/waterbox/gpgx/core/m68k/m68kconf.h b/waterbox/gpgx/core/m68k/m68kconf.h deleted file mode 100644 index 5473fa0def..0000000000 --- a/waterbox/gpgx/core/m68k/m68kconf.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef M68KCONF__HEADER -#define M68KCONF__HEADER - -/* ======================================================================== */ -/* ======================== MAIN 68K CONFIGURATION ======================== */ -/* ======================================================================== */ - -/* Configuration switches. - * Use OPT_SPECIFY_HANDLER for configuration options that allow callbacks. - * OPT_SPECIFY_HANDLER causes the core to link directly to the function - * or macro you specify, rather than using callback functions whose pointer - * must be passed in using m68k_set_xxx_callback(). - */ -#define OPT_OFF 0 -#define OPT_ON 1 -#define OPT_SPECIFY_HANDLER 2 - -/* If ON, the CPU will call m68k_write_32_pd() when it executes move.l with a - * predecrement destination EA mode instead of m68k_write_32(). - * To simulate real 68k behavior, m68k_write_32_pd() must first write the high - * word to [address+2], and then write the low word to [address]. - */ -#define M68K_SIMULATE_PD_WRITES OPT_OFF - -/* If ON, CPU will call the interrupt acknowledge callback when it services an - * interrupt. - * If off, all interrupts will be autovectored and all interrupt requests will - * auto-clear when the interrupt is serviced. - */ -#define M68K_EMULATE_INT_ACK OPT_SPECIFY_HANDLER -#define M68K_INT_ACK_CALLBACK(A) vdp_68k_irq_ack(A) - -/* If ON, CPU will call the output reset callback when it encounters a reset - * instruction. - */ -#define M68K_EMULATE_RESET OPT_OFF -#define M68K_RESET_CALLBACK() your_reset_handler_function() - -/* If ON, CPU will call the callback when it encounters a tas - * instruction. - */ -#define M68K_TAS_HAS_CALLBACK OPT_OFF -#define M68K_TAS_CALLBACK() your_tas_handler_function() - -/* If ON, CPU will call the set fc callback on every memory access to - * differentiate between user/supervisor, program/data access like a real - * 68000 would. This should be enabled and the callback should be set if you - * want to properly emulate the m68010 or higher. (moves uses function codes - * to read/write data from different address spaces) - */ -#define M68K_EMULATE_FC OPT_OFF -#define M68K_SET_FC_CALLBACK(A) your_set_fc_handler_function(A) - -/* If ON, the CPU will monitor the trace flags and take trace exceptions - */ -#define M68K_EMULATE_TRACE OPT_OFF - -/* If ON, the CPU will emulate the 4-byte prefetch queue of a real 68000 */ -#define M68K_EMULATE_PREFETCH OPT_OFF - -/* If ON, the CPU will generate address error exceptions if it tries to - * access a word or longword at an odd address. - * NOTE: This is only emulated properly for 68000 mode. - */ -#define M68K_EMULATE_ADDRESS_ERROR OPT_ON - -/* If ON and previous option is also ON, address error exceptions will - also be checked when fetching instructions. Disabling this can help - speeding up emulation while still emulating address error exceptions - on other memory access if needed. - * NOTE: This is only emulated properly for 68000 mode. - */ -#define M68K_CHECK_PC_ADDRESS_ERROR OPT_OFF - - -/* ----------------------------- COMPATIBILITY ---------------------------- */ - -/* The following options set optimizations that violate the current ANSI - * standard, but will be compliant under the forthcoming C9X standard. - */ - - -/* If ON, the enulation core will use 64-bit integers to speed up some - * operations. -*/ -#define M68K_USE_64_BIT OPT_OFF - - -/* ======================================================================== */ -/* ============================== END OF FILE ============================= */ -/* ======================================================================== */ - -#endif /* M68KCONF__HEADER */ diff --git a/waterbox/gpgx/core/m68k/m68kcpu.c b/waterbox/gpgx/core/m68k/m68kcpu.c deleted file mode 100644 index d3a6ae23a0..0000000000 --- a/waterbox/gpgx/core/m68k/m68kcpu.c +++ /dev/null @@ -1,446 +0,0 @@ -#include "../cinterface/callbacks.h" - -/* ======================================================================== */ -/* MAIN 68K CORE */ -/* ======================================================================== */ - -extern int vdp_68k_irq_ack(int int_level); - -#define m68ki_cpu m68k -#define MUL (7) - -/* ======================================================================== */ -/* ================================ INCLUDES ============================== */ -/* ======================================================================== */ - -#ifndef BUILD_TABLES -#include "m68ki_cycles.h" -#endif - -#include "m68kconf.h" -#include "m68kcpu.h" -#include "m68kops.h" -#include "shared.h" - -/* ======================================================================== */ -/* ================================= DATA ================================= */ -/* ======================================================================== */ - -#ifdef BUILD_TABLES -static unsigned char m68ki_cycles[0x10000]; -#endif - -static int irq_latency; - -m68ki_cpu_core m68k; - - -/* ======================================================================== */ -/* =============================== CALLBACKS ============================== */ -/* ======================================================================== */ - -/* Default callbacks used if the callback hasn't been set yet, or if the - * callback is set to NULL - */ - -#if M68K_EMULATE_INT_ACK == OPT_ON -/* Interrupt acknowledge */ -static int default_int_ack_callback(int int_level) -{ - CPU_INT_LEVEL = 0; - return M68K_INT_ACK_AUTOVECTOR; -} -#endif - -#if M68K_EMULATE_RESET == OPT_ON -/* Called when a reset instruction is executed */ -static void default_reset_instr_callback(void) -{ -} -#endif - -#if M68K_TAS_HAS_CALLBACK == OPT_ON -/* Called when a tas instruction is executed */ -static int default_tas_instr_callback(void) -{ - return 1; // allow writeback -} -#endif - -#if M68K_EMULATE_FC == OPT_ON -/* Called every time there's bus activity (read/write to/from memory */ -static void default_set_fc_callback(unsigned int new_fc) -{ -} -#endif - - -/* ======================================================================== */ -/* ================================= API ================================== */ -/* ======================================================================== */ - -/* Access the internals of the CPU */ -unsigned int m68k_get_reg(m68k_register_t regnum) -{ - switch(regnum) - { - case M68K_REG_D0: return m68ki_cpu.dar[0]; - case M68K_REG_D1: return m68ki_cpu.dar[1]; - case M68K_REG_D2: return m68ki_cpu.dar[2]; - case M68K_REG_D3: return m68ki_cpu.dar[3]; - case M68K_REG_D4: return m68ki_cpu.dar[4]; - case M68K_REG_D5: return m68ki_cpu.dar[5]; - case M68K_REG_D6: return m68ki_cpu.dar[6]; - case M68K_REG_D7: return m68ki_cpu.dar[7]; - case M68K_REG_A0: return m68ki_cpu.dar[8]; - case M68K_REG_A1: return m68ki_cpu.dar[9]; - case M68K_REG_A2: return m68ki_cpu.dar[10]; - case M68K_REG_A3: return m68ki_cpu.dar[11]; - case M68K_REG_A4: return m68ki_cpu.dar[12]; - case M68K_REG_A5: return m68ki_cpu.dar[13]; - case M68K_REG_A6: return m68ki_cpu.dar[14]; - case M68K_REG_A7: return m68ki_cpu.dar[15]; - case M68K_REG_PC: return MASK_OUT_ABOVE_32(m68ki_cpu.pc); - case M68K_REG_SR: return m68ki_cpu.t1_flag | - (m68ki_cpu.s_flag << 11) | - m68ki_cpu.int_mask | - ((m68ki_cpu.x_flag & XFLAG_SET) >> 4) | - ((m68ki_cpu.n_flag & NFLAG_SET) >> 4) | - ((!m68ki_cpu.not_z_flag) << 2) | - ((m68ki_cpu.v_flag & VFLAG_SET) >> 6) | - ((m68ki_cpu.c_flag & CFLAG_SET) >> 8); - case M68K_REG_SP: return m68ki_cpu.dar[15]; - case M68K_REG_USP: return m68ki_cpu.s_flag ? m68ki_cpu.sp[0] : m68ki_cpu.dar[15]; - case M68K_REG_ISP: return m68ki_cpu.s_flag ? m68ki_cpu.dar[15] : m68ki_cpu.sp[4]; -#if M68K_EMULATE_PREFETCH - case M68K_REG_PREF_ADDR: return m68ki_cpu.pref_addr; - case M68K_REG_PREF_DATA: return m68ki_cpu.pref_data; -#endif - case M68K_REG_IR: return m68ki_cpu.ir; - default: return 0; - } -} - -void m68k_set_reg(m68k_register_t regnum, unsigned int value) -{ - switch(regnum) - { - case M68K_REG_D0: REG_D[0] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D1: REG_D[1] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D2: REG_D[2] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D3: REG_D[3] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D4: REG_D[4] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D5: REG_D[5] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D6: REG_D[6] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D7: REG_D[7] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A0: REG_A[0] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A1: REG_A[1] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A2: REG_A[2] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A3: REG_A[3] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A4: REG_A[4] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A5: REG_A[5] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A6: REG_A[6] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A7: REG_A[7] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_PC: m68ki_jump(MASK_OUT_ABOVE_32(value)); return; - case M68K_REG_SR: m68ki_set_sr(value); return; - case M68K_REG_SP: REG_SP = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_USP: if(FLAG_S) - REG_USP = MASK_OUT_ABOVE_32(value); - else - REG_SP = MASK_OUT_ABOVE_32(value); - return; - case M68K_REG_ISP: if(FLAG_S) - REG_SP = MASK_OUT_ABOVE_32(value); - else - REG_ISP = MASK_OUT_ABOVE_32(value); - return; - case M68K_REG_IR: REG_IR = MASK_OUT_ABOVE_16(value); return; -#if M68K_EMULATE_PREFETCH - case M68K_REG_PREF_ADDR: CPU_PREF_ADDR = MASK_OUT_ABOVE_32(value); return; -#endif - default: return; - } -} - -/* Set the callbacks */ -#if M68K_EMULATE_INT_ACK == OPT_ON -void m68k_set_int_ack_callback(int (*callback)(int int_level)) -{ - CALLBACK_INT_ACK = callback ? callback : default_int_ack_callback; -} -#endif - -#if M68K_EMULATE_RESET == OPT_ON -void m68k_set_reset_instr_callback(void (*callback)(void)) -{ - CALLBACK_RESET_INSTR = callback ? callback : default_reset_instr_callback; -} -#endif - -#if M68K_TAS_HAS_CALLBACK == OPT_ON -void m68k_set_tas_instr_callback(int (*callback)(void)) -{ - CALLBACK_TAS_INSTR = callback ? callback : default_tas_instr_callback; -} -#endif - -#if M68K_EMULATE_FC == OPT_ON -void m68k_set_fc_callback(void (*callback)(unsigned int new_fc)) -{ - CALLBACK_SET_FC = callback ? callback : default_set_fc_callback; -} -#endif - -#ifdef LOGVDP -extern void error(char *format, ...); -extern uint16 v_counter; -#endif - -/* ASG: rewrote so that the int_level is a mask of the IPL0/IPL1/IPL2 bits */ -/* KS: Modified so that IPL* bits match with mask positions in the SR - * and cleaned out remenants of the interrupt controller. - */ -void m68k_update_irq(unsigned int mask) -{ - /* Update IRQ level */ - CPU_INT_LEVEL |= (mask << 8); - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] IRQ Level = %d(0x%02x) (%x)\n", v_counter, m68k.cycles/3420, m68k.cycles, m68k.cycles%3420,CPU_INT_LEVEL>>8,FLAG_INT_MASK,m68k_get_reg(M68K_REG_PC)); -#endif -} - -void m68k_set_irq(unsigned int int_level) -{ - /* Set IRQ level */ - CPU_INT_LEVEL = int_level << 8; - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] IRQ Level = %d(0x%02x) (%x)\n", v_counter, m68k.cycles/3420, m68k.cycles, m68k.cycles%3420,CPU_INT_LEVEL>>8,FLAG_INT_MASK,m68k_get_reg(M68K_REG_PC)); -#endif -} - -/* IRQ latency (Fatal Rewind, Sesame's Street Counting Cafe)*/ -void m68k_set_irq_delay(unsigned int int_level) -{ - /* Prevent reentrance */ - if (!irq_latency) - { - /* This is always triggered from MOVE instructions (VDP CTRL port write) */ - /* We just make sure this is not a MOVE.L instruction as we could be in */ - /* the middle of its execution (first memory write). */ - if ((REG_IR & 0xF000) != 0x2000) - { - /* Finish executing current instruction */ - USE_CYCLES(CYC_INSTRUCTION[REG_IR]); - - /* One instruction delay before interrupt */ - irq_latency = 1; - m68ki_trace_t1() /* auto-disable (see m68kcpu.h) */ - m68ki_use_data_space() /* auto-disable (see m68kcpu.h) */ - REG_IR = m68ki_read_imm_16(); - m68ki_instruction_jump_table[REG_IR](); - m68ki_exception_if_trace() /* auto-disable (see m68kcpu.h) */ - irq_latency = 0; - } - - /* Set IRQ level */ - CPU_INT_LEVEL = int_level << 8; - } - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] IRQ Level = %d(0x%02x) (%x)\n", v_counter, m68k.cycles/3420, m68k.cycles, m68k.cycles%3420,CPU_INT_LEVEL>>8,FLAG_INT_MASK,m68k_get_reg(M68K_REG_PC)); -#endif - - /* Check interrupt mask to process IRQ */ - m68ki_check_interrupts(); /* Level triggered (IRQ) */ -} - - -extern uint8 work_ram[0x10000]; /* 68K RAM */ - -void CDLog68k(uint addr, uint flags) -{ - addr &= 0x00FFFFFF; - - //check for sram region first - if(sram.on) - { - if(addr >= sram.start && addr <= sram.end) - { - biz_cdcallback(addr - sram.start, eCDLog_AddrType_SRAM, flags); - return; - } - } - - if(addr < 0x400000) - { - uint block64k_rom; - - //apply memory map to process rom address - unsigned char* block64k = m68ki_cpu.memory_map[((addr)>>16)&0xff].base; - - //outside the ROM range. complex mapping logic/accessories; not sure how to handle any of this - if(block64k < cart.rom || block64k >= cart.rom + cart.romsize) - return; - - block64k_rom = block64k - cart.rom; - addr = ((addr) & 0xffff) + block64k_rom; - - //outside the ROM range somehow - if(addr >= cart.romsize) - return; - - biz_cdcallback(addr, eCDLog_AddrType_MDCART, flags); - return; - } - - if(addr > 0xFF0000) - { - //no memory map needed - biz_cdcallback(addr & 0xFFFF, eCDLog_AddrType_RAM68k, flags); - return; - } -} - -void m68k_run(unsigned int cycles) -{ - /* Make sure CPU is not already ahead */ - if (m68k.cycles >= cycles) - { - return; - } - - /* Check interrupt mask to process IRQ if needed */ - m68ki_check_interrupts(); - - /* Make sure we're not stopped */ - if (CPU_STOPPED) - { - m68k.cycles = cycles; - return; - } - - /* Save end cycles count for when CPU is stopped */ - m68k.cycle_end = cycles; - - /* Return point for when we have an address error (TODO: use goto) */ - m68ki_set_address_error_trap() /* auto-disable (see m68kcpu.h) */ - -#ifdef LOGVDP - error("[%d][%d] m68k run to %d cycles (%x), irq mask = %x (%x)\n", v_counter, m68k.cycles, cycles, m68k.pc,FLAG_INT_MASK, CPU_INT_LEVEL); -#endif - - while (m68k.cycles < cycles) - { - /* Set tracing accodring to T1. */ - m68ki_trace_t1() /* auto-disable (see m68kcpu.h) */ - - /* Set the address space for reads */ - m68ki_use_data_space() /* auto-disable (see m68kcpu.h) */ - - if (biz_execcb) - biz_execcb(REG_PC); - - if(biz_cdcallback) - { - CDLog68k(REG_PC,eCDLog_Flags_Exec68k); - CDLog68k(REG_PC+1,eCDLog_Flags_Exec68k); - } - - biz_lastpc = REG_PC; - - /* Decode next instruction */ - REG_IR = m68ki_read_imm_16(); - - /* Execute instruction */ - m68ki_instruction_jump_table[REG_IR](); - USE_CYCLES(CYC_INSTRUCTION[REG_IR]); - - /* Trace m68k_exception, if necessary */ - m68ki_exception_if_trace(); /* auto-disable (see m68kcpu.h) */ - } -} - -void m68k_init(void) -{ -#ifdef BUILD_TABLES - static uint emulation_initialized = 0; - - /* The first call to this function initializes the opcode handler jump table */ - if(!emulation_initialized) - { - m68ki_build_opcode_table(); - emulation_initialized = 1; - } -#endif - -#if M68K_EMULATE_INT_ACK == OPT_ON - m68k_set_int_ack_callback(NULL); -#endif -#if M68K_EMULATE_RESET == OPT_ON - m68k_set_reset_instr_callback(NULL); -#endif -#if M68K_TAS_HAS_CALLBACK == OPT_ON - m68k_set_tas_instr_callback(NULL); -#endif -#if M68K_EMULATE_FC == OPT_ON - m68k_set_fc_callback(NULL); -#endif -} - -/* Pulse the RESET line on the CPU */ -void m68k_pulse_reset(void) -{ - /* Clear all stop levels */ - CPU_STOPPED = 0; -#if M68K_EMULATE_ADDRESS_ERROR - CPU_RUN_MODE = RUN_MODE_BERR_AERR_RESET; -#endif - - /* Turn off tracing */ - FLAG_T1 = 0; - m68ki_clear_trace() - - /* Interrupt mask to level 7 */ - FLAG_INT_MASK = 0x0700; - CPU_INT_LEVEL = 0; - irq_latency = 0; - - /* Go to supervisor mode */ - m68ki_set_s_flag(SFLAG_SET); - - /* Invalidate the prefetch queue */ -#if M68K_EMULATE_PREFETCH - /* Set to arbitrary number since our first fetch is from 0 */ - CPU_PREF_ADDR = 0x1000; -#endif /* M68K_EMULATE_PREFETCH */ - - /* Read the initial stack pointer and program counter */ - m68ki_jump(0); - REG_SP = m68ki_read_imm_32(); - REG_PC = m68ki_read_imm_32(); - m68ki_jump(REG_PC); - -#if M68K_EMULATE_ADDRESS_ERROR - CPU_RUN_MODE = RUN_MODE_NORMAL; -#endif - - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_RESET]); -} - -void m68k_pulse_halt(void) -{ - /* Pulse the HALT line on the CPU */ - CPU_STOPPED |= STOP_LEVEL_HALT; -} - -void m68k_clear_halt(void) -{ - /* Clear the HALT line on the CPU */ - CPU_STOPPED &= ~STOP_LEVEL_HALT; -} - -/* ======================================================================== */ -/* ============================== END OF FILE ============================= */ -/* ======================================================================== */ diff --git a/waterbox/gpgx/core/m68k/m68kcpu.h b/waterbox/gpgx/core/m68k/m68kcpu.h deleted file mode 100644 index eaf747e9b2..0000000000 --- a/waterbox/gpgx/core/m68k/m68kcpu.h +++ /dev/null @@ -1,1453 +0,0 @@ -#ifndef M68KCPU__HEADER -#define M68KCPU__HEADER - -/* ======================================================================== */ -/* GENERIC 68K CORE */ -/* ======================================================================== */ - -#include -#include -#include - -#if M68K_EMULATE_ADDRESS_ERROR -#include -#endif /* M68K_EMULATE_ADDRESS_ERROR */ - -#include "m68k.h" -#include "mem68k.h" -#include "../cinterface/callbacks.h" - -void CDLog68k(uint addr, uint flags); - -/* ======================================================================== */ -/* ============================ GENERAL DEFINES =========================== */ -/* ======================================================================== */ - -/* Exception Vectors handled by emulation */ -#define EXCEPTION_RESET 0 -#define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */ -#define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */ -#define EXCEPTION_ILLEGAL_INSTRUCTION 4 -#define EXCEPTION_ZERO_DIVIDE 5 -#define EXCEPTION_CHK 6 -#define EXCEPTION_TRAPV 7 -#define EXCEPTION_PRIVILEGE_VIOLATION 8 -#define EXCEPTION_TRACE 9 -#define EXCEPTION_1010 10 -#define EXCEPTION_1111 11 -#define EXCEPTION_FORMAT_ERROR 14 -#define EXCEPTION_UNINITIALIZED_INTERRUPT 15 -#define EXCEPTION_SPURIOUS_INTERRUPT 24 -#define EXCEPTION_INTERRUPT_AUTOVECTOR 24 -#define EXCEPTION_TRAP_BASE 32 - -/* Function codes set by CPU during data/address bus activity */ -#define FUNCTION_CODE_USER_DATA 1 -#define FUNCTION_CODE_USER_PROGRAM 2 -#define FUNCTION_CODE_SUPERVISOR_DATA 5 -#define FUNCTION_CODE_SUPERVISOR_PROGRAM 6 -#define FUNCTION_CODE_CPU_SPACE 7 - -/* Different ways to stop the CPU */ -#define STOP_LEVEL_STOP 1 -#define STOP_LEVEL_HALT 2 - -/* Used for 68000 address error processing */ -#if M68K_EMULATE_ADDRESS_ERROR -#define INSTRUCTION_YES 0 -#define INSTRUCTION_NO 0x08 -#define MODE_READ 0x10 -#define MODE_WRITE 0 - -#define RUN_MODE_NORMAL 0 -#define RUN_MODE_BERR_AERR_RESET 1 -#endif - -#ifndef NULL -#define NULL ((void*)0) -#endif - -/* ======================================================================== */ -/* ================================ MACROS ================================ */ -/* ======================================================================== */ - - -/* ---------------------------- General Macros ---------------------------- */ - -/* Bit Isolation Macros */ -#define BIT_0(A) ((A) & 0x00000001) -#define BIT_1(A) ((A) & 0x00000002) -#define BIT_2(A) ((A) & 0x00000004) -#define BIT_3(A) ((A) & 0x00000008) -#define BIT_4(A) ((A) & 0x00000010) -#define BIT_5(A) ((A) & 0x00000020) -#define BIT_6(A) ((A) & 0x00000040) -#define BIT_7(A) ((A) & 0x00000080) -#define BIT_8(A) ((A) & 0x00000100) -#define BIT_9(A) ((A) & 0x00000200) -#define BIT_A(A) ((A) & 0x00000400) -#define BIT_B(A) ((A) & 0x00000800) -#define BIT_C(A) ((A) & 0x00001000) -#define BIT_D(A) ((A) & 0x00002000) -#define BIT_E(A) ((A) & 0x00004000) -#define BIT_F(A) ((A) & 0x00008000) -#define BIT_10(A) ((A) & 0x00010000) -#define BIT_11(A) ((A) & 0x00020000) -#define BIT_12(A) ((A) & 0x00040000) -#define BIT_13(A) ((A) & 0x00080000) -#define BIT_14(A) ((A) & 0x00100000) -#define BIT_15(A) ((A) & 0x00200000) -#define BIT_16(A) ((A) & 0x00400000) -#define BIT_17(A) ((A) & 0x00800000) -#define BIT_18(A) ((A) & 0x01000000) -#define BIT_19(A) ((A) & 0x02000000) -#define BIT_1A(A) ((A) & 0x04000000) -#define BIT_1B(A) ((A) & 0x08000000) -#define BIT_1C(A) ((A) & 0x10000000) -#define BIT_1D(A) ((A) & 0x20000000) -#define BIT_1E(A) ((A) & 0x40000000) -#define BIT_1F(A) ((A) & 0x80000000) - -/* Get the most significant bit for specific sizes */ -#define GET_MSB_8(A) ((A) & 0x80) -#define GET_MSB_9(A) ((A) & 0x100) -#define GET_MSB_16(A) ((A) & 0x8000) -#define GET_MSB_17(A) ((A) & 0x10000) -#define GET_MSB_32(A) ((A) & 0x80000000) -#if M68K_USE_64_BIT -#define GET_MSB_33(A) ((A) & 0x100000000) -#endif /* M68K_USE_64_BIT */ - -/* Isolate nibbles */ -#define LOW_NIBBLE(A) ((A) & 0x0f) -#define HIGH_NIBBLE(A) ((A) & 0xf0) - -/* These are used to isolate 8, 16, and 32 bit sizes */ -#define MASK_OUT_ABOVE_2(A) ((A) & 3) -#define MASK_OUT_ABOVE_8(A) ((A) & 0xff) -#define MASK_OUT_ABOVE_16(A) ((A) & 0xffff) -#define MASK_OUT_BELOW_2(A) ((A) & ~3) -#define MASK_OUT_BELOW_8(A) ((A) & ~0xff) -#define MASK_OUT_BELOW_16(A) ((A) & ~0xffff) - -/* No need to mask if we are 32 bit */ -#if M68K_INT_GT_32_BIT || M68K_USE_64_BIT - #define MASK_OUT_ABOVE_32(A) ((A) & 0xffffffff) - #define MASK_OUT_BELOW_32(A) ((A) & ~0xffffffff) -#else - #define MASK_OUT_ABOVE_32(A) (A) - #define MASK_OUT_BELOW_32(A) 0 -#endif /* M68K_INT_GT_32_BIT || M68K_USE_64_BIT */ - -/* Simulate address lines of 68k family */ -#define ADDRESS_68K(A) ((A)&CPU_ADDRESS_MASK) - - -/* Shift & Rotate Macros. */ -#define LSL(A, C) ((A) << (C)) -#define LSR(A, C) ((A) >> (C)) - -/* Some > 32-bit optimizations */ -#if M68K_INT_GT_32_BIT - /* Shift left and right */ - #define LSR_32(A, C) ((A) >> (C)) - #define LSL_32(A, C) ((A) << (C)) -#else - /* We have to do this because the morons at ANSI decided that shifts - * by >= data size are undefined. - */ - #define LSR_32(A, C) ((C) < 32 ? (A) >> (C) : 0) - #define LSL_32(A, C) ((C) < 32 ? (A) << (C) : 0) -#endif /* M68K_INT_GT_32_BIT */ - -#if M68K_USE_64_BIT - #define LSL_32_64(A, C) ((A) << (C)) - #define LSR_32_64(A, C) ((A) >> (C)) - #define ROL_33_64(A, C) (LSL_32_64(A, C) | LSR_32_64(A, 33-(C))) - #define ROR_33_64(A, C) (LSR_32_64(A, C) | LSL_32_64(A, 33-(C))) -#endif /* M68K_USE_64_BIT */ - -#define ROL_8(A, C) MASK_OUT_ABOVE_8(LSL(A, C) | LSR(A, 8-(C))) -#define ROL_9(A, C) (LSL(A, C) | LSR(A, 9-(C))) -#define ROL_16(A, C) MASK_OUT_ABOVE_16(LSL(A, C) | LSR(A, 16-(C))) -#define ROL_17(A, C) (LSL(A, C) | LSR(A, 17-(C))) -#define ROL_32(A, C) MASK_OUT_ABOVE_32(LSL_32(A, C) | LSR_32(A, 32-(C))) -#define ROL_33(A, C) (LSL_32(A, C) | LSR_32(A, 33-(C))) - -#define ROR_8(A, C) MASK_OUT_ABOVE_8(LSR(A, C) | LSL(A, 8-(C))) -#define ROR_9(A, C) (LSR(A, C) | LSL(A, 9-(C))) -#define ROR_16(A, C) MASK_OUT_ABOVE_16(LSR(A, C) | LSL(A, 16-(C))) -#define ROR_17(A, C) (LSR(A, C) | LSL(A, 17-(C))) -#define ROR_32(A, C) MASK_OUT_ABOVE_32(LSR_32(A, C) | LSL_32(A, 32-(C))) -#define ROR_33(A, C) (LSR_32(A, C) | LSL_32(A, 33-(C))) - - - -/* ------------------------------ CPU Access ------------------------------ */ - -/* Access the CPU registers */ -#define REG_DA m68ki_cpu.dar /* easy access to data and address regs */ -#define REG_D m68ki_cpu.dar -#define REG_A (m68ki_cpu.dar+8) -#define REG_PC m68ki_cpu.pc -#define REG_SP_BASE m68ki_cpu.sp -#define REG_USP m68ki_cpu.sp[0] -#define REG_ISP m68ki_cpu.sp[4] -#define REG_SP m68ki_cpu.dar[15] -#define REG_IR m68ki_cpu.ir - -#define FLAG_T1 m68ki_cpu.t1_flag -#define FLAG_S m68ki_cpu.s_flag -#define FLAG_X m68ki_cpu.x_flag -#define FLAG_N m68ki_cpu.n_flag -#define FLAG_Z m68ki_cpu.not_z_flag -#define FLAG_V m68ki_cpu.v_flag -#define FLAG_C m68ki_cpu.c_flag -#define FLAG_INT_MASK m68ki_cpu.int_mask - -#define CPU_INT_LEVEL m68ki_cpu.int_level /* ASG: changed from CPU_INTS_PENDING */ -#define CPU_STOPPED m68ki_cpu.stopped -#if M68K_EMULATE_PREFETCH -#define CPU_PREF_ADDR m68ki_cpu.pref_addr -#define CPU_PREF_DATA m68ki_cpu.pref_data -#endif -#define CPU_ADDRESS_MASK 0x00ffffff -#if M68K_EMULATE_ADDRESS_ERROR -#define CPU_INSTR_MODE m68ki_cpu.instr_mode -#define CPU_RUN_MODE m68ki_cpu.run_mode -#endif - -#define CYC_INSTRUCTION m68ki_cycles -#define CYC_EXCEPTION m68ki_exception_cycle_table -#define CYC_BCC_NOTAKE_B ( -2 * MUL) -#define CYC_BCC_NOTAKE_W ( 2 * MUL) -#define CYC_DBCC_F_NOEXP ( -2 * MUL) -#define CYC_DBCC_F_EXP ( 2 * MUL) -#define CYC_SCC_R_TRUE ( 2 * MUL) -#define CYC_MOVEM_W ( 4 * MUL) -#define CYC_MOVEM_L ( 8 * MUL) -#define CYC_SHIFT ( 2 * MUL) -#define CYC_RESET (132 * MUL) - -#if M68K_EMULATE_INT_ACK == OPT_ON -#define CALLBACK_INT_ACK m68ki_cpu.int_ack_callback -#endif -#if M68K_EMULATE_RESET == OPT_ON -#define CALLBACK_RESET_INSTR m68ki_cpu.reset_instr_callback -#endif -#if M68K_TAS_HAS_CALLBACK == OPT_ON -#define CALLBACK_TAS_INSTR m68ki_cpu.tas_instr_callback -#endif -#if M68K_EMULATE_FC == OPT_ON -#define CALLBACK_SET_FC m68ki_cpu.set_fc_callback -#endif - - -/* ----------------------------- Configuration ---------------------------- */ - -/* These defines are dependant on the configuration defines in m68kconf.h */ - -/* Enable or disable callback functions */ -#if M68K_EMULATE_INT_ACK - #if M68K_EMULATE_INT_ACK == OPT_SPECIFY_HANDLER - #define m68ki_int_ack(A) M68K_INT_ACK_CALLBACK(A); - #else - #define m68ki_int_ack(A) CALLBACK_INT_ACK(A); - #endif -#else - /* Default action is to used autovector mode, which is most common */ - #define m68ki_int_ack(A) M68K_INT_ACK_AUTOVECTOR -#endif /* M68K_EMULATE_INT_ACK */ - -#if M68K_EMULATE_RESET - #if M68K_EMULATE_RESET == OPT_SPECIFY_HANDLER - #define m68ki_output_reset() M68K_RESET_CALLBACK(); - #else - #define m68ki_output_reset() CALLBACK_RESET_INSTR(); - #endif -#else - #define m68ki_output_reset() -#endif /* M68K_EMULATE_RESET */ - -#if M68K_TAS_HAS_CALLBACK - #if M68K_TAS_HAS_CALLBACK == OPT_SPECIFY_HANDLER - #define m68ki_tas_callback() M68K_TAS_CALLBACK() - #else - #define m68ki_tas_callback() CALLBACK_TAS_INSTR() - #endif -#else - #define m68ki_tas_callback() 0 -#endif /* M68K_TAS_HAS_CALLBACK */ - - -/* Enable or disable function code emulation */ -#if M68K_EMULATE_FC - #if M68K_EMULATE_FC == OPT_SPECIFY_HANDLER - #define m68ki_set_fc(A) M68K_SET_FC_CALLBACK(A); - #else - #define m68ki_set_fc(A) CALLBACK_SET_FC(A); - #endif - #define m68ki_use_data_space() m68ki_cpu.address_space = FUNCTION_CODE_USER_DATA; - #define m68ki_use_program_space() m68ki_cpu.address_space = FUNCTION_CODE_USER_PROGRAM; - #define m68ki_get_address_space() m68ki_cpu.address_space -#else - #define m68ki_set_fc(A) - #define m68ki_use_data_space() - #define m68ki_use_program_space() - #define m68ki_get_address_space() FUNCTION_CODE_USER_DATA -#endif /* M68K_EMULATE_FC */ - - -/* Enable or disable trace emulation */ -#if M68K_EMULATE_TRACE - /* Initiates trace checking before each instruction (t1) */ - #define m68ki_trace_t1() m68ki_cpu.tracing = FLAG_T1; - /* Clear all tracing */ - #define m68ki_clear_trace() m68ki_cpu.tracing = 0; - /* Cause a trace exception if we are tracing */ - #define m68ki_exception_if_trace() if(m68ki_cpu.tracing) m68ki_exception_trace(); -#else - #define m68ki_trace_t1() - #define m68ki_clear_trace() - #define m68ki_exception_if_trace() -#endif /* M68K_EMULATE_TRACE */ - - -/* Enable or disable Address error emulation */ -#if M68K_EMULATE_ADDRESS_ERROR - #define m68ki_set_address_error_trap() \ - if(setjmp(m68ki_cpu.aerr_trap) != 0) \ - { \ - m68ki_exception_address_error(); \ - } - - #define m68ki_check_address_error(ADDR, WRITE_MODE, FC) \ - if((ADDR)&1) \ - { \ - if (m68ki_cpu.aerr_enabled) \ - { \ - m68ki_cpu.aerr_address = ADDR; \ - m68ki_cpu.aerr_write_mode = WRITE_MODE; \ - m68ki_cpu.aerr_fc = FC; \ - longjmp(m68ki_cpu.aerr_trap, 1); \ - } \ - } -#else - #define m68ki_set_address_error_trap() - #define m68ki_check_address_error(ADDR, WRITE_MODE, FC) -#endif /* M68K_ADDRESS_ERROR */ - - -/* -------------------------- EA / Operand Access ------------------------- */ - -/* - * The general instruction format follows this pattern: - * .... XXX. .... .YYY - * where XXX is register X and YYY is register Y - */ - -/* Data Register Isolation */ -#define DX (REG_D[(REG_IR >> 9) & 7]) -#define DY (REG_D[REG_IR & 7]) - -/* Address Register Isolation */ -#define AX (REG_A[(REG_IR >> 9) & 7]) -#define AY (REG_A[REG_IR & 7]) - -/* Effective Address Calculations */ -#define EA_AY_AI_8() AY /* address register indirect */ -#define EA_AY_AI_16() EA_AY_AI_8() -#define EA_AY_AI_32() EA_AY_AI_8() -#define EA_AY_PI_8() (AY++) /* postincrement (size = byte) */ -#define EA_AY_PI_16() ((AY+=2)-2) /* postincrement (size = word) */ -#define EA_AY_PI_32() ((AY+=4)-4) /* postincrement (size = long) */ -#define EA_AY_PD_8() (--AY) /* predecrement (size = byte) */ -#define EA_AY_PD_16() (AY-=2) /* predecrement (size = word) */ -#define EA_AY_PD_32() (AY-=4) /* predecrement (size = long) */ -#define EA_AY_DI_8() (AY+MAKE_INT_16(m68ki_read_imm_16())) /* displacement */ -#define EA_AY_DI_16() EA_AY_DI_8() -#define EA_AY_DI_32() EA_AY_DI_8() -#define EA_AY_IX_8() m68ki_get_ea_ix(AY) /* indirect + index */ -#define EA_AY_IX_16() EA_AY_IX_8() -#define EA_AY_IX_32() EA_AY_IX_8() - -#define EA_AX_AI_8() AX -#define EA_AX_AI_16() EA_AX_AI_8() -#define EA_AX_AI_32() EA_AX_AI_8() -#define EA_AX_PI_8() (AX++) -#define EA_AX_PI_16() ((AX+=2)-2) -#define EA_AX_PI_32() ((AX+=4)-4) -#define EA_AX_PD_8() (--AX) -#define EA_AX_PD_16() (AX-=2) -#define EA_AX_PD_32() (AX-=4) -#define EA_AX_DI_8() (AX+MAKE_INT_16(m68ki_read_imm_16())) -#define EA_AX_DI_16() EA_AX_DI_8() -#define EA_AX_DI_32() EA_AX_DI_8() -#define EA_AX_IX_8() m68ki_get_ea_ix(AX) -#define EA_AX_IX_16() EA_AX_IX_8() -#define EA_AX_IX_32() EA_AX_IX_8() - -#define EA_A7_PI_8() ((REG_A[7]+=2)-2) -#define EA_A7_PD_8() (REG_A[7]-=2) - -#define EA_AW_8() MAKE_INT_16(m68ki_read_imm_16()) /* absolute word */ -#define EA_AW_16() EA_AW_8() -#define EA_AW_32() EA_AW_8() -#define EA_AL_8() m68ki_read_imm_32() /* absolute long */ -#define EA_AL_16() EA_AL_8() -#define EA_AL_32() EA_AL_8() -#define EA_PCDI_8() m68ki_get_ea_pcdi() /* pc indirect + displacement */ -#define EA_PCDI_16() EA_PCDI_8() -#define EA_PCDI_32() EA_PCDI_8() -#define EA_PCIX_8() m68ki_get_ea_pcix() /* pc indirect + index */ -#define EA_PCIX_16() EA_PCIX_8() -#define EA_PCIX_32() EA_PCIX_8() - - -#define OPER_I_8() m68ki_read_imm_8() -#define OPER_I_16() m68ki_read_imm_16() -#define OPER_I_32() m68ki_read_imm_32() - - -/* --------------------------- Status Register ---------------------------- */ - -/* Flag Calculation Macros */ -#define CFLAG_8(A) (A) -#define CFLAG_16(A) ((A)>>8) - -#if M68K_INT_GT_32_BIT - #define CFLAG_ADD_32(S, D, R) ((R)>>24) - #define CFLAG_SUB_32(S, D, R) ((R)>>24) -#else - #define CFLAG_ADD_32(S, D, R) (((S & D) | (~R & (S | D)))>>23) - #define CFLAG_SUB_32(S, D, R) (((S & R) | (~D & (S | R)))>>23) -#endif /* M68K_INT_GT_32_BIT */ - -#define VFLAG_ADD_8(S, D, R) ((S^R) & (D^R)) -#define VFLAG_ADD_16(S, D, R) (((S^R) & (D^R))>>8) -#define VFLAG_ADD_32(S, D, R) (((S^R) & (D^R))>>24) - -#define VFLAG_SUB_8(S, D, R) ((S^D) & (R^D)) -#define VFLAG_SUB_16(S, D, R) (((S^D) & (R^D))>>8) -#define VFLAG_SUB_32(S, D, R) (((S^D) & (R^D))>>24) - -#define NFLAG_8(A) (A) -#define NFLAG_16(A) ((A)>>8) -#define NFLAG_32(A) ((A)>>24) -#define NFLAG_64(A) ((A)>>56) - -#define ZFLAG_8(A) MASK_OUT_ABOVE_8(A) -#define ZFLAG_16(A) MASK_OUT_ABOVE_16(A) -#define ZFLAG_32(A) MASK_OUT_ABOVE_32(A) - - -/* Flag values */ -#define NFLAG_SET 0x80 -#define NFLAG_CLEAR 0 -#define CFLAG_SET 0x100 -#define CFLAG_CLEAR 0 -#define XFLAG_SET 0x100 -#define XFLAG_CLEAR 0 -#define VFLAG_SET 0x80 -#define VFLAG_CLEAR 0 -#define ZFLAG_SET 0 -#define ZFLAG_CLEAR 0xffffffff -#define SFLAG_SET 4 -#define SFLAG_CLEAR 0 - -/* Turn flag values into 1 or 0 */ -#define XFLAG_AS_1() ((FLAG_X>>8)&1) -#define NFLAG_AS_1() ((FLAG_N>>7)&1) -#define VFLAG_AS_1() ((FLAG_V>>7)&1) -#define ZFLAG_AS_1() (!FLAG_Z) -#define CFLAG_AS_1() ((FLAG_C>>8)&1) - - -/* Conditions */ -#define COND_CS() (FLAG_C&0x100) -#define COND_CC() (!COND_CS()) -#define COND_VS() (FLAG_V&0x80) -#define COND_VC() (!COND_VS()) -#define COND_NE() FLAG_Z -#define COND_EQ() (!COND_NE()) -#define COND_MI() (FLAG_N&0x80) -#define COND_PL() (!COND_MI()) -#define COND_LT() ((FLAG_N^FLAG_V)&0x80) -#define COND_GE() (!COND_LT()) -#define COND_HI() (COND_CC() && COND_NE()) -#define COND_LS() (COND_CS() || COND_EQ()) -#define COND_GT() (COND_GE() && COND_NE()) -#define COND_LE() (COND_LT() || COND_EQ()) - -/* Reversed conditions */ -#define COND_NOT_CS() COND_CC() -#define COND_NOT_CC() COND_CS() -#define COND_NOT_VS() COND_VC() -#define COND_NOT_VC() COND_VS() -#define COND_NOT_NE() COND_EQ() -#define COND_NOT_EQ() COND_NE() -#define COND_NOT_MI() COND_PL() -#define COND_NOT_PL() COND_MI() -#define COND_NOT_LT() COND_GE() -#define COND_NOT_GE() COND_LT() -#define COND_NOT_HI() COND_LS() -#define COND_NOT_LS() COND_HI() -#define COND_NOT_GT() COND_LE() -#define COND_NOT_LE() COND_GT() - -/* Not real conditions, but here for convenience */ -#define COND_XS() (FLAG_X&0x100) -#define COND_XC() (!COND_XS) - - -/* Get the condition code register */ -#define m68ki_get_ccr() ((COND_XS() >> 4) | \ - (COND_MI() >> 4) | \ - (COND_EQ() << 2) | \ - (COND_VS() >> 6) | \ - (COND_CS() >> 8)) - -/* Get the status register */ -#define m68ki_get_sr() ( FLAG_T1 | \ - (FLAG_S << 11) | \ - FLAG_INT_MASK | \ - m68ki_get_ccr()) - - - -/* ---------------------------- Cycle Counting ---------------------------- */ - -#define USE_CYCLES(A) m68ki_cpu.cycles += (A) -#define SET_CYCLES(A) m68ki_cpu.cycles = (A) - - -/* ----------------------------- Read / Write ----------------------------- */ - -/* Read data immediately following the PC */ -#define m68k_read_immediate_16(address) *(uint16 *)(m68ki_cpu.memory_map[((address)>>16)&0xff].base + ((address) & 0xffff)) -#define m68k_read_immediate_32(address) (m68k_read_immediate_16(address) << 16) | (m68k_read_immediate_16(address+2)) - -/* Read data relative to the PC */ -#define m68k_read_pcrelative_8(address) READ_BYTE(m68ki_cpu.memory_map[((address)>>16)&0xff].base, (address) & 0xffff) -#define m68k_read_pcrelative_16(address) m68k_read_immediate_16(address) -#define m68k_read_pcrelative_32(address) m68k_read_immediate_32(address) - -/* Read from the current address space */ -#define m68ki_read_8(A) m68ki_read_8_fc (A, FLAG_S | m68ki_get_address_space()) -#define m68ki_read_16(A) m68ki_read_16_fc(A, FLAG_S | m68ki_get_address_space()) -#define m68ki_read_32(A) m68ki_read_32_fc(A, FLAG_S | m68ki_get_address_space()) - -/* Write to the current data space */ -#define m68ki_write_8(A, V) m68ki_write_8_fc (A, FLAG_S | FUNCTION_CODE_USER_DATA, V) -#define m68ki_write_16(A, V) m68ki_write_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) -#define m68ki_write_32(A, V) m68ki_write_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) - -/* map read immediate 8 to read immediate 16 */ -#define m68ki_read_imm_8() MASK_OUT_ABOVE_8(m68ki_read_imm_16()) - -/* Map PC-relative reads */ -#define m68ki_read_pcrel_8(A) m68k_read_pcrelative_8(A) -#define m68ki_read_pcrel_16(A) m68k_read_pcrelative_16(A) -#define m68ki_read_pcrel_32(A) m68k_read_pcrelative_32(A) - -/* Read from the program space */ -#define m68ki_read_program_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) -#define m68ki_read_program_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) -#define m68ki_read_program_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) - -/* Read from the data space */ -#define m68ki_read_data_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) -#define m68ki_read_data_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) -#define m68ki_read_data_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) - - - -/* ======================================================================== */ -/* =============================== PROTOTYPES ============================= */ -/* ======================================================================== */ - -/* Used by shift & rotate instructions */ -static const uint8 m68ki_shift_8_table[65] = -{ - 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff -}; - -static const uint16 m68ki_shift_16_table[65] = -{ - 0x0000, 0x8000, 0xc000, 0xe000, 0xf000, 0xf800, 0xfc00, 0xfe00, 0xff00, - 0xff80, 0xffc0, 0xffe0, 0xfff0, 0xfff8, 0xfffc, 0xfffe, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff -}; - -static const uint m68ki_shift_32_table[65] = -{ - 0x00000000, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, - 0xfc000000, 0xfe000000, 0xff000000, 0xff800000, 0xffc00000, 0xffe00000, - 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, 0xffff8000, - 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00, - 0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, - 0xfffffffc, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff -}; - - -/* Number of clock cycles to use for exception processing. - * I used 4 for any vectors that are undocumented for processing times. - */ -static const uint16 m68ki_exception_cycle_table[256] = -{ - 40*MUL, /* 0: Reset - Initial Stack Pointer */ - 4*MUL, /* 1: Reset - Initial Program Counter */ - 50*MUL, /* 2: Bus Error (unemulated) */ - 50*MUL, /* 3: Address Error (unemulated) */ - 34*MUL, /* 4: Illegal Instruction */ - 38*MUL, /* 5: Divide by Zero -- ASG: changed from 42 */ - 40*MUL, /* 6: CHK -- ASG: chanaged from 44 */ - 34*MUL, /* 7: TRAPV */ - 34*MUL, /* 8: Privilege Violation */ - 34*MUL, /* 9: Trace */ - 4*MUL, /* 10: 1010 */ - 4*MUL, /* 11: 1111 */ - 4*MUL, /* 12: RESERVED */ - 4*MUL, /* 13: Coprocessor Protocol Violation (unemulated) */ - 4*MUL, /* 14: Format Error */ - 44*MUL, /* 15: Uninitialized Interrupt */ - 4*MUL, /* 16: RESERVED */ - 4*MUL, /* 17: RESERVED */ - 4*MUL, /* 18: RESERVED */ - 4*MUL, /* 19: RESERVED */ - 4*MUL, /* 20: RESERVED */ - 4*MUL, /* 21: RESERVED */ - 4*MUL, /* 22: RESERVED */ - 4*MUL, /* 23: RESERVED */ - 44*MUL, /* 24: Spurious Interrupt */ - 44*MUL, /* 25: Level 1 Interrupt Autovector */ - 44*MUL, /* 26: Level 2 Interrupt Autovector */ - 44*MUL, /* 27: Level 3 Interrupt Autovector */ - 44*MUL, /* 28: Level 4 Interrupt Autovector */ - 44*MUL, /* 29: Level 5 Interrupt Autovector */ - 44*MUL, /* 30: Level 6 Interrupt Autovector */ - 44*MUL, /* 31: Level 7 Interrupt Autovector */ - 34*MUL, /* 32: TRAP #0 -- ASG: chanaged from 38 */ - 34*MUL, /* 33: TRAP #1 */ - 34*MUL, /* 34: TRAP #2 */ - 34*MUL, /* 35: TRAP #3 */ - 34*MUL, /* 36: TRAP #4 */ - 34*MUL, /* 37: TRAP #5 */ - 34*MUL, /* 38: TRAP #6 */ - 34*MUL, /* 39: TRAP #7 */ - 34*MUL, /* 40: TRAP #8 */ - 34*MUL, /* 41: TRAP #9 */ - 34*MUL, /* 42: TRAP #10 */ - 34*MUL, /* 43: TRAP #11 */ - 34*MUL, /* 44: TRAP #12 */ - 34*MUL, /* 45: TRAP #13 */ - 34*MUL, /* 46: TRAP #14 */ - 34*MUL, /* 47: TRAP #15 */ - 4*MUL, /* 48: FP Branch or Set on Unknown Condition (unemulated) */ - 4*MUL, /* 49: FP Inexact Result (unemulated) */ - 4*MUL, /* 50: FP Divide by Zero (unemulated) */ - 4*MUL, /* 51: FP Underflow (unemulated) */ - 4*MUL, /* 52: FP Operand Error (unemulated) */ - 4*MUL, /* 53: FP Overflow (unemulated) */ - 4*MUL, /* 54: FP Signaling NAN (unemulated) */ - 4*MUL, /* 55: FP Unimplemented Data Type (unemulated) */ - 4*MUL, /* 56: MMU Configuration Error (unemulated) */ - 4*MUL, /* 57: MMU Illegal Operation Error (unemulated) */ - 4*MUL, /* 58: MMU Access Level Violation Error (unemulated) */ - 4*MUL, /* 59: RESERVED */ - 4*MUL, /* 60: RESERVED */ - 4*MUL, /* 61: RESERVED */ - 4*MUL, /* 62: RESERVED */ - 4*MUL, /* 63: RESERVED */ - /* 64-255: User Defined */ - 4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL, - 4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL, - 4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL, - 4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL, - 4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL, - 4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL,4*MUL -}; - -/* Read data immediately after the program counter */ -INLINE uint m68ki_read_imm_16(void); -INLINE uint m68ki_read_imm_32(void); - -/* Read data with specific function code */ -INLINE uint m68ki_read_8_fc (uint address, uint fc); -INLINE uint m68ki_read_16_fc (uint address, uint fc); -INLINE uint m68ki_read_32_fc (uint address, uint fc); - -/* Write data with specific function code */ -INLINE void m68ki_write_8_fc (uint address, uint fc, uint value); -INLINE void m68ki_write_16_fc(uint address, uint fc, uint value); -INLINE void m68ki_write_32_fc(uint address, uint fc, uint value); - -/* Indexed and PC-relative ea fetching */ -INLINE uint m68ki_get_ea_pcdi(void); -INLINE uint m68ki_get_ea_pcix(void); -INLINE uint m68ki_get_ea_ix(uint An); - -/* Operand fetching */ -INLINE uint OPER_AY_AI_8(void); -INLINE uint OPER_AY_AI_16(void); -INLINE uint OPER_AY_AI_32(void); -INLINE uint OPER_AY_PI_8(void); -INLINE uint OPER_AY_PI_16(void); -INLINE uint OPER_AY_PI_32(void); -INLINE uint OPER_AY_PD_8(void); -INLINE uint OPER_AY_PD_16(void); -INLINE uint OPER_AY_PD_32(void); -INLINE uint OPER_AY_DI_8(void); -INLINE uint OPER_AY_DI_16(void); -INLINE uint OPER_AY_DI_32(void); -INLINE uint OPER_AY_IX_8(void); -INLINE uint OPER_AY_IX_16(void); -INLINE uint OPER_AY_IX_32(void); - -INLINE uint OPER_AX_AI_8(void); -INLINE uint OPER_AX_AI_16(void); -INLINE uint OPER_AX_AI_32(void); -INLINE uint OPER_AX_PI_8(void); -INLINE uint OPER_AX_PI_16(void); -INLINE uint OPER_AX_PI_32(void); -INLINE uint OPER_AX_PD_8(void); -INLINE uint OPER_AX_PD_16(void); -INLINE uint OPER_AX_PD_32(void); -INLINE uint OPER_AX_DI_8(void); -INLINE uint OPER_AX_DI_16(void); -INLINE uint OPER_AX_DI_32(void); -INLINE uint OPER_AX_IX_8(void); -INLINE uint OPER_AX_IX_16(void); -INLINE uint OPER_AX_IX_32(void); - -INLINE uint OPER_A7_PI_8(void); -INLINE uint OPER_A7_PD_8(void); - -INLINE uint OPER_AW_8(void); -INLINE uint OPER_AW_16(void); -INLINE uint OPER_AW_32(void); -INLINE uint OPER_AL_8(void); -INLINE uint OPER_AL_16(void); -INLINE uint OPER_AL_32(void); -INLINE uint OPER_PCDI_8(void); -INLINE uint OPER_PCDI_16(void); -INLINE uint OPER_PCDI_32(void); -INLINE uint OPER_PCIX_8(void); -INLINE uint OPER_PCIX_16(void); -INLINE uint OPER_PCIX_32(void); - -/* Stack operations */ -INLINE void m68ki_push_16(uint value); -INLINE void m68ki_push_32(uint value); -INLINE uint m68ki_pull_16(void); -INLINE uint m68ki_pull_32(void); - -/* Program flow operations */ -INLINE void m68ki_jump(uint new_pc); -INLINE void m68ki_jump_vector(uint vector); -INLINE void m68ki_branch_8(uint offset); -INLINE void m68ki_branch_16(uint offset); -INLINE void m68ki_branch_32(uint offset); - -/* Status register operations. */ -INLINE void m68ki_set_s_flag(uint value); /* Only bit 2 of value should be set (i.e. 4 or 0) */ -INLINE void m68ki_set_ccr(uint value); /* set the condition code register */ -INLINE void m68ki_set_sr(uint value); /* set the status register */ - -/* Exception processing */ -INLINE uint m68ki_init_exception(void); /* Initial exception processing */ -INLINE void m68ki_stack_frame_3word(uint pc, uint sr); /* Stack various frame types */ -#if M68K_EMULATE_ADDRESS_ERROR -INLINE void m68ki_stack_frame_buserr(uint sr); -#endif -INLINE void m68ki_exception_trap(uint vector); -INLINE void m68ki_exception_trapN(uint vector); -#if M68K_EMULATE_TRACE -INLINE void m68ki_exception_trace(void); -#endif -static void m68ki_exception_privilege_violation(void); /* do not inline in order to reduce function size and allow inlining of read/write functions by the compile */ -INLINE void m68ki_exception_1010(void); -INLINE void m68ki_exception_1111(void); -INLINE void m68ki_exception_illegal(void); -#if M68K_EMULATE_ADDRESS_ERROR -INLINE void m68ki_exception_address_error(void); -#endif -INLINE void m68ki_exception_interrupt(uint int_level); -INLINE void m68ki_check_interrupts(void); /* ASG: check for interrupts */ - -/* ======================================================================== */ -/* =========================== UTILITY FUNCTIONS ========================== */ -/* ======================================================================== */ - - -/* ---------------------------- Read Immediate ---------------------------- */ - -/* Handles all immediate reads, does address error check, function code setting, - * and prefetching if they are enabled in m68kconf.h - */ -INLINE uint m68ki_read_imm_16(void) -{ - m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* auto-disable (see m68kcpu.h) */ -#if M68K_CHECK_PC_ADDRESS_ERROR - m68ki_check_address_error(REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* auto-disable (see m68kcpu.h) */ -#endif -#if M68K_EMULATE_PREFETCH - if(MASK_OUT_BELOW_2(REG_PC) != CPU_PREF_ADDR) - { - CPU_PREF_ADDR = MASK_OUT_BELOW_2(REG_PC); - CPU_PREF_DATA = m68k_read_immediate_32(CPU_PREF_ADDR); - } - REG_PC += 2; - return MASK_OUT_ABOVE_16(CPU_PREF_DATA >> ((2-((REG_PC-2)&2))<<3)); -#else - uint pc = REG_PC; - REG_PC += 2; - return m68k_read_immediate_16(pc); -#endif /* M68K_EMULATE_PREFETCH */ -} - -INLINE uint m68ki_read_imm_32(void) -{ -#if M68K_EMULATE_PREFETCH - uint temp_val; - - m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* auto-disable (see m68kcpu.h) */ -#if M68K_CHECK_PC_ADDRESS_ERROR - m68ki_check_address_error(REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* auto-disable (see m68kcpu.h) */ -#endif - if(MASK_OUT_BELOW_2(REG_PC) != CPU_PREF_ADDR) - { - CPU_PREF_ADDR = MASK_OUT_BELOW_2(REG_PC); - CPU_PREF_DATA = m68k_read_immediate_32(CPU_PREF_ADDR); - } - temp_val = CPU_PREF_DATA; - REG_PC += 2; - if(MASK_OUT_BELOW_2(REG_PC) != CPU_PREF_ADDR) - { - CPU_PREF_ADDR = MASK_OUT_BELOW_2(REG_PC); - CPU_PREF_DATA = m68k_read_immediate_32(CPU_PREF_ADDR); - temp_val = MASK_OUT_ABOVE_32((temp_val << 16) | (CPU_PREF_DATA >> 16)); - } - REG_PC += 2; - - return temp_val; -#else - m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* auto-disable (see m68kcpu.h) */ -#if M68K_CHECK_PC_ADDRESS_ERROR - m68ki_check_address_error(REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* auto-disable (see m68kcpu.h) */ -#endif - uint pc = REG_PC; - REG_PC += 4; - return m68k_read_immediate_32(pc); -#endif /* M68K_EMULATE_PREFETCH */ -} - - - -/* ------------------------- Top level read/write ------------------------- */ - -/* Handles all memory accesses (except for immediate reads if they are - * configured to use separate functions in m68kconf.h). - * All memory accesses must go through these top level functions. - * These functions will also check for address error and set the function - * code if they are enabled in m68kconf.h. - */ -INLINE uint m68ki_read_8_fc(uint address, uint fc) -{ - cpu_memory_map *temp = &m68ki_cpu.memory_map[((address)>>16)&0xff];; - if (biz_readcb) - biz_readcb(address); - - if(biz_cdcallback) - CDLog68k(address,eCDLog_Flags_Data68k); - - m68ki_set_fc(fc) /* auto-disable (see m68kcpu.h) */ - - if (temp->read8) return (*temp->read8)(ADDRESS_68K(address)); - else return READ_BYTE(temp->base, (address) & 0xffff); -} - -INLINE uint m68ki_read_16_fc(uint address, uint fc) -{ - cpu_memory_map *temp; - if (biz_readcb) - biz_readcb(address); - - if(biz_cdcallback) - { - CDLog68k(address,eCDLog_Flags_Data68k); - CDLog68k(address+1,eCDLog_Flags_Data68k); - } - - m68ki_set_fc(fc) /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error(address, MODE_READ, fc) /* auto-disable (see m68kcpu.h) */ - - temp = &m68ki_cpu.memory_map[((address)>>16)&0xff]; - if (temp->read16) return (*temp->read16)(ADDRESS_68K(address)); - else return *(uint16 *)(temp->base + ((address) & 0xffff)); -} - -INLINE uint m68ki_read_32_fc(uint address, uint fc) -{ - cpu_memory_map *temp; - if (biz_readcb) - biz_readcb(address); - - if(biz_cdcallback) - { - CDLog68k(address,eCDLog_Flags_Data68k); - CDLog68k(address+1,eCDLog_Flags_Data68k); - CDLog68k(address+2,eCDLog_Flags_Data68k); - CDLog68k(address+3,eCDLog_Flags_Data68k); - } - - m68ki_set_fc(fc) /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error(address, MODE_READ, fc) /* auto-disable (see m68kcpu.h) */ - - temp = &m68ki_cpu.memory_map[((address)>>16)&0xff]; - if (temp->read16) return ((*temp->read16)(ADDRESS_68K(address)) << 16) | ((*temp->read16)(ADDRESS_68K(address + 2))); - else return m68k_read_immediate_32(address); -} - -INLINE void m68ki_write_8_fc(uint address, uint fc, uint value) -{ - cpu_memory_map *temp; - if (biz_writecb) - biz_writecb(address); - - m68ki_set_fc(fc) /* auto-disable (see m68kcpu.h) */ - - temp = &m68ki_cpu.memory_map[((address)>>16)&0xff]; - if (temp->write8) (*temp->write8)(ADDRESS_68K(address),value); - else WRITE_BYTE(temp->base, (address) & 0xffff, value); -} - -INLINE void m68ki_write_16_fc(uint address, uint fc, uint value) -{ - cpu_memory_map *temp; - if (biz_writecb) - biz_writecb(address); - - m68ki_set_fc(fc) /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error(address, MODE_WRITE, fc); /* auto-disable (see m68kcpu.h) */ - - temp = &m68ki_cpu.memory_map[((address)>>16)&0xff]; - if (temp->write16) (*temp->write16)(ADDRESS_68K(address),value); - else *(uint16 *)(temp->base + ((address) & 0xffff)) = value; -} - -INLINE void m68ki_write_32_fc(uint address, uint fc, uint value) -{ - cpu_memory_map *temp; - if (biz_writecb) - biz_writecb(address); - - m68ki_set_fc(fc) /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error(address, MODE_WRITE, fc) /* auto-disable (see m68kcpu.h) */ - - temp = &m68ki_cpu.memory_map[((address)>>16)&0xff]; - if (temp->write16) (*temp->write16)(ADDRESS_68K(address),value>>16); - else *(uint16 *)(temp->base + ((address) & 0xffff)) = value >> 16; - - temp = &m68ki_cpu.memory_map[((address + 2)>>16)&0xff]; - if (temp->write16) (*temp->write16)(ADDRESS_68K(address+2),value&0xffff); - else *(uint16 *)(temp->base + ((address + 2) & 0xffff)) = value; -} - - -/* --------------------- Effective Address Calculation -------------------- */ - -/* The program counter relative addressing modes cause operands to be - * retrieved from program space, not data space. - */ -INLINE uint m68ki_get_ea_pcdi(void) -{ - uint old_pc = REG_PC; - m68ki_use_program_space() /* auto-disable */ - return old_pc + MAKE_INT_16(m68ki_read_imm_16()); -} - - -INLINE uint m68ki_get_ea_pcix(void) -{ - m68ki_use_program_space() /* auto-disable */ - return m68ki_get_ea_ix(REG_PC); -} - -/* Indexed addressing modes are encoded as follows: - * - * Base instruction format: - * F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0 - * x x x x x x x x x x | 1 1 0 | BASE REGISTER (An) - * - * Base instruction format for destination EA in move instructions: - * F E D C | B A 9 | 8 7 6 | 5 4 3 2 1 0 - * x x x x | BASE REG | 1 1 0 | X X X X X X (An) - * - * Brief extension format: - * F | E D C | B | A 9 | 8 | 7 6 5 4 3 2 1 0 - * D/A | REGISTER | W/L | SCALE | 0 | DISPLACEMENT - * - * Full extension format: - * F E D C B A 9 8 7 6 5 4 3 2 1 0 - * D/A | REGISTER | W/L | SCALE | 1 | BS | IS | BD SIZE | 0 | I/IS - * BASE DISPLACEMENT (0, 16, 32 bit) (bd) - * OUTER DISPLACEMENT (0, 16, 32 bit) (od) - * - * D/A: 0 = Dn, 1 = An (Xn) - * W/L: 0 = W (sign extend), 1 = L (.SIZE) - * SCALE: 00=1, 01=2, 10=4, 11=8 (*SCALE) - * BS: 0=add base reg, 1=suppress base reg (An suppressed) - * IS: 0=add index, 1=suppress index (Xn suppressed) - * BD SIZE: 00=reserved, 01=NULL, 10=Word, 11=Long (size of bd) - * - * IS I/IS Operation - * 0 000 No Memory Indirect - * 0 001 indir prex with null outer - * 0 010 indir prex with word outer - * 0 011 indir prex with long outer - * 0 100 reserved - * 0 101 indir postx with null outer - * 0 110 indir postx with word outer - * 0 111 indir postx with long outer - * 1 000 no memory indirect - * 1 001 mem indir with null outer - * 1 010 mem indir with word outer - * 1 011 mem indir with long outer - * 1 100-111 reserved - */ -INLINE uint m68ki_get_ea_ix(uint An) -{ - /* An = base register */ - uint extension = m68ki_read_imm_16(); - - uint Xn = 0; /* Index register */ - - /* Calculate index */ - Xn = REG_DA[extension>>12]; /* Xn */ - if(!BIT_B(extension)) /* W/L */ - Xn = MAKE_INT_16(Xn); - - /* Add base register and displacement and return */ - return An + Xn + MAKE_INT_8(extension); -} - - -/* Fetch operands */ -INLINE uint OPER_AY_AI_8(void) {uint ea = EA_AY_AI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_AI_16(void) {uint ea = EA_AY_AI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_AI_32(void) {uint ea = EA_AY_AI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_PI_8(void) {uint ea = EA_AY_PI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_PI_16(void) {uint ea = EA_AY_PI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_PI_32(void) {uint ea = EA_AY_PI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_PD_8(void) {uint ea = EA_AY_PD_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_PD_16(void) {uint ea = EA_AY_PD_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_PD_32(void) {uint ea = EA_AY_PD_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_DI_8(void) {uint ea = EA_AY_DI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_DI_16(void) {uint ea = EA_AY_DI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_DI_32(void) {uint ea = EA_AY_DI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_IX_8(void) {uint ea = EA_AY_IX_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_IX_16(void) {uint ea = EA_AY_IX_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_IX_32(void) {uint ea = EA_AY_IX_32(); return m68ki_read_32(ea);} - -INLINE uint OPER_AX_AI_8(void) {uint ea = EA_AX_AI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_AI_16(void) {uint ea = EA_AX_AI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_AI_32(void) {uint ea = EA_AX_AI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_PI_8(void) {uint ea = EA_AX_PI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_PI_16(void) {uint ea = EA_AX_PI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_PI_32(void) {uint ea = EA_AX_PI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_PD_8(void) {uint ea = EA_AX_PD_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_PD_16(void) {uint ea = EA_AX_PD_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_PD_32(void) {uint ea = EA_AX_PD_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_DI_8(void) {uint ea = EA_AX_DI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_DI_16(void) {uint ea = EA_AX_DI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_DI_32(void) {uint ea = EA_AX_DI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_IX_8(void) {uint ea = EA_AX_IX_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_IX_16(void) {uint ea = EA_AX_IX_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_IX_32(void) {uint ea = EA_AX_IX_32(); return m68ki_read_32(ea);} - -INLINE uint OPER_A7_PI_8(void) {uint ea = EA_A7_PI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_A7_PD_8(void) {uint ea = EA_A7_PD_8(); return m68ki_read_8(ea); } - -INLINE uint OPER_AW_8(void) {uint ea = EA_AW_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AW_16(void) {uint ea = EA_AW_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AW_32(void) {uint ea = EA_AW_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AL_8(void) {uint ea = EA_AL_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AL_16(void) {uint ea = EA_AL_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AL_32(void) {uint ea = EA_AL_32(); return m68ki_read_32(ea);} -INLINE uint OPER_PCDI_8(void) {uint ea = EA_PCDI_8(); return m68ki_read_pcrel_8(ea); } -INLINE uint OPER_PCDI_16(void) {uint ea = EA_PCDI_16(); return m68ki_read_pcrel_16(ea);} -INLINE uint OPER_PCDI_32(void) {uint ea = EA_PCDI_32(); return m68ki_read_pcrel_32(ea);} -INLINE uint OPER_PCIX_8(void) {uint ea = EA_PCIX_8(); return m68ki_read_pcrel_8(ea); } -INLINE uint OPER_PCIX_16(void) {uint ea = EA_PCIX_16(); return m68ki_read_pcrel_16(ea);} -INLINE uint OPER_PCIX_32(void) {uint ea = EA_PCIX_32(); return m68ki_read_pcrel_32(ea);} - - - -/* ---------------------------- Stack Functions --------------------------- */ - -/* Push/pull data from the stack */ -/* Optimized access assuming stack is always located in ROM/RAM [EkeEke] */ -INLINE void m68ki_push_16(uint value) -{ - REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2); - /*m68ki_write_16(REG_SP, value);*/ - if (m68ki_cpu.memory_map[(REG_SP >> 16) & 0xff].write16 != m68k_unused_16_w) - { - *(uint16 *)(m68ki_cpu.memory_map[(REG_SP >> 16) & 0xff].base + (REG_SP & 0xffff)) = value; - } -} - -INLINE void m68ki_push_32(uint value) -{ - REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4); - /*m68ki_write_32(REG_SP, value);*/ - if (m68ki_cpu.memory_map[(REG_SP >> 16) & 0xff].write16 != m68k_unused_16_w) - { - *(uint16 *)(m68ki_cpu.memory_map[(REG_SP >> 16) & 0xff].base + (REG_SP & 0xffff)) = value >> 16; - *(uint16 *)(m68ki_cpu.memory_map[((REG_SP + 2) >> 16) & 0xff].base + ((REG_SP + 2) & 0xffff)) = value & 0xffff; - } -} - -INLINE uint m68ki_pull_16(void) -{ - uint sp = REG_SP; - REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2); - return m68k_read_immediate_16(sp); - /*return m68ki_read_16(sp);*/ -} - -INLINE uint m68ki_pull_32(void) -{ - uint sp = REG_SP; - REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4); - return m68k_read_immediate_32(sp); - /*return m68ki_read_32(sp);*/ -} - - - -/* ----------------------------- Program Flow ----------------------------- */ - -/* Jump to a new program location or vector. - * These functions will also call the pc_changed callback if it was enabled - * in m68kconf.h. - */ -INLINE void m68ki_jump(uint new_pc) -{ - REG_PC = new_pc; -} - -INLINE void m68ki_jump_vector(uint vector) -{ - REG_PC = m68ki_read_data_32(vector<<2); -} - - -/* Branch to a new memory location. - * The 32-bit branch will call pc_changed if it was enabled in m68kconf.h. - * So far I've found no problems with not calling pc_changed for 8 or 16 - * bit branches. - */ -INLINE void m68ki_branch_8(uint offset) -{ - REG_PC += MAKE_INT_8(offset); -} - -INLINE void m68ki_branch_16(uint offset) -{ - REG_PC += MAKE_INT_16(offset); -} - -INLINE void m68ki_branch_32(uint offset) -{ - REG_PC += offset; -} - - - -/* ---------------------------- Status Register --------------------------- */ - -/* Set the S flag and change the active stack pointer. - * Note that value MUST be 4 or 0. - */ -INLINE void m68ki_set_s_flag(uint value) -{ - /* Backup the old stack pointer */ - REG_SP_BASE[FLAG_S] = REG_SP; - /* Set the S flag */ - FLAG_S = value; - /* Set the new stack pointer */ - REG_SP = REG_SP_BASE[FLAG_S]; -} - - -/* Set the condition code register */ -INLINE void m68ki_set_ccr(uint value) -{ - FLAG_X = BIT_4(value) << 4; - FLAG_N = BIT_3(value) << 4; - FLAG_Z = !BIT_2(value); - FLAG_V = BIT_1(value) << 6; - FLAG_C = BIT_0(value) << 8; -} - - -/* Set the status register and check for interrupts */ -INLINE void m68ki_set_sr(uint value) -{ - /* Set the status register */ - FLAG_T1 = BIT_F(value); - FLAG_INT_MASK = value & 0x0700; - m68ki_set_ccr(value); - m68ki_set_s_flag((value >> 11) & 4); - - /* Check current IRQ status */ - m68ki_check_interrupts(); -} - - -/* ------------------------- Exception Processing ------------------------- */ - -/* Initiate exception processing */ -INLINE uint m68ki_init_exception(void) -{ - /* Save the old status register */ - uint sr = m68ki_get_sr(); - - /* Turn off trace flag, clear pending traces */ - FLAG_T1 = 0; - m68ki_clear_trace() - - /* Enter supervisor mode */ - m68ki_set_s_flag(SFLAG_SET); - - return sr; -} - -/* 3 word stack frame (68000 only) */ -INLINE void m68ki_stack_frame_3word(uint pc, uint sr) -{ - m68ki_push_32(pc); - m68ki_push_16(sr); -} - -#if M68K_EMULATE_ADDRESS_ERROR -/* Bus error stack frame (68000 only). - */ -INLINE void m68ki_stack_frame_buserr(uint sr) -{ - m68ki_push_32(REG_PC); - m68ki_push_16(sr); - m68ki_push_16(REG_IR); - m68ki_push_32(m68ki_cpu.aerr_address); /* access address */ - /* 0 0 0 0 0 0 0 0 0 0 0 R/W I/N FC - * R/W 0 = write, 1 = read - * I/N 0 = instruction, 1 = not - * FC 3-bit function code - */ - m68ki_push_16(m68ki_cpu.aerr_write_mode | CPU_INSTR_MODE | m68ki_cpu.aerr_fc); -} -#endif - -/* Used for Group 2 exceptions. - */ -INLINE void m68ki_exception_trap(uint vector) -{ - uint sr = m68ki_init_exception(); - - m68ki_stack_frame_3word(REG_PC, sr); - - m68ki_jump_vector(vector); - - /* Use up some clock cycles */ - USE_CYCLES(CYC_EXCEPTION[vector]); -} - -/* Trap#n stacks a 0 frame but behaves like group2 otherwise */ -INLINE void m68ki_exception_trapN(uint vector) -{ - uint sr = m68ki_init_exception(); - m68ki_stack_frame_3word(REG_PC, sr); - m68ki_jump_vector(vector); - - /* Use up some clock cycles */ - USE_CYCLES(CYC_EXCEPTION[vector]); -} - -#if M68K_EMULATE_TRACE -/* Exception for trace mode */ -INLINE void m68ki_exception_trace(void) -{ - uint sr = m68ki_init_exception(); - - #if M68K_EMULATE_ADDRESS_ERROR == OPT_ON - CPU_INSTR_MODE = INSTRUCTION_NO; - #endif /* M68K_EMULATE_ADDRESS_ERROR */ - - m68ki_stack_frame_3word(REG_PC, sr); - m68ki_jump_vector(EXCEPTION_TRACE); - - /* Trace nullifies a STOP instruction */ - CPU_STOPPED &= ~STOP_LEVEL_STOP; - - /* Use up some clock cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_TRACE]); -} -#endif - -/* Exception for privilege violation */ -static void m68ki_exception_privilege_violation(void) -{ - uint sr = m68ki_init_exception(); - - #if M68K_EMULATE_ADDRESS_ERROR == OPT_ON - CPU_INSTR_MODE = INSTRUCTION_NO; - #endif /* M68K_EMULATE_ADDRESS_ERROR */ - - m68ki_stack_frame_3word(REG_PC-2, sr); - m68ki_jump_vector(EXCEPTION_PRIVILEGE_VIOLATION); - - /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_PRIVILEGE_VIOLATION] - CYC_INSTRUCTION[REG_IR]); -} - -/* Exception for A-Line instructions */ -INLINE void m68ki_exception_1010(void) -{ - uint sr = m68ki_init_exception(); - m68ki_stack_frame_3word(REG_PC-2, sr); - m68ki_jump_vector(EXCEPTION_1010); - - /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1010] - CYC_INSTRUCTION[REG_IR]); -} - -/* Exception for F-Line instructions */ -INLINE void m68ki_exception_1111(void) -{ - uint sr = m68ki_init_exception(); - m68ki_stack_frame_3word(REG_PC-2, sr); - m68ki_jump_vector(EXCEPTION_1111); - - /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1111] - CYC_INSTRUCTION[REG_IR]); -} - -/* Exception for illegal instructions */ -INLINE void m68ki_exception_illegal(void) -{ - uint sr = m68ki_init_exception(); - - #if M68K_EMULATE_ADDRESS_ERROR == OPT_ON - CPU_INSTR_MODE = INSTRUCTION_NO; - #endif /* M68K_EMULATE_ADDRESS_ERROR */ - - m68ki_stack_frame_3word(REG_PC-2, sr); - m68ki_jump_vector(EXCEPTION_ILLEGAL_INSTRUCTION); - - /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ILLEGAL_INSTRUCTION] - CYC_INSTRUCTION[REG_IR]); -} - - -#if M68K_EMULATE_ADDRESS_ERROR -/* Exception for address error */ -INLINE void m68ki_exception_address_error(void) -{ - uint sr = m68ki_init_exception(); - - /* If we were processing a bus error, address error, or reset, - * this is a catastrophic failure. - * Halt the CPU - */ - if(CPU_RUN_MODE == RUN_MODE_BERR_AERR_RESET) - { - CPU_STOPPED = STOP_LEVEL_HALT; - SET_CYCLES(m68ki_cpu.cycle_end - CYC_INSTRUCTION[REG_IR]); - return; - } - CPU_RUN_MODE = RUN_MODE_BERR_AERR_RESET; - - /* Note: This is implemented for 68000 only! */ - m68ki_stack_frame_buserr(sr); - - m68ki_jump_vector(EXCEPTION_ADDRESS_ERROR); - - /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ADDRESS_ERROR] - CYC_INSTRUCTION[REG_IR]); -} -#endif - -/* Service an interrupt request and start exception processing */ -INLINE void m68ki_exception_interrupt(uint int_level) -{ - uint vector, sr, new_pc; - - #if M68K_EMULATE_ADDRESS_ERROR == OPT_ON - CPU_INSTR_MODE = INSTRUCTION_NO; - #endif /* M68K_EMULATE_ADDRESS_ERROR */ - - /* Turn off the stopped state */ - CPU_STOPPED &= STOP_LEVEL_HALT; - - /* If we are halted, don't do anything */ - if(CPU_STOPPED) - return; - - /* Always use the autovectors. */ - vector = EXCEPTION_INTERRUPT_AUTOVECTOR+int_level; - - /* Start exception processing */ - sr = m68ki_init_exception(); - - /* Set the interrupt mask to the level of the one being serviced */ - FLAG_INT_MASK = int_level<<8; - - /* Acknowledge the interrupt */ - m68ki_int_ack(int_level); - - /* Get the new PC */ - new_pc = m68ki_read_data_32(vector<<2); - - /* If vector is uninitialized, call the uninitialized interrupt vector */ - if(new_pc == 0) - new_pc = m68ki_read_data_32((EXCEPTION_UNINITIALIZED_INTERRUPT<<2)); - - /* Generate a stack frame */ - m68ki_stack_frame_3word(REG_PC, sr); - - m68ki_jump(new_pc); - - /* Update cycle count now */ - USE_CYCLES(CYC_EXCEPTION[vector]); -} - -/* ASG: Check for interrupts */ -INLINE void m68ki_check_interrupts(void) -{ - if(CPU_INT_LEVEL > FLAG_INT_MASK) - m68ki_exception_interrupt(CPU_INT_LEVEL>>8); -} - - -/* ======================================================================== */ -/* ============================== END OF FILE ============================= */ -/* ======================================================================== */ - -#endif /* M68KCPU__HEADER */ diff --git a/waterbox/gpgx/core/m68k/m68ki_cycles.h b/waterbox/gpgx/core/m68k/m68ki_cycles.h deleted file mode 100644 index cda81b8d6c..0000000000 --- a/waterbox/gpgx/core/m68k/m68ki_cycles.h +++ /dev/null @@ -1,4099 +0,0 @@ -static const unsigned char m68ki_cycles[0x10000] = -{ - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 20*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, - 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 32*7, 36*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 20*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 20*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, - 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 32*7, 36*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, - 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 32*7, 36*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, - 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 32*7, 36*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 20*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 0*7, 0*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, - 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 32*7, 36*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, - 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 34*7, 32*7, 36*7, 32*7, 34*7, 28*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, - 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 28*7, 32*7, 28*7, 30*7, 24*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, - 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 28*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 32*7, 30*7, 34*7, 30*7, 32*7, 26*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 24*7, 26*7, 20*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 22*7, 24*7, 18*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 20*7, 24*7, 20*7, 22*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 16*7, 20*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, - 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 22*7, 26*7, 0*7, 0*7, 4*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 4*7, 4*7, 20*7, 0*7, 16*7, 4*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 18*7, 20*7, 18*7, 22*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 10*7, 12*7, 10*7, 14*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 8*7, 12*7, 8*7, 12*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 14*7, 18*7, 14*7, 16*7, 10*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 14*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 8*7, 12*7, 8*7, 10*7, 4*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 10*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 12*7, 16*7, 12*7, 14*7, 8*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 16*7, 18*7, 12*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, 30*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, - 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 22*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, 24*7, - 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 26*7, 24*7, 28*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, - 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, - 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 20*7, 18*7, 22*7, 18*7, 20*7, 16*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, 12*7, - 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 14*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, 16*7, - 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 18*7, 16*7, 20*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, - 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, 4*7, -}; diff --git a/waterbox/gpgx/core/m68k/m68ki_instruction_jump_table.h b/waterbox/gpgx/core/m68k/m68ki_instruction_jump_table.h deleted file mode 100644 index eac71feadb..0000000000 --- a/waterbox/gpgx/core/m68k/m68ki_instruction_jump_table.h +++ /dev/null @@ -1,8195 +0,0 @@ -static void (* const m68ki_instruction_jump_table[0x10000])(void) = -{ - m68k_op_ori_8_d, m68k_op_ori_8_d, m68k_op_ori_8_d, m68k_op_ori_8_d, m68k_op_ori_8_d, m68k_op_ori_8_d, m68k_op_ori_8_d, m68k_op_ori_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ori_8_ai, m68k_op_ori_8_ai, m68k_op_ori_8_ai, m68k_op_ori_8_ai, m68k_op_ori_8_ai, m68k_op_ori_8_ai, m68k_op_ori_8_ai, m68k_op_ori_8_ai, - m68k_op_ori_8_pi, m68k_op_ori_8_pi, m68k_op_ori_8_pi, m68k_op_ori_8_pi, m68k_op_ori_8_pi, m68k_op_ori_8_pi, m68k_op_ori_8_pi, m68k_op_ori_8_pi7, - m68k_op_ori_8_pd, m68k_op_ori_8_pd, m68k_op_ori_8_pd, m68k_op_ori_8_pd, m68k_op_ori_8_pd, m68k_op_ori_8_pd, m68k_op_ori_8_pd, m68k_op_ori_8_pd7, - m68k_op_ori_8_di, m68k_op_ori_8_di, m68k_op_ori_8_di, m68k_op_ori_8_di, m68k_op_ori_8_di, m68k_op_ori_8_di, m68k_op_ori_8_di, m68k_op_ori_8_di, - m68k_op_ori_8_ix, m68k_op_ori_8_ix, m68k_op_ori_8_ix, m68k_op_ori_8_ix, m68k_op_ori_8_ix, m68k_op_ori_8_ix, m68k_op_ori_8_ix, m68k_op_ori_8_ix, - m68k_op_ori_8_aw, m68k_op_ori_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_ori_16_toc, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ori_16_d, m68k_op_ori_16_d, m68k_op_ori_16_d, m68k_op_ori_16_d, m68k_op_ori_16_d, m68k_op_ori_16_d, m68k_op_ori_16_d, m68k_op_ori_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ori_16_ai, m68k_op_ori_16_ai, m68k_op_ori_16_ai, m68k_op_ori_16_ai, m68k_op_ori_16_ai, m68k_op_ori_16_ai, m68k_op_ori_16_ai, m68k_op_ori_16_ai, - m68k_op_ori_16_pi, m68k_op_ori_16_pi, m68k_op_ori_16_pi, m68k_op_ori_16_pi, m68k_op_ori_16_pi, m68k_op_ori_16_pi, m68k_op_ori_16_pi, m68k_op_ori_16_pi, - m68k_op_ori_16_pd, m68k_op_ori_16_pd, m68k_op_ori_16_pd, m68k_op_ori_16_pd, m68k_op_ori_16_pd, m68k_op_ori_16_pd, m68k_op_ori_16_pd, m68k_op_ori_16_pd, - m68k_op_ori_16_di, m68k_op_ori_16_di, m68k_op_ori_16_di, m68k_op_ori_16_di, m68k_op_ori_16_di, m68k_op_ori_16_di, m68k_op_ori_16_di, m68k_op_ori_16_di, - m68k_op_ori_16_ix, m68k_op_ori_16_ix, m68k_op_ori_16_ix, m68k_op_ori_16_ix, m68k_op_ori_16_ix, m68k_op_ori_16_ix, m68k_op_ori_16_ix, m68k_op_ori_16_ix, - m68k_op_ori_16_aw, m68k_op_ori_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_ori_16_tos, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ori_32_d, m68k_op_ori_32_d, m68k_op_ori_32_d, m68k_op_ori_32_d, m68k_op_ori_32_d, m68k_op_ori_32_d, m68k_op_ori_32_d, m68k_op_ori_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ori_32_ai, m68k_op_ori_32_ai, m68k_op_ori_32_ai, m68k_op_ori_32_ai, m68k_op_ori_32_ai, m68k_op_ori_32_ai, m68k_op_ori_32_ai, m68k_op_ori_32_ai, - m68k_op_ori_32_pi, m68k_op_ori_32_pi, m68k_op_ori_32_pi, m68k_op_ori_32_pi, m68k_op_ori_32_pi, m68k_op_ori_32_pi, m68k_op_ori_32_pi, m68k_op_ori_32_pi, - m68k_op_ori_32_pd, m68k_op_ori_32_pd, m68k_op_ori_32_pd, m68k_op_ori_32_pd, m68k_op_ori_32_pd, m68k_op_ori_32_pd, m68k_op_ori_32_pd, m68k_op_ori_32_pd, - m68k_op_ori_32_di, m68k_op_ori_32_di, m68k_op_ori_32_di, m68k_op_ori_32_di, m68k_op_ori_32_di, m68k_op_ori_32_di, m68k_op_ori_32_di, m68k_op_ori_32_di, - m68k_op_ori_32_ix, m68k_op_ori_32_ix, m68k_op_ori_32_ix, m68k_op_ori_32_ix, m68k_op_ori_32_ix, m68k_op_ori_32_ix, m68k_op_ori_32_ix, m68k_op_ori_32_ix, - m68k_op_ori_32_aw, m68k_op_ori_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_andi_8_d, m68k_op_andi_8_d, m68k_op_andi_8_d, m68k_op_andi_8_d, m68k_op_andi_8_d, m68k_op_andi_8_d, m68k_op_andi_8_d, m68k_op_andi_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_andi_8_ai, m68k_op_andi_8_ai, m68k_op_andi_8_ai, m68k_op_andi_8_ai, m68k_op_andi_8_ai, m68k_op_andi_8_ai, m68k_op_andi_8_ai, m68k_op_andi_8_ai, - m68k_op_andi_8_pi, m68k_op_andi_8_pi, m68k_op_andi_8_pi, m68k_op_andi_8_pi, m68k_op_andi_8_pi, m68k_op_andi_8_pi, m68k_op_andi_8_pi, m68k_op_andi_8_pi7, - m68k_op_andi_8_pd, m68k_op_andi_8_pd, m68k_op_andi_8_pd, m68k_op_andi_8_pd, m68k_op_andi_8_pd, m68k_op_andi_8_pd, m68k_op_andi_8_pd, m68k_op_andi_8_pd7, - m68k_op_andi_8_di, m68k_op_andi_8_di, m68k_op_andi_8_di, m68k_op_andi_8_di, m68k_op_andi_8_di, m68k_op_andi_8_di, m68k_op_andi_8_di, m68k_op_andi_8_di, - m68k_op_andi_8_ix, m68k_op_andi_8_ix, m68k_op_andi_8_ix, m68k_op_andi_8_ix, m68k_op_andi_8_ix, m68k_op_andi_8_ix, m68k_op_andi_8_ix, m68k_op_andi_8_ix, - m68k_op_andi_8_aw, m68k_op_andi_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_andi_16_toc, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_andi_16_d, m68k_op_andi_16_d, m68k_op_andi_16_d, m68k_op_andi_16_d, m68k_op_andi_16_d, m68k_op_andi_16_d, m68k_op_andi_16_d, m68k_op_andi_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_andi_16_ai, m68k_op_andi_16_ai, m68k_op_andi_16_ai, m68k_op_andi_16_ai, m68k_op_andi_16_ai, m68k_op_andi_16_ai, m68k_op_andi_16_ai, m68k_op_andi_16_ai, - m68k_op_andi_16_pi, m68k_op_andi_16_pi, m68k_op_andi_16_pi, m68k_op_andi_16_pi, m68k_op_andi_16_pi, m68k_op_andi_16_pi, m68k_op_andi_16_pi, m68k_op_andi_16_pi, - m68k_op_andi_16_pd, m68k_op_andi_16_pd, m68k_op_andi_16_pd, m68k_op_andi_16_pd, m68k_op_andi_16_pd, m68k_op_andi_16_pd, m68k_op_andi_16_pd, m68k_op_andi_16_pd, - m68k_op_andi_16_di, m68k_op_andi_16_di, m68k_op_andi_16_di, m68k_op_andi_16_di, m68k_op_andi_16_di, m68k_op_andi_16_di, m68k_op_andi_16_di, m68k_op_andi_16_di, - m68k_op_andi_16_ix, m68k_op_andi_16_ix, m68k_op_andi_16_ix, m68k_op_andi_16_ix, m68k_op_andi_16_ix, m68k_op_andi_16_ix, m68k_op_andi_16_ix, m68k_op_andi_16_ix, - m68k_op_andi_16_aw, m68k_op_andi_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_andi_16_tos, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_andi_32_d, m68k_op_andi_32_d, m68k_op_andi_32_d, m68k_op_andi_32_d, m68k_op_andi_32_d, m68k_op_andi_32_d, m68k_op_andi_32_d, m68k_op_andi_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_andi_32_ai, m68k_op_andi_32_ai, m68k_op_andi_32_ai, m68k_op_andi_32_ai, m68k_op_andi_32_ai, m68k_op_andi_32_ai, m68k_op_andi_32_ai, m68k_op_andi_32_ai, - m68k_op_andi_32_pi, m68k_op_andi_32_pi, m68k_op_andi_32_pi, m68k_op_andi_32_pi, m68k_op_andi_32_pi, m68k_op_andi_32_pi, m68k_op_andi_32_pi, m68k_op_andi_32_pi, - m68k_op_andi_32_pd, m68k_op_andi_32_pd, m68k_op_andi_32_pd, m68k_op_andi_32_pd, m68k_op_andi_32_pd, m68k_op_andi_32_pd, m68k_op_andi_32_pd, m68k_op_andi_32_pd, - m68k_op_andi_32_di, m68k_op_andi_32_di, m68k_op_andi_32_di, m68k_op_andi_32_di, m68k_op_andi_32_di, m68k_op_andi_32_di, m68k_op_andi_32_di, m68k_op_andi_32_di, - m68k_op_andi_32_ix, m68k_op_andi_32_ix, m68k_op_andi_32_ix, m68k_op_andi_32_ix, m68k_op_andi_32_ix, m68k_op_andi_32_ix, m68k_op_andi_32_ix, m68k_op_andi_32_ix, - m68k_op_andi_32_aw, m68k_op_andi_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subi_8_d, m68k_op_subi_8_d, m68k_op_subi_8_d, m68k_op_subi_8_d, m68k_op_subi_8_d, m68k_op_subi_8_d, m68k_op_subi_8_d, m68k_op_subi_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subi_8_ai, m68k_op_subi_8_ai, m68k_op_subi_8_ai, m68k_op_subi_8_ai, m68k_op_subi_8_ai, m68k_op_subi_8_ai, m68k_op_subi_8_ai, m68k_op_subi_8_ai, - m68k_op_subi_8_pi, m68k_op_subi_8_pi, m68k_op_subi_8_pi, m68k_op_subi_8_pi, m68k_op_subi_8_pi, m68k_op_subi_8_pi, m68k_op_subi_8_pi, m68k_op_subi_8_pi7, - m68k_op_subi_8_pd, m68k_op_subi_8_pd, m68k_op_subi_8_pd, m68k_op_subi_8_pd, m68k_op_subi_8_pd, m68k_op_subi_8_pd, m68k_op_subi_8_pd, m68k_op_subi_8_pd7, - m68k_op_subi_8_di, m68k_op_subi_8_di, m68k_op_subi_8_di, m68k_op_subi_8_di, m68k_op_subi_8_di, m68k_op_subi_8_di, m68k_op_subi_8_di, m68k_op_subi_8_di, - m68k_op_subi_8_ix, m68k_op_subi_8_ix, m68k_op_subi_8_ix, m68k_op_subi_8_ix, m68k_op_subi_8_ix, m68k_op_subi_8_ix, m68k_op_subi_8_ix, m68k_op_subi_8_ix, - m68k_op_subi_8_aw, m68k_op_subi_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subi_16_d, m68k_op_subi_16_d, m68k_op_subi_16_d, m68k_op_subi_16_d, m68k_op_subi_16_d, m68k_op_subi_16_d, m68k_op_subi_16_d, m68k_op_subi_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subi_16_ai, m68k_op_subi_16_ai, m68k_op_subi_16_ai, m68k_op_subi_16_ai, m68k_op_subi_16_ai, m68k_op_subi_16_ai, m68k_op_subi_16_ai, m68k_op_subi_16_ai, - m68k_op_subi_16_pi, m68k_op_subi_16_pi, m68k_op_subi_16_pi, m68k_op_subi_16_pi, m68k_op_subi_16_pi, m68k_op_subi_16_pi, m68k_op_subi_16_pi, m68k_op_subi_16_pi, - m68k_op_subi_16_pd, m68k_op_subi_16_pd, m68k_op_subi_16_pd, m68k_op_subi_16_pd, m68k_op_subi_16_pd, m68k_op_subi_16_pd, m68k_op_subi_16_pd, m68k_op_subi_16_pd, - m68k_op_subi_16_di, m68k_op_subi_16_di, m68k_op_subi_16_di, m68k_op_subi_16_di, m68k_op_subi_16_di, m68k_op_subi_16_di, m68k_op_subi_16_di, m68k_op_subi_16_di, - m68k_op_subi_16_ix, m68k_op_subi_16_ix, m68k_op_subi_16_ix, m68k_op_subi_16_ix, m68k_op_subi_16_ix, m68k_op_subi_16_ix, m68k_op_subi_16_ix, m68k_op_subi_16_ix, - m68k_op_subi_16_aw, m68k_op_subi_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subi_32_d, m68k_op_subi_32_d, m68k_op_subi_32_d, m68k_op_subi_32_d, m68k_op_subi_32_d, m68k_op_subi_32_d, m68k_op_subi_32_d, m68k_op_subi_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subi_32_ai, m68k_op_subi_32_ai, m68k_op_subi_32_ai, m68k_op_subi_32_ai, m68k_op_subi_32_ai, m68k_op_subi_32_ai, m68k_op_subi_32_ai, m68k_op_subi_32_ai, - m68k_op_subi_32_pi, m68k_op_subi_32_pi, m68k_op_subi_32_pi, m68k_op_subi_32_pi, m68k_op_subi_32_pi, m68k_op_subi_32_pi, m68k_op_subi_32_pi, m68k_op_subi_32_pi, - m68k_op_subi_32_pd, m68k_op_subi_32_pd, m68k_op_subi_32_pd, m68k_op_subi_32_pd, m68k_op_subi_32_pd, m68k_op_subi_32_pd, m68k_op_subi_32_pd, m68k_op_subi_32_pd, - m68k_op_subi_32_di, m68k_op_subi_32_di, m68k_op_subi_32_di, m68k_op_subi_32_di, m68k_op_subi_32_di, m68k_op_subi_32_di, m68k_op_subi_32_di, m68k_op_subi_32_di, - m68k_op_subi_32_ix, m68k_op_subi_32_ix, m68k_op_subi_32_ix, m68k_op_subi_32_ix, m68k_op_subi_32_ix, m68k_op_subi_32_ix, m68k_op_subi_32_ix, m68k_op_subi_32_ix, - m68k_op_subi_32_aw, m68k_op_subi_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addi_8_d, m68k_op_addi_8_d, m68k_op_addi_8_d, m68k_op_addi_8_d, m68k_op_addi_8_d, m68k_op_addi_8_d, m68k_op_addi_8_d, m68k_op_addi_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addi_8_ai, m68k_op_addi_8_ai, m68k_op_addi_8_ai, m68k_op_addi_8_ai, m68k_op_addi_8_ai, m68k_op_addi_8_ai, m68k_op_addi_8_ai, m68k_op_addi_8_ai, - m68k_op_addi_8_pi, m68k_op_addi_8_pi, m68k_op_addi_8_pi, m68k_op_addi_8_pi, m68k_op_addi_8_pi, m68k_op_addi_8_pi, m68k_op_addi_8_pi, m68k_op_addi_8_pi7, - m68k_op_addi_8_pd, m68k_op_addi_8_pd, m68k_op_addi_8_pd, m68k_op_addi_8_pd, m68k_op_addi_8_pd, m68k_op_addi_8_pd, m68k_op_addi_8_pd, m68k_op_addi_8_pd7, - m68k_op_addi_8_di, m68k_op_addi_8_di, m68k_op_addi_8_di, m68k_op_addi_8_di, m68k_op_addi_8_di, m68k_op_addi_8_di, m68k_op_addi_8_di, m68k_op_addi_8_di, - m68k_op_addi_8_ix, m68k_op_addi_8_ix, m68k_op_addi_8_ix, m68k_op_addi_8_ix, m68k_op_addi_8_ix, m68k_op_addi_8_ix, m68k_op_addi_8_ix, m68k_op_addi_8_ix, - m68k_op_addi_8_aw, m68k_op_addi_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addi_16_d, m68k_op_addi_16_d, m68k_op_addi_16_d, m68k_op_addi_16_d, m68k_op_addi_16_d, m68k_op_addi_16_d, m68k_op_addi_16_d, m68k_op_addi_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addi_16_ai, m68k_op_addi_16_ai, m68k_op_addi_16_ai, m68k_op_addi_16_ai, m68k_op_addi_16_ai, m68k_op_addi_16_ai, m68k_op_addi_16_ai, m68k_op_addi_16_ai, - m68k_op_addi_16_pi, m68k_op_addi_16_pi, m68k_op_addi_16_pi, m68k_op_addi_16_pi, m68k_op_addi_16_pi, m68k_op_addi_16_pi, m68k_op_addi_16_pi, m68k_op_addi_16_pi, - m68k_op_addi_16_pd, m68k_op_addi_16_pd, m68k_op_addi_16_pd, m68k_op_addi_16_pd, m68k_op_addi_16_pd, m68k_op_addi_16_pd, m68k_op_addi_16_pd, m68k_op_addi_16_pd, - m68k_op_addi_16_di, m68k_op_addi_16_di, m68k_op_addi_16_di, m68k_op_addi_16_di, m68k_op_addi_16_di, m68k_op_addi_16_di, m68k_op_addi_16_di, m68k_op_addi_16_di, - m68k_op_addi_16_ix, m68k_op_addi_16_ix, m68k_op_addi_16_ix, m68k_op_addi_16_ix, m68k_op_addi_16_ix, m68k_op_addi_16_ix, m68k_op_addi_16_ix, m68k_op_addi_16_ix, - m68k_op_addi_16_aw, m68k_op_addi_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addi_32_d, m68k_op_addi_32_d, m68k_op_addi_32_d, m68k_op_addi_32_d, m68k_op_addi_32_d, m68k_op_addi_32_d, m68k_op_addi_32_d, m68k_op_addi_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addi_32_ai, m68k_op_addi_32_ai, m68k_op_addi_32_ai, m68k_op_addi_32_ai, m68k_op_addi_32_ai, m68k_op_addi_32_ai, m68k_op_addi_32_ai, m68k_op_addi_32_ai, - m68k_op_addi_32_pi, m68k_op_addi_32_pi, m68k_op_addi_32_pi, m68k_op_addi_32_pi, m68k_op_addi_32_pi, m68k_op_addi_32_pi, m68k_op_addi_32_pi, m68k_op_addi_32_pi, - m68k_op_addi_32_pd, m68k_op_addi_32_pd, m68k_op_addi_32_pd, m68k_op_addi_32_pd, m68k_op_addi_32_pd, m68k_op_addi_32_pd, m68k_op_addi_32_pd, m68k_op_addi_32_pd, - m68k_op_addi_32_di, m68k_op_addi_32_di, m68k_op_addi_32_di, m68k_op_addi_32_di, m68k_op_addi_32_di, m68k_op_addi_32_di, m68k_op_addi_32_di, m68k_op_addi_32_di, - m68k_op_addi_32_ix, m68k_op_addi_32_ix, m68k_op_addi_32_ix, m68k_op_addi_32_ix, m68k_op_addi_32_ix, m68k_op_addi_32_ix, m68k_op_addi_32_ix, m68k_op_addi_32_ix, - m68k_op_addi_32_aw, m68k_op_addi_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_s_d, m68k_op_btst_32_s_d, m68k_op_btst_32_s_d, m68k_op_btst_32_s_d, m68k_op_btst_32_s_d, m68k_op_btst_32_s_d, m68k_op_btst_32_s_d, m68k_op_btst_32_s_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_8_s_ai, m68k_op_btst_8_s_ai, m68k_op_btst_8_s_ai, m68k_op_btst_8_s_ai, m68k_op_btst_8_s_ai, m68k_op_btst_8_s_ai, m68k_op_btst_8_s_ai, m68k_op_btst_8_s_ai, - m68k_op_btst_8_s_pi, m68k_op_btst_8_s_pi, m68k_op_btst_8_s_pi, m68k_op_btst_8_s_pi, m68k_op_btst_8_s_pi, m68k_op_btst_8_s_pi, m68k_op_btst_8_s_pi, m68k_op_btst_8_s_pi7, - m68k_op_btst_8_s_pd, m68k_op_btst_8_s_pd, m68k_op_btst_8_s_pd, m68k_op_btst_8_s_pd, m68k_op_btst_8_s_pd, m68k_op_btst_8_s_pd, m68k_op_btst_8_s_pd, m68k_op_btst_8_s_pd7, - m68k_op_btst_8_s_di, m68k_op_btst_8_s_di, m68k_op_btst_8_s_di, m68k_op_btst_8_s_di, m68k_op_btst_8_s_di, m68k_op_btst_8_s_di, m68k_op_btst_8_s_di, m68k_op_btst_8_s_di, - m68k_op_btst_8_s_ix, m68k_op_btst_8_s_ix, m68k_op_btst_8_s_ix, m68k_op_btst_8_s_ix, m68k_op_btst_8_s_ix, m68k_op_btst_8_s_ix, m68k_op_btst_8_s_ix, m68k_op_btst_8_s_ix, - m68k_op_btst_8_s_aw, m68k_op_btst_8_s_al, m68k_op_btst_8_s_pcdi, m68k_op_btst_8_s_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_s_d, m68k_op_bchg_32_s_d, m68k_op_bchg_32_s_d, m68k_op_bchg_32_s_d, m68k_op_bchg_32_s_d, m68k_op_bchg_32_s_d, m68k_op_bchg_32_s_d, m68k_op_bchg_32_s_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_8_s_ai, m68k_op_bchg_8_s_ai, m68k_op_bchg_8_s_ai, m68k_op_bchg_8_s_ai, m68k_op_bchg_8_s_ai, m68k_op_bchg_8_s_ai, m68k_op_bchg_8_s_ai, m68k_op_bchg_8_s_ai, - m68k_op_bchg_8_s_pi, m68k_op_bchg_8_s_pi, m68k_op_bchg_8_s_pi, m68k_op_bchg_8_s_pi, m68k_op_bchg_8_s_pi, m68k_op_bchg_8_s_pi, m68k_op_bchg_8_s_pi, m68k_op_bchg_8_s_pi7, - m68k_op_bchg_8_s_pd, m68k_op_bchg_8_s_pd, m68k_op_bchg_8_s_pd, m68k_op_bchg_8_s_pd, m68k_op_bchg_8_s_pd, m68k_op_bchg_8_s_pd, m68k_op_bchg_8_s_pd, m68k_op_bchg_8_s_pd7, - m68k_op_bchg_8_s_di, m68k_op_bchg_8_s_di, m68k_op_bchg_8_s_di, m68k_op_bchg_8_s_di, m68k_op_bchg_8_s_di, m68k_op_bchg_8_s_di, m68k_op_bchg_8_s_di, m68k_op_bchg_8_s_di, - m68k_op_bchg_8_s_ix, m68k_op_bchg_8_s_ix, m68k_op_bchg_8_s_ix, m68k_op_bchg_8_s_ix, m68k_op_bchg_8_s_ix, m68k_op_bchg_8_s_ix, m68k_op_bchg_8_s_ix, m68k_op_bchg_8_s_ix, - m68k_op_bchg_8_s_aw, m68k_op_bchg_8_s_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_s_d, m68k_op_bclr_32_s_d, m68k_op_bclr_32_s_d, m68k_op_bclr_32_s_d, m68k_op_bclr_32_s_d, m68k_op_bclr_32_s_d, m68k_op_bclr_32_s_d, m68k_op_bclr_32_s_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_8_s_ai, m68k_op_bclr_8_s_ai, m68k_op_bclr_8_s_ai, m68k_op_bclr_8_s_ai, m68k_op_bclr_8_s_ai, m68k_op_bclr_8_s_ai, m68k_op_bclr_8_s_ai, m68k_op_bclr_8_s_ai, - m68k_op_bclr_8_s_pi, m68k_op_bclr_8_s_pi, m68k_op_bclr_8_s_pi, m68k_op_bclr_8_s_pi, m68k_op_bclr_8_s_pi, m68k_op_bclr_8_s_pi, m68k_op_bclr_8_s_pi, m68k_op_bclr_8_s_pi7, - m68k_op_bclr_8_s_pd, m68k_op_bclr_8_s_pd, m68k_op_bclr_8_s_pd, m68k_op_bclr_8_s_pd, m68k_op_bclr_8_s_pd, m68k_op_bclr_8_s_pd, m68k_op_bclr_8_s_pd, m68k_op_bclr_8_s_pd7, - m68k_op_bclr_8_s_di, m68k_op_bclr_8_s_di, m68k_op_bclr_8_s_di, m68k_op_bclr_8_s_di, m68k_op_bclr_8_s_di, m68k_op_bclr_8_s_di, m68k_op_bclr_8_s_di, m68k_op_bclr_8_s_di, - m68k_op_bclr_8_s_ix, m68k_op_bclr_8_s_ix, m68k_op_bclr_8_s_ix, m68k_op_bclr_8_s_ix, m68k_op_bclr_8_s_ix, m68k_op_bclr_8_s_ix, m68k_op_bclr_8_s_ix, m68k_op_bclr_8_s_ix, - m68k_op_bclr_8_s_aw, m68k_op_bclr_8_s_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_s_d, m68k_op_bset_32_s_d, m68k_op_bset_32_s_d, m68k_op_bset_32_s_d, m68k_op_bset_32_s_d, m68k_op_bset_32_s_d, m68k_op_bset_32_s_d, m68k_op_bset_32_s_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_8_s_ai, m68k_op_bset_8_s_ai, m68k_op_bset_8_s_ai, m68k_op_bset_8_s_ai, m68k_op_bset_8_s_ai, m68k_op_bset_8_s_ai, m68k_op_bset_8_s_ai, m68k_op_bset_8_s_ai, - m68k_op_bset_8_s_pi, m68k_op_bset_8_s_pi, m68k_op_bset_8_s_pi, m68k_op_bset_8_s_pi, m68k_op_bset_8_s_pi, m68k_op_bset_8_s_pi, m68k_op_bset_8_s_pi, m68k_op_bset_8_s_pi7, - m68k_op_bset_8_s_pd, m68k_op_bset_8_s_pd, m68k_op_bset_8_s_pd, m68k_op_bset_8_s_pd, m68k_op_bset_8_s_pd, m68k_op_bset_8_s_pd, m68k_op_bset_8_s_pd, m68k_op_bset_8_s_pd7, - m68k_op_bset_8_s_di, m68k_op_bset_8_s_di, m68k_op_bset_8_s_di, m68k_op_bset_8_s_di, m68k_op_bset_8_s_di, m68k_op_bset_8_s_di, m68k_op_bset_8_s_di, m68k_op_bset_8_s_di, - m68k_op_bset_8_s_ix, m68k_op_bset_8_s_ix, m68k_op_bset_8_s_ix, m68k_op_bset_8_s_ix, m68k_op_bset_8_s_ix, m68k_op_bset_8_s_ix, m68k_op_bset_8_s_ix, m68k_op_bset_8_s_ix, - m68k_op_bset_8_s_aw, m68k_op_bset_8_s_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eori_8_d, m68k_op_eori_8_d, m68k_op_eori_8_d, m68k_op_eori_8_d, m68k_op_eori_8_d, m68k_op_eori_8_d, m68k_op_eori_8_d, m68k_op_eori_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eori_8_ai, m68k_op_eori_8_ai, m68k_op_eori_8_ai, m68k_op_eori_8_ai, m68k_op_eori_8_ai, m68k_op_eori_8_ai, m68k_op_eori_8_ai, m68k_op_eori_8_ai, - m68k_op_eori_8_pi, m68k_op_eori_8_pi, m68k_op_eori_8_pi, m68k_op_eori_8_pi, m68k_op_eori_8_pi, m68k_op_eori_8_pi, m68k_op_eori_8_pi, m68k_op_eori_8_pi7, - m68k_op_eori_8_pd, m68k_op_eori_8_pd, m68k_op_eori_8_pd, m68k_op_eori_8_pd, m68k_op_eori_8_pd, m68k_op_eori_8_pd, m68k_op_eori_8_pd, m68k_op_eori_8_pd7, - m68k_op_eori_8_di, m68k_op_eori_8_di, m68k_op_eori_8_di, m68k_op_eori_8_di, m68k_op_eori_8_di, m68k_op_eori_8_di, m68k_op_eori_8_di, m68k_op_eori_8_di, - m68k_op_eori_8_ix, m68k_op_eori_8_ix, m68k_op_eori_8_ix, m68k_op_eori_8_ix, m68k_op_eori_8_ix, m68k_op_eori_8_ix, m68k_op_eori_8_ix, m68k_op_eori_8_ix, - m68k_op_eori_8_aw, m68k_op_eori_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_eori_16_toc, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eori_16_d, m68k_op_eori_16_d, m68k_op_eori_16_d, m68k_op_eori_16_d, m68k_op_eori_16_d, m68k_op_eori_16_d, m68k_op_eori_16_d, m68k_op_eori_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eori_16_ai, m68k_op_eori_16_ai, m68k_op_eori_16_ai, m68k_op_eori_16_ai, m68k_op_eori_16_ai, m68k_op_eori_16_ai, m68k_op_eori_16_ai, m68k_op_eori_16_ai, - m68k_op_eori_16_pi, m68k_op_eori_16_pi, m68k_op_eori_16_pi, m68k_op_eori_16_pi, m68k_op_eori_16_pi, m68k_op_eori_16_pi, m68k_op_eori_16_pi, m68k_op_eori_16_pi, - m68k_op_eori_16_pd, m68k_op_eori_16_pd, m68k_op_eori_16_pd, m68k_op_eori_16_pd, m68k_op_eori_16_pd, m68k_op_eori_16_pd, m68k_op_eori_16_pd, m68k_op_eori_16_pd, - m68k_op_eori_16_di, m68k_op_eori_16_di, m68k_op_eori_16_di, m68k_op_eori_16_di, m68k_op_eori_16_di, m68k_op_eori_16_di, m68k_op_eori_16_di, m68k_op_eori_16_di, - m68k_op_eori_16_ix, m68k_op_eori_16_ix, m68k_op_eori_16_ix, m68k_op_eori_16_ix, m68k_op_eori_16_ix, m68k_op_eori_16_ix, m68k_op_eori_16_ix, m68k_op_eori_16_ix, - m68k_op_eori_16_aw, m68k_op_eori_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_eori_16_tos, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eori_32_d, m68k_op_eori_32_d, m68k_op_eori_32_d, m68k_op_eori_32_d, m68k_op_eori_32_d, m68k_op_eori_32_d, m68k_op_eori_32_d, m68k_op_eori_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eori_32_ai, m68k_op_eori_32_ai, m68k_op_eori_32_ai, m68k_op_eori_32_ai, m68k_op_eori_32_ai, m68k_op_eori_32_ai, m68k_op_eori_32_ai, m68k_op_eori_32_ai, - m68k_op_eori_32_pi, m68k_op_eori_32_pi, m68k_op_eori_32_pi, m68k_op_eori_32_pi, m68k_op_eori_32_pi, m68k_op_eori_32_pi, m68k_op_eori_32_pi, m68k_op_eori_32_pi, - m68k_op_eori_32_pd, m68k_op_eori_32_pd, m68k_op_eori_32_pd, m68k_op_eori_32_pd, m68k_op_eori_32_pd, m68k_op_eori_32_pd, m68k_op_eori_32_pd, m68k_op_eori_32_pd, - m68k_op_eori_32_di, m68k_op_eori_32_di, m68k_op_eori_32_di, m68k_op_eori_32_di, m68k_op_eori_32_di, m68k_op_eori_32_di, m68k_op_eori_32_di, m68k_op_eori_32_di, - m68k_op_eori_32_ix, m68k_op_eori_32_ix, m68k_op_eori_32_ix, m68k_op_eori_32_ix, m68k_op_eori_32_ix, m68k_op_eori_32_ix, m68k_op_eori_32_ix, m68k_op_eori_32_ix, - m68k_op_eori_32_aw, m68k_op_eori_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpi_8_d, m68k_op_cmpi_8_d, m68k_op_cmpi_8_d, m68k_op_cmpi_8_d, m68k_op_cmpi_8_d, m68k_op_cmpi_8_d, m68k_op_cmpi_8_d, m68k_op_cmpi_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpi_8_ai, m68k_op_cmpi_8_ai, m68k_op_cmpi_8_ai, m68k_op_cmpi_8_ai, m68k_op_cmpi_8_ai, m68k_op_cmpi_8_ai, m68k_op_cmpi_8_ai, m68k_op_cmpi_8_ai, - m68k_op_cmpi_8_pi, m68k_op_cmpi_8_pi, m68k_op_cmpi_8_pi, m68k_op_cmpi_8_pi, m68k_op_cmpi_8_pi, m68k_op_cmpi_8_pi, m68k_op_cmpi_8_pi, m68k_op_cmpi_8_pi7, - m68k_op_cmpi_8_pd, m68k_op_cmpi_8_pd, m68k_op_cmpi_8_pd, m68k_op_cmpi_8_pd, m68k_op_cmpi_8_pd, m68k_op_cmpi_8_pd, m68k_op_cmpi_8_pd, m68k_op_cmpi_8_pd7, - m68k_op_cmpi_8_di, m68k_op_cmpi_8_di, m68k_op_cmpi_8_di, m68k_op_cmpi_8_di, m68k_op_cmpi_8_di, m68k_op_cmpi_8_di, m68k_op_cmpi_8_di, m68k_op_cmpi_8_di, - m68k_op_cmpi_8_ix, m68k_op_cmpi_8_ix, m68k_op_cmpi_8_ix, m68k_op_cmpi_8_ix, m68k_op_cmpi_8_ix, m68k_op_cmpi_8_ix, m68k_op_cmpi_8_ix, m68k_op_cmpi_8_ix, - m68k_op_cmpi_8_aw, m68k_op_cmpi_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpi_16_d, m68k_op_cmpi_16_d, m68k_op_cmpi_16_d, m68k_op_cmpi_16_d, m68k_op_cmpi_16_d, m68k_op_cmpi_16_d, m68k_op_cmpi_16_d, m68k_op_cmpi_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpi_16_ai, m68k_op_cmpi_16_ai, m68k_op_cmpi_16_ai, m68k_op_cmpi_16_ai, m68k_op_cmpi_16_ai, m68k_op_cmpi_16_ai, m68k_op_cmpi_16_ai, m68k_op_cmpi_16_ai, - m68k_op_cmpi_16_pi, m68k_op_cmpi_16_pi, m68k_op_cmpi_16_pi, m68k_op_cmpi_16_pi, m68k_op_cmpi_16_pi, m68k_op_cmpi_16_pi, m68k_op_cmpi_16_pi, m68k_op_cmpi_16_pi, - m68k_op_cmpi_16_pd, m68k_op_cmpi_16_pd, m68k_op_cmpi_16_pd, m68k_op_cmpi_16_pd, m68k_op_cmpi_16_pd, m68k_op_cmpi_16_pd, m68k_op_cmpi_16_pd, m68k_op_cmpi_16_pd, - m68k_op_cmpi_16_di, m68k_op_cmpi_16_di, m68k_op_cmpi_16_di, m68k_op_cmpi_16_di, m68k_op_cmpi_16_di, m68k_op_cmpi_16_di, m68k_op_cmpi_16_di, m68k_op_cmpi_16_di, - m68k_op_cmpi_16_ix, m68k_op_cmpi_16_ix, m68k_op_cmpi_16_ix, m68k_op_cmpi_16_ix, m68k_op_cmpi_16_ix, m68k_op_cmpi_16_ix, m68k_op_cmpi_16_ix, m68k_op_cmpi_16_ix, - m68k_op_cmpi_16_aw, m68k_op_cmpi_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpi_32_d, m68k_op_cmpi_32_d, m68k_op_cmpi_32_d, m68k_op_cmpi_32_d, m68k_op_cmpi_32_d, m68k_op_cmpi_32_d, m68k_op_cmpi_32_d, m68k_op_cmpi_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpi_32_ai, m68k_op_cmpi_32_ai, m68k_op_cmpi_32_ai, m68k_op_cmpi_32_ai, m68k_op_cmpi_32_ai, m68k_op_cmpi_32_ai, m68k_op_cmpi_32_ai, m68k_op_cmpi_32_ai, - m68k_op_cmpi_32_pi, m68k_op_cmpi_32_pi, m68k_op_cmpi_32_pi, m68k_op_cmpi_32_pi, m68k_op_cmpi_32_pi, m68k_op_cmpi_32_pi, m68k_op_cmpi_32_pi, m68k_op_cmpi_32_pi, - m68k_op_cmpi_32_pd, m68k_op_cmpi_32_pd, m68k_op_cmpi_32_pd, m68k_op_cmpi_32_pd, m68k_op_cmpi_32_pd, m68k_op_cmpi_32_pd, m68k_op_cmpi_32_pd, m68k_op_cmpi_32_pd, - m68k_op_cmpi_32_di, m68k_op_cmpi_32_di, m68k_op_cmpi_32_di, m68k_op_cmpi_32_di, m68k_op_cmpi_32_di, m68k_op_cmpi_32_di, m68k_op_cmpi_32_di, m68k_op_cmpi_32_di, - m68k_op_cmpi_32_ix, m68k_op_cmpi_32_ix, m68k_op_cmpi_32_ix, m68k_op_cmpi_32_ix, m68k_op_cmpi_32_ix, m68k_op_cmpi_32_ix, m68k_op_cmpi_32_ix, m68k_op_cmpi_32_ix, - m68k_op_cmpi_32_aw, m68k_op_cmpi_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, m68k_op_btst_32_r_d, - m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, m68k_op_movep_16_er, - m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, m68k_op_btst_8_r_ai, - m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi, m68k_op_btst_8_r_pi7, - m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd, m68k_op_btst_8_r_pd7, - m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, m68k_op_btst_8_r_di, - m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, m68k_op_btst_8_r_ix, - m68k_op_btst_8_r_aw, m68k_op_btst_8_r_al, m68k_op_btst_8_r_pcdi, m68k_op_btst_8_r_pcix, m68k_op_btst_8_r_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, m68k_op_bchg_32_r_d, - m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, m68k_op_movep_32_er, - m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, m68k_op_bchg_8_r_ai, - m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi, m68k_op_bchg_8_r_pi7, - m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd, m68k_op_bchg_8_r_pd7, - m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, m68k_op_bchg_8_r_di, - m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, m68k_op_bchg_8_r_ix, - m68k_op_bchg_8_r_aw, m68k_op_bchg_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, m68k_op_bclr_32_r_d, - m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, m68k_op_movep_16_re, - m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, m68k_op_bclr_8_r_ai, - m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi, m68k_op_bclr_8_r_pi7, - m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd, m68k_op_bclr_8_r_pd7, - m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, m68k_op_bclr_8_r_di, - m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, m68k_op_bclr_8_r_ix, - m68k_op_bclr_8_r_aw, m68k_op_bclr_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, m68k_op_bset_32_r_d, - m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, m68k_op_movep_32_re, - m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, m68k_op_bset_8_r_ai, - m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi, m68k_op_bset_8_r_pi7, - m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd, m68k_op_bset_8_r_pd7, - m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, m68k_op_bset_8_r_di, - m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, m68k_op_bset_8_r_ix, - m68k_op_bset_8_r_aw, m68k_op_bset_8_r_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, - m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi7, - m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd7, - m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, - m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, - m68k_op_move_8_pi_aw, m68k_op_move_8_pi_al, m68k_op_move_8_pi_pcdi, m68k_op_move_8_pi_pcix, m68k_op_move_8_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, - m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi7, - m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd7, - m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, - m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, - m68k_op_move_8_pd_aw, m68k_op_move_8_pd_al, m68k_op_move_8_pd_pcdi, m68k_op_move_8_pd_pcix, m68k_op_move_8_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_aw_d, m68k_op_move_8_aw_d, m68k_op_move_8_aw_d, m68k_op_move_8_aw_d, m68k_op_move_8_aw_d, m68k_op_move_8_aw_d, m68k_op_move_8_aw_d, m68k_op_move_8_aw_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_aw_ai, m68k_op_move_8_aw_ai, m68k_op_move_8_aw_ai, m68k_op_move_8_aw_ai, m68k_op_move_8_aw_ai, m68k_op_move_8_aw_ai, m68k_op_move_8_aw_ai, m68k_op_move_8_aw_ai, - m68k_op_move_8_aw_pi, m68k_op_move_8_aw_pi, m68k_op_move_8_aw_pi, m68k_op_move_8_aw_pi, m68k_op_move_8_aw_pi, m68k_op_move_8_aw_pi, m68k_op_move_8_aw_pi, m68k_op_move_8_aw_pi7, - m68k_op_move_8_aw_pd, m68k_op_move_8_aw_pd, m68k_op_move_8_aw_pd, m68k_op_move_8_aw_pd, m68k_op_move_8_aw_pd, m68k_op_move_8_aw_pd, m68k_op_move_8_aw_pd, m68k_op_move_8_aw_pd7, - m68k_op_move_8_aw_di, m68k_op_move_8_aw_di, m68k_op_move_8_aw_di, m68k_op_move_8_aw_di, m68k_op_move_8_aw_di, m68k_op_move_8_aw_di, m68k_op_move_8_aw_di, m68k_op_move_8_aw_di, - m68k_op_move_8_aw_ix, m68k_op_move_8_aw_ix, m68k_op_move_8_aw_ix, m68k_op_move_8_aw_ix, m68k_op_move_8_aw_ix, m68k_op_move_8_aw_ix, m68k_op_move_8_aw_ix, m68k_op_move_8_aw_ix, - m68k_op_move_8_aw_aw, m68k_op_move_8_aw_al, m68k_op_move_8_aw_pcdi, m68k_op_move_8_aw_pcix, m68k_op_move_8_aw_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, - m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi7, - m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd7, - m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, - m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, - m68k_op_move_8_pi_aw, m68k_op_move_8_pi_al, m68k_op_move_8_pi_pcdi, m68k_op_move_8_pi_pcix, m68k_op_move_8_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, - m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi7, - m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd7, - m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, - m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, - m68k_op_move_8_pd_aw, m68k_op_move_8_pd_al, m68k_op_move_8_pd_pcdi, m68k_op_move_8_pd_pcix, m68k_op_move_8_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_al_d, m68k_op_move_8_al_d, m68k_op_move_8_al_d, m68k_op_move_8_al_d, m68k_op_move_8_al_d, m68k_op_move_8_al_d, m68k_op_move_8_al_d, m68k_op_move_8_al_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_al_ai, m68k_op_move_8_al_ai, m68k_op_move_8_al_ai, m68k_op_move_8_al_ai, m68k_op_move_8_al_ai, m68k_op_move_8_al_ai, m68k_op_move_8_al_ai, m68k_op_move_8_al_ai, - m68k_op_move_8_al_pi, m68k_op_move_8_al_pi, m68k_op_move_8_al_pi, m68k_op_move_8_al_pi, m68k_op_move_8_al_pi, m68k_op_move_8_al_pi, m68k_op_move_8_al_pi, m68k_op_move_8_al_pi7, - m68k_op_move_8_al_pd, m68k_op_move_8_al_pd, m68k_op_move_8_al_pd, m68k_op_move_8_al_pd, m68k_op_move_8_al_pd, m68k_op_move_8_al_pd, m68k_op_move_8_al_pd, m68k_op_move_8_al_pd7, - m68k_op_move_8_al_di, m68k_op_move_8_al_di, m68k_op_move_8_al_di, m68k_op_move_8_al_di, m68k_op_move_8_al_di, m68k_op_move_8_al_di, m68k_op_move_8_al_di, m68k_op_move_8_al_di, - m68k_op_move_8_al_ix, m68k_op_move_8_al_ix, m68k_op_move_8_al_ix, m68k_op_move_8_al_ix, m68k_op_move_8_al_ix, m68k_op_move_8_al_ix, m68k_op_move_8_al_ix, m68k_op_move_8_al_ix, - m68k_op_move_8_al_aw, m68k_op_move_8_al_al, m68k_op_move_8_al_pcdi, m68k_op_move_8_al_pcix, m68k_op_move_8_al_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, - m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi7, - m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd7, - m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, - m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, - m68k_op_move_8_pi_aw, m68k_op_move_8_pi_al, m68k_op_move_8_pi_pcdi, m68k_op_move_8_pi_pcix, m68k_op_move_8_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, - m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi7, - m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd7, - m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, - m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, - m68k_op_move_8_pd_aw, m68k_op_move_8_pd_al, m68k_op_move_8_pd_pcdi, m68k_op_move_8_pd_pcix, m68k_op_move_8_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, - m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi7, - m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd7, - m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, - m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, - m68k_op_move_8_pi_aw, m68k_op_move_8_pi_al, m68k_op_move_8_pi_pcdi, m68k_op_move_8_pi_pcix, m68k_op_move_8_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, - m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi7, - m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd7, - m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, - m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, - m68k_op_move_8_pd_aw, m68k_op_move_8_pd_al, m68k_op_move_8_pd_pcdi, m68k_op_move_8_pd_pcix, m68k_op_move_8_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, - m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi7, - m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd7, - m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, - m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, - m68k_op_move_8_pi_aw, m68k_op_move_8_pi_al, m68k_op_move_8_pi_pcdi, m68k_op_move_8_pi_pcix, m68k_op_move_8_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, - m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi7, - m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd7, - m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, - m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, - m68k_op_move_8_pd_aw, m68k_op_move_8_pd_al, m68k_op_move_8_pd_pcdi, m68k_op_move_8_pd_pcix, m68k_op_move_8_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, - m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi7, - m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd7, - m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, - m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, - m68k_op_move_8_pi_aw, m68k_op_move_8_pi_al, m68k_op_move_8_pi_pcdi, m68k_op_move_8_pi_pcix, m68k_op_move_8_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, - m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi7, - m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd7, - m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, - m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, - m68k_op_move_8_pd_aw, m68k_op_move_8_pd_al, m68k_op_move_8_pd_pcdi, m68k_op_move_8_pd_pcix, m68k_op_move_8_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, m68k_op_move_8_pi_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, m68k_op_move_8_pi_ai, - m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi, m68k_op_move_8_pi_pi7, - m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd, m68k_op_move_8_pi_pd7, - m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, m68k_op_move_8_pi_di, - m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, m68k_op_move_8_pi_ix, - m68k_op_move_8_pi_aw, m68k_op_move_8_pi_al, m68k_op_move_8_pi_pcdi, m68k_op_move_8_pi_pcix, m68k_op_move_8_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, m68k_op_move_8_pd_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, m68k_op_move_8_pd_ai, - m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi, m68k_op_move_8_pd_pi7, - m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd, m68k_op_move_8_pd_pd7, - m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, m68k_op_move_8_pd_di, - m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, m68k_op_move_8_pd_ix, - m68k_op_move_8_pd_aw, m68k_op_move_8_pd_al, m68k_op_move_8_pd_pcdi, m68k_op_move_8_pd_pcix, m68k_op_move_8_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, m68k_op_move_8_d_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, m68k_op_move_8_d_ai, - m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi, m68k_op_move_8_d_pi7, - m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd, m68k_op_move_8_d_pd7, - m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, m68k_op_move_8_d_di, - m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, m68k_op_move_8_d_ix, - m68k_op_move_8_d_aw, m68k_op_move_8_d_al, m68k_op_move_8_d_pcdi, m68k_op_move_8_d_pcix, m68k_op_move_8_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, m68k_op_move_8_ai_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, m68k_op_move_8_ai_ai, - m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi, m68k_op_move_8_ai_pi7, - m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd, m68k_op_move_8_ai_pd7, - m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, m68k_op_move_8_ai_di, - m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, m68k_op_move_8_ai_ix, - m68k_op_move_8_ai_aw, m68k_op_move_8_ai_al, m68k_op_move_8_ai_pcdi, m68k_op_move_8_ai_pcix, m68k_op_move_8_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi7_d, m68k_op_move_8_pi7_d, m68k_op_move_8_pi7_d, m68k_op_move_8_pi7_d, m68k_op_move_8_pi7_d, m68k_op_move_8_pi7_d, m68k_op_move_8_pi7_d, m68k_op_move_8_pi7_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pi7_ai, m68k_op_move_8_pi7_ai, m68k_op_move_8_pi7_ai, m68k_op_move_8_pi7_ai, m68k_op_move_8_pi7_ai, m68k_op_move_8_pi7_ai, m68k_op_move_8_pi7_ai, m68k_op_move_8_pi7_ai, - m68k_op_move_8_pi7_pi, m68k_op_move_8_pi7_pi, m68k_op_move_8_pi7_pi, m68k_op_move_8_pi7_pi, m68k_op_move_8_pi7_pi, m68k_op_move_8_pi7_pi, m68k_op_move_8_pi7_pi, m68k_op_move_8_pi7_pi7, - m68k_op_move_8_pi7_pd, m68k_op_move_8_pi7_pd, m68k_op_move_8_pi7_pd, m68k_op_move_8_pi7_pd, m68k_op_move_8_pi7_pd, m68k_op_move_8_pi7_pd, m68k_op_move_8_pi7_pd, m68k_op_move_8_pi7_pd7, - m68k_op_move_8_pi7_di, m68k_op_move_8_pi7_di, m68k_op_move_8_pi7_di, m68k_op_move_8_pi7_di, m68k_op_move_8_pi7_di, m68k_op_move_8_pi7_di, m68k_op_move_8_pi7_di, m68k_op_move_8_pi7_di, - m68k_op_move_8_pi7_ix, m68k_op_move_8_pi7_ix, m68k_op_move_8_pi7_ix, m68k_op_move_8_pi7_ix, m68k_op_move_8_pi7_ix, m68k_op_move_8_pi7_ix, m68k_op_move_8_pi7_ix, m68k_op_move_8_pi7_ix, - m68k_op_move_8_pi7_aw, m68k_op_move_8_pi7_al, m68k_op_move_8_pi7_pcdi, m68k_op_move_8_pi7_pcix, m68k_op_move_8_pi7_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd7_d, m68k_op_move_8_pd7_d, m68k_op_move_8_pd7_d, m68k_op_move_8_pd7_d, m68k_op_move_8_pd7_d, m68k_op_move_8_pd7_d, m68k_op_move_8_pd7_d, m68k_op_move_8_pd7_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_pd7_ai, m68k_op_move_8_pd7_ai, m68k_op_move_8_pd7_ai, m68k_op_move_8_pd7_ai, m68k_op_move_8_pd7_ai, m68k_op_move_8_pd7_ai, m68k_op_move_8_pd7_ai, m68k_op_move_8_pd7_ai, - m68k_op_move_8_pd7_pi, m68k_op_move_8_pd7_pi, m68k_op_move_8_pd7_pi, m68k_op_move_8_pd7_pi, m68k_op_move_8_pd7_pi, m68k_op_move_8_pd7_pi, m68k_op_move_8_pd7_pi, m68k_op_move_8_pd7_pi7, - m68k_op_move_8_pd7_pd, m68k_op_move_8_pd7_pd, m68k_op_move_8_pd7_pd, m68k_op_move_8_pd7_pd, m68k_op_move_8_pd7_pd, m68k_op_move_8_pd7_pd, m68k_op_move_8_pd7_pd, m68k_op_move_8_pd7_pd7, - m68k_op_move_8_pd7_di, m68k_op_move_8_pd7_di, m68k_op_move_8_pd7_di, m68k_op_move_8_pd7_di, m68k_op_move_8_pd7_di, m68k_op_move_8_pd7_di, m68k_op_move_8_pd7_di, m68k_op_move_8_pd7_di, - m68k_op_move_8_pd7_ix, m68k_op_move_8_pd7_ix, m68k_op_move_8_pd7_ix, m68k_op_move_8_pd7_ix, m68k_op_move_8_pd7_ix, m68k_op_move_8_pd7_ix, m68k_op_move_8_pd7_ix, m68k_op_move_8_pd7_ix, - m68k_op_move_8_pd7_aw, m68k_op_move_8_pd7_al, m68k_op_move_8_pd7_pcdi, m68k_op_move_8_pd7_pcix, m68k_op_move_8_pd7_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, m68k_op_move_8_di_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, m68k_op_move_8_di_ai, - m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi, m68k_op_move_8_di_pi7, - m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd, m68k_op_move_8_di_pd7, - m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, m68k_op_move_8_di_di, - m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, m68k_op_move_8_di_ix, - m68k_op_move_8_di_aw, m68k_op_move_8_di_al, m68k_op_move_8_di_pcdi, m68k_op_move_8_di_pcix, m68k_op_move_8_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, m68k_op_move_8_ix_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, m68k_op_move_8_ix_ai, - m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi, m68k_op_move_8_ix_pi7, - m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd, m68k_op_move_8_ix_pd7, - m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, m68k_op_move_8_ix_di, - m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, m68k_op_move_8_ix_ix, - m68k_op_move_8_ix_aw, m68k_op_move_8_ix_al, m68k_op_move_8_ix_pcdi, m68k_op_move_8_ix_pcix, m68k_op_move_8_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_aw_d, m68k_op_move_32_aw_d, m68k_op_move_32_aw_d, m68k_op_move_32_aw_d, m68k_op_move_32_aw_d, m68k_op_move_32_aw_d, m68k_op_move_32_aw_d, m68k_op_move_32_aw_d, - m68k_op_move_32_aw_a, m68k_op_move_32_aw_a, m68k_op_move_32_aw_a, m68k_op_move_32_aw_a, m68k_op_move_32_aw_a, m68k_op_move_32_aw_a, m68k_op_move_32_aw_a, m68k_op_move_32_aw_a, - m68k_op_move_32_aw_ai, m68k_op_move_32_aw_ai, m68k_op_move_32_aw_ai, m68k_op_move_32_aw_ai, m68k_op_move_32_aw_ai, m68k_op_move_32_aw_ai, m68k_op_move_32_aw_ai, m68k_op_move_32_aw_ai, - m68k_op_move_32_aw_pi, m68k_op_move_32_aw_pi, m68k_op_move_32_aw_pi, m68k_op_move_32_aw_pi, m68k_op_move_32_aw_pi, m68k_op_move_32_aw_pi, m68k_op_move_32_aw_pi, m68k_op_move_32_aw_pi, - m68k_op_move_32_aw_pd, m68k_op_move_32_aw_pd, m68k_op_move_32_aw_pd, m68k_op_move_32_aw_pd, m68k_op_move_32_aw_pd, m68k_op_move_32_aw_pd, m68k_op_move_32_aw_pd, m68k_op_move_32_aw_pd, - m68k_op_move_32_aw_di, m68k_op_move_32_aw_di, m68k_op_move_32_aw_di, m68k_op_move_32_aw_di, m68k_op_move_32_aw_di, m68k_op_move_32_aw_di, m68k_op_move_32_aw_di, m68k_op_move_32_aw_di, - m68k_op_move_32_aw_ix, m68k_op_move_32_aw_ix, m68k_op_move_32_aw_ix, m68k_op_move_32_aw_ix, m68k_op_move_32_aw_ix, m68k_op_move_32_aw_ix, m68k_op_move_32_aw_ix, m68k_op_move_32_aw_ix, - m68k_op_move_32_aw_aw, m68k_op_move_32_aw_al, m68k_op_move_32_aw_pcdi, m68k_op_move_32_aw_pcix, m68k_op_move_32_aw_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_al_d, m68k_op_move_32_al_d, m68k_op_move_32_al_d, m68k_op_move_32_al_d, m68k_op_move_32_al_d, m68k_op_move_32_al_d, m68k_op_move_32_al_d, m68k_op_move_32_al_d, - m68k_op_move_32_al_a, m68k_op_move_32_al_a, m68k_op_move_32_al_a, m68k_op_move_32_al_a, m68k_op_move_32_al_a, m68k_op_move_32_al_a, m68k_op_move_32_al_a, m68k_op_move_32_al_a, - m68k_op_move_32_al_ai, m68k_op_move_32_al_ai, m68k_op_move_32_al_ai, m68k_op_move_32_al_ai, m68k_op_move_32_al_ai, m68k_op_move_32_al_ai, m68k_op_move_32_al_ai, m68k_op_move_32_al_ai, - m68k_op_move_32_al_pi, m68k_op_move_32_al_pi, m68k_op_move_32_al_pi, m68k_op_move_32_al_pi, m68k_op_move_32_al_pi, m68k_op_move_32_al_pi, m68k_op_move_32_al_pi, m68k_op_move_32_al_pi, - m68k_op_move_32_al_pd, m68k_op_move_32_al_pd, m68k_op_move_32_al_pd, m68k_op_move_32_al_pd, m68k_op_move_32_al_pd, m68k_op_move_32_al_pd, m68k_op_move_32_al_pd, m68k_op_move_32_al_pd, - m68k_op_move_32_al_di, m68k_op_move_32_al_di, m68k_op_move_32_al_di, m68k_op_move_32_al_di, m68k_op_move_32_al_di, m68k_op_move_32_al_di, m68k_op_move_32_al_di, m68k_op_move_32_al_di, - m68k_op_move_32_al_ix, m68k_op_move_32_al_ix, m68k_op_move_32_al_ix, m68k_op_move_32_al_ix, m68k_op_move_32_al_ix, m68k_op_move_32_al_ix, m68k_op_move_32_al_ix, m68k_op_move_32_al_ix, - m68k_op_move_32_al_aw, m68k_op_move_32_al_al, m68k_op_move_32_al_pcdi, m68k_op_move_32_al_pcix, m68k_op_move_32_al_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, m68k_op_move_32_d_d, - m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, m68k_op_move_32_d_a, - m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, m68k_op_move_32_d_ai, - m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, m68k_op_move_32_d_pi, - m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, m68k_op_move_32_d_pd, - m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, m68k_op_move_32_d_di, - m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, m68k_op_move_32_d_ix, - m68k_op_move_32_d_aw, m68k_op_move_32_d_al, m68k_op_move_32_d_pcdi, m68k_op_move_32_d_pcix, m68k_op_move_32_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, m68k_op_movea_32_d, - m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, m68k_op_movea_32_a, - m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, m68k_op_movea_32_ai, - m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, m68k_op_movea_32_pi, - m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, m68k_op_movea_32_pd, - m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, m68k_op_movea_32_di, - m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, m68k_op_movea_32_ix, - m68k_op_movea_32_aw, m68k_op_movea_32_al, m68k_op_movea_32_pcdi, m68k_op_movea_32_pcix, m68k_op_movea_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, m68k_op_move_32_ai_d, - m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, m68k_op_move_32_ai_a, - m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, m68k_op_move_32_ai_ai, - m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, m68k_op_move_32_ai_pi, - m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, m68k_op_move_32_ai_pd, - m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, m68k_op_move_32_ai_di, - m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, m68k_op_move_32_ai_ix, - m68k_op_move_32_ai_aw, m68k_op_move_32_ai_al, m68k_op_move_32_ai_pcdi, m68k_op_move_32_ai_pcix, m68k_op_move_32_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, m68k_op_move_32_pi_d, - m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, m68k_op_move_32_pi_a, - m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, m68k_op_move_32_pi_ai, - m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, m68k_op_move_32_pi_pi, - m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, m68k_op_move_32_pi_pd, - m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, m68k_op_move_32_pi_di, - m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, m68k_op_move_32_pi_ix, - m68k_op_move_32_pi_aw, m68k_op_move_32_pi_al, m68k_op_move_32_pi_pcdi, m68k_op_move_32_pi_pcix, m68k_op_move_32_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, m68k_op_move_32_pd_d, - m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, m68k_op_move_32_pd_a, - m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, m68k_op_move_32_pd_ai, - m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, m68k_op_move_32_pd_pi, - m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, m68k_op_move_32_pd_pd, - m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, m68k_op_move_32_pd_di, - m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, m68k_op_move_32_pd_ix, - m68k_op_move_32_pd_aw, m68k_op_move_32_pd_al, m68k_op_move_32_pd_pcdi, m68k_op_move_32_pd_pcix, m68k_op_move_32_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, m68k_op_move_32_di_d, - m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, m68k_op_move_32_di_a, - m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, m68k_op_move_32_di_ai, - m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, m68k_op_move_32_di_pi, - m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, m68k_op_move_32_di_pd, - m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, m68k_op_move_32_di_di, - m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, m68k_op_move_32_di_ix, - m68k_op_move_32_di_aw, m68k_op_move_32_di_al, m68k_op_move_32_di_pcdi, m68k_op_move_32_di_pcix, m68k_op_move_32_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, m68k_op_move_32_ix_d, - m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, m68k_op_move_32_ix_a, - m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, m68k_op_move_32_ix_ai, - m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, m68k_op_move_32_ix_pi, - m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, m68k_op_move_32_ix_pd, - m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, m68k_op_move_32_ix_di, - m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, m68k_op_move_32_ix_ix, - m68k_op_move_32_ix_aw, m68k_op_move_32_ix_al, m68k_op_move_32_ix_pcdi, m68k_op_move_32_ix_pcix, m68k_op_move_32_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_aw_d, m68k_op_move_16_aw_d, m68k_op_move_16_aw_d, m68k_op_move_16_aw_d, m68k_op_move_16_aw_d, m68k_op_move_16_aw_d, m68k_op_move_16_aw_d, m68k_op_move_16_aw_d, - m68k_op_move_16_aw_a, m68k_op_move_16_aw_a, m68k_op_move_16_aw_a, m68k_op_move_16_aw_a, m68k_op_move_16_aw_a, m68k_op_move_16_aw_a, m68k_op_move_16_aw_a, m68k_op_move_16_aw_a, - m68k_op_move_16_aw_ai, m68k_op_move_16_aw_ai, m68k_op_move_16_aw_ai, m68k_op_move_16_aw_ai, m68k_op_move_16_aw_ai, m68k_op_move_16_aw_ai, m68k_op_move_16_aw_ai, m68k_op_move_16_aw_ai, - m68k_op_move_16_aw_pi, m68k_op_move_16_aw_pi, m68k_op_move_16_aw_pi, m68k_op_move_16_aw_pi, m68k_op_move_16_aw_pi, m68k_op_move_16_aw_pi, m68k_op_move_16_aw_pi, m68k_op_move_16_aw_pi, - m68k_op_move_16_aw_pd, m68k_op_move_16_aw_pd, m68k_op_move_16_aw_pd, m68k_op_move_16_aw_pd, m68k_op_move_16_aw_pd, m68k_op_move_16_aw_pd, m68k_op_move_16_aw_pd, m68k_op_move_16_aw_pd, - m68k_op_move_16_aw_di, m68k_op_move_16_aw_di, m68k_op_move_16_aw_di, m68k_op_move_16_aw_di, m68k_op_move_16_aw_di, m68k_op_move_16_aw_di, m68k_op_move_16_aw_di, m68k_op_move_16_aw_di, - m68k_op_move_16_aw_ix, m68k_op_move_16_aw_ix, m68k_op_move_16_aw_ix, m68k_op_move_16_aw_ix, m68k_op_move_16_aw_ix, m68k_op_move_16_aw_ix, m68k_op_move_16_aw_ix, m68k_op_move_16_aw_ix, - m68k_op_move_16_aw_aw, m68k_op_move_16_aw_al, m68k_op_move_16_aw_pcdi, m68k_op_move_16_aw_pcix, m68k_op_move_16_aw_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_al_d, m68k_op_move_16_al_d, m68k_op_move_16_al_d, m68k_op_move_16_al_d, m68k_op_move_16_al_d, m68k_op_move_16_al_d, m68k_op_move_16_al_d, m68k_op_move_16_al_d, - m68k_op_move_16_al_a, m68k_op_move_16_al_a, m68k_op_move_16_al_a, m68k_op_move_16_al_a, m68k_op_move_16_al_a, m68k_op_move_16_al_a, m68k_op_move_16_al_a, m68k_op_move_16_al_a, - m68k_op_move_16_al_ai, m68k_op_move_16_al_ai, m68k_op_move_16_al_ai, m68k_op_move_16_al_ai, m68k_op_move_16_al_ai, m68k_op_move_16_al_ai, m68k_op_move_16_al_ai, m68k_op_move_16_al_ai, - m68k_op_move_16_al_pi, m68k_op_move_16_al_pi, m68k_op_move_16_al_pi, m68k_op_move_16_al_pi, m68k_op_move_16_al_pi, m68k_op_move_16_al_pi, m68k_op_move_16_al_pi, m68k_op_move_16_al_pi, - m68k_op_move_16_al_pd, m68k_op_move_16_al_pd, m68k_op_move_16_al_pd, m68k_op_move_16_al_pd, m68k_op_move_16_al_pd, m68k_op_move_16_al_pd, m68k_op_move_16_al_pd, m68k_op_move_16_al_pd, - m68k_op_move_16_al_di, m68k_op_move_16_al_di, m68k_op_move_16_al_di, m68k_op_move_16_al_di, m68k_op_move_16_al_di, m68k_op_move_16_al_di, m68k_op_move_16_al_di, m68k_op_move_16_al_di, - m68k_op_move_16_al_ix, m68k_op_move_16_al_ix, m68k_op_move_16_al_ix, m68k_op_move_16_al_ix, m68k_op_move_16_al_ix, m68k_op_move_16_al_ix, m68k_op_move_16_al_ix, m68k_op_move_16_al_ix, - m68k_op_move_16_al_aw, m68k_op_move_16_al_al, m68k_op_move_16_al_pcdi, m68k_op_move_16_al_pcix, m68k_op_move_16_al_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, m68k_op_move_16_d_d, - m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, m68k_op_move_16_d_a, - m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, m68k_op_move_16_d_ai, - m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, m68k_op_move_16_d_pi, - m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, m68k_op_move_16_d_pd, - m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, m68k_op_move_16_d_di, - m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, m68k_op_move_16_d_ix, - m68k_op_move_16_d_aw, m68k_op_move_16_d_al, m68k_op_move_16_d_pcdi, m68k_op_move_16_d_pcix, m68k_op_move_16_d_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, m68k_op_movea_16_d, - m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, m68k_op_movea_16_a, - m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, m68k_op_movea_16_ai, - m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, m68k_op_movea_16_pi, - m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, m68k_op_movea_16_pd, - m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, m68k_op_movea_16_di, - m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, m68k_op_movea_16_ix, - m68k_op_movea_16_aw, m68k_op_movea_16_al, m68k_op_movea_16_pcdi, m68k_op_movea_16_pcix, m68k_op_movea_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, m68k_op_move_16_ai_d, - m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, m68k_op_move_16_ai_a, - m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, m68k_op_move_16_ai_ai, - m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, m68k_op_move_16_ai_pi, - m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, m68k_op_move_16_ai_pd, - m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, m68k_op_move_16_ai_di, - m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, m68k_op_move_16_ai_ix, - m68k_op_move_16_ai_aw, m68k_op_move_16_ai_al, m68k_op_move_16_ai_pcdi, m68k_op_move_16_ai_pcix, m68k_op_move_16_ai_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, m68k_op_move_16_pi_d, - m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, m68k_op_move_16_pi_a, - m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, m68k_op_move_16_pi_ai, - m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, m68k_op_move_16_pi_pi, - m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, m68k_op_move_16_pi_pd, - m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, m68k_op_move_16_pi_di, - m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, m68k_op_move_16_pi_ix, - m68k_op_move_16_pi_aw, m68k_op_move_16_pi_al, m68k_op_move_16_pi_pcdi, m68k_op_move_16_pi_pcix, m68k_op_move_16_pi_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, m68k_op_move_16_pd_d, - m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, m68k_op_move_16_pd_a, - m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, m68k_op_move_16_pd_ai, - m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, m68k_op_move_16_pd_pi, - m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, m68k_op_move_16_pd_pd, - m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, m68k_op_move_16_pd_di, - m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, m68k_op_move_16_pd_ix, - m68k_op_move_16_pd_aw, m68k_op_move_16_pd_al, m68k_op_move_16_pd_pcdi, m68k_op_move_16_pd_pcix, m68k_op_move_16_pd_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, m68k_op_move_16_di_d, - m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, m68k_op_move_16_di_a, - m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, m68k_op_move_16_di_ai, - m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, m68k_op_move_16_di_pi, - m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, m68k_op_move_16_di_pd, - m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, m68k_op_move_16_di_di, - m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, m68k_op_move_16_di_ix, - m68k_op_move_16_di_aw, m68k_op_move_16_di_al, m68k_op_move_16_di_pcdi, m68k_op_move_16_di_pcix, m68k_op_move_16_di_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, m68k_op_move_16_ix_d, - m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, m68k_op_move_16_ix_a, - m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, m68k_op_move_16_ix_ai, - m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, m68k_op_move_16_ix_pi, - m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, m68k_op_move_16_ix_pd, - m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, m68k_op_move_16_ix_di, - m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, m68k_op_move_16_ix_ix, - m68k_op_move_16_ix_aw, m68k_op_move_16_ix_al, m68k_op_move_16_ix_pcdi, m68k_op_move_16_ix_pcix, m68k_op_move_16_ix_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_negx_8_d, m68k_op_negx_8_d, m68k_op_negx_8_d, m68k_op_negx_8_d, m68k_op_negx_8_d, m68k_op_negx_8_d, m68k_op_negx_8_d, m68k_op_negx_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_negx_8_ai, m68k_op_negx_8_ai, m68k_op_negx_8_ai, m68k_op_negx_8_ai, m68k_op_negx_8_ai, m68k_op_negx_8_ai, m68k_op_negx_8_ai, m68k_op_negx_8_ai, - m68k_op_negx_8_pi, m68k_op_negx_8_pi, m68k_op_negx_8_pi, m68k_op_negx_8_pi, m68k_op_negx_8_pi, m68k_op_negx_8_pi, m68k_op_negx_8_pi, m68k_op_negx_8_pi7, - m68k_op_negx_8_pd, m68k_op_negx_8_pd, m68k_op_negx_8_pd, m68k_op_negx_8_pd, m68k_op_negx_8_pd, m68k_op_negx_8_pd, m68k_op_negx_8_pd, m68k_op_negx_8_pd7, - m68k_op_negx_8_di, m68k_op_negx_8_di, m68k_op_negx_8_di, m68k_op_negx_8_di, m68k_op_negx_8_di, m68k_op_negx_8_di, m68k_op_negx_8_di, m68k_op_negx_8_di, - m68k_op_negx_8_ix, m68k_op_negx_8_ix, m68k_op_negx_8_ix, m68k_op_negx_8_ix, m68k_op_negx_8_ix, m68k_op_negx_8_ix, m68k_op_negx_8_ix, m68k_op_negx_8_ix, - m68k_op_negx_8_aw, m68k_op_negx_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_negx_16_d, m68k_op_negx_16_d, m68k_op_negx_16_d, m68k_op_negx_16_d, m68k_op_negx_16_d, m68k_op_negx_16_d, m68k_op_negx_16_d, m68k_op_negx_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_negx_16_ai, m68k_op_negx_16_ai, m68k_op_negx_16_ai, m68k_op_negx_16_ai, m68k_op_negx_16_ai, m68k_op_negx_16_ai, m68k_op_negx_16_ai, m68k_op_negx_16_ai, - m68k_op_negx_16_pi, m68k_op_negx_16_pi, m68k_op_negx_16_pi, m68k_op_negx_16_pi, m68k_op_negx_16_pi, m68k_op_negx_16_pi, m68k_op_negx_16_pi, m68k_op_negx_16_pi, - m68k_op_negx_16_pd, m68k_op_negx_16_pd, m68k_op_negx_16_pd, m68k_op_negx_16_pd, m68k_op_negx_16_pd, m68k_op_negx_16_pd, m68k_op_negx_16_pd, m68k_op_negx_16_pd, - m68k_op_negx_16_di, m68k_op_negx_16_di, m68k_op_negx_16_di, m68k_op_negx_16_di, m68k_op_negx_16_di, m68k_op_negx_16_di, m68k_op_negx_16_di, m68k_op_negx_16_di, - m68k_op_negx_16_ix, m68k_op_negx_16_ix, m68k_op_negx_16_ix, m68k_op_negx_16_ix, m68k_op_negx_16_ix, m68k_op_negx_16_ix, m68k_op_negx_16_ix, m68k_op_negx_16_ix, - m68k_op_negx_16_aw, m68k_op_negx_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_negx_32_d, m68k_op_negx_32_d, m68k_op_negx_32_d, m68k_op_negx_32_d, m68k_op_negx_32_d, m68k_op_negx_32_d, m68k_op_negx_32_d, m68k_op_negx_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_negx_32_ai, m68k_op_negx_32_ai, m68k_op_negx_32_ai, m68k_op_negx_32_ai, m68k_op_negx_32_ai, m68k_op_negx_32_ai, m68k_op_negx_32_ai, m68k_op_negx_32_ai, - m68k_op_negx_32_pi, m68k_op_negx_32_pi, m68k_op_negx_32_pi, m68k_op_negx_32_pi, m68k_op_negx_32_pi, m68k_op_negx_32_pi, m68k_op_negx_32_pi, m68k_op_negx_32_pi, - m68k_op_negx_32_pd, m68k_op_negx_32_pd, m68k_op_negx_32_pd, m68k_op_negx_32_pd, m68k_op_negx_32_pd, m68k_op_negx_32_pd, m68k_op_negx_32_pd, m68k_op_negx_32_pd, - m68k_op_negx_32_di, m68k_op_negx_32_di, m68k_op_negx_32_di, m68k_op_negx_32_di, m68k_op_negx_32_di, m68k_op_negx_32_di, m68k_op_negx_32_di, m68k_op_negx_32_di, - m68k_op_negx_32_ix, m68k_op_negx_32_ix, m68k_op_negx_32_ix, m68k_op_negx_32_ix, m68k_op_negx_32_ix, m68k_op_negx_32_ix, m68k_op_negx_32_ix, m68k_op_negx_32_ix, - m68k_op_negx_32_aw, m68k_op_negx_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_frs_d, m68k_op_move_16_frs_d, m68k_op_move_16_frs_d, m68k_op_move_16_frs_d, m68k_op_move_16_frs_d, m68k_op_move_16_frs_d, m68k_op_move_16_frs_d, m68k_op_move_16_frs_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_frs_ai, m68k_op_move_16_frs_ai, m68k_op_move_16_frs_ai, m68k_op_move_16_frs_ai, m68k_op_move_16_frs_ai, m68k_op_move_16_frs_ai, m68k_op_move_16_frs_ai, m68k_op_move_16_frs_ai, - m68k_op_move_16_frs_pi, m68k_op_move_16_frs_pi, m68k_op_move_16_frs_pi, m68k_op_move_16_frs_pi, m68k_op_move_16_frs_pi, m68k_op_move_16_frs_pi, m68k_op_move_16_frs_pi, m68k_op_move_16_frs_pi, - m68k_op_move_16_frs_pd, m68k_op_move_16_frs_pd, m68k_op_move_16_frs_pd, m68k_op_move_16_frs_pd, m68k_op_move_16_frs_pd, m68k_op_move_16_frs_pd, m68k_op_move_16_frs_pd, m68k_op_move_16_frs_pd, - m68k_op_move_16_frs_di, m68k_op_move_16_frs_di, m68k_op_move_16_frs_di, m68k_op_move_16_frs_di, m68k_op_move_16_frs_di, m68k_op_move_16_frs_di, m68k_op_move_16_frs_di, m68k_op_move_16_frs_di, - m68k_op_move_16_frs_ix, m68k_op_move_16_frs_ix, m68k_op_move_16_frs_ix, m68k_op_move_16_frs_ix, m68k_op_move_16_frs_ix, m68k_op_move_16_frs_ix, m68k_op_move_16_frs_ix, m68k_op_move_16_frs_ix, - m68k_op_move_16_frs_aw, m68k_op_move_16_frs_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_clr_8_d, m68k_op_clr_8_d, m68k_op_clr_8_d, m68k_op_clr_8_d, m68k_op_clr_8_d, m68k_op_clr_8_d, m68k_op_clr_8_d, m68k_op_clr_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_clr_8_ai, m68k_op_clr_8_ai, m68k_op_clr_8_ai, m68k_op_clr_8_ai, m68k_op_clr_8_ai, m68k_op_clr_8_ai, m68k_op_clr_8_ai, m68k_op_clr_8_ai, - m68k_op_clr_8_pi, m68k_op_clr_8_pi, m68k_op_clr_8_pi, m68k_op_clr_8_pi, m68k_op_clr_8_pi, m68k_op_clr_8_pi, m68k_op_clr_8_pi, m68k_op_clr_8_pi7, - m68k_op_clr_8_pd, m68k_op_clr_8_pd, m68k_op_clr_8_pd, m68k_op_clr_8_pd, m68k_op_clr_8_pd, m68k_op_clr_8_pd, m68k_op_clr_8_pd, m68k_op_clr_8_pd7, - m68k_op_clr_8_di, m68k_op_clr_8_di, m68k_op_clr_8_di, m68k_op_clr_8_di, m68k_op_clr_8_di, m68k_op_clr_8_di, m68k_op_clr_8_di, m68k_op_clr_8_di, - m68k_op_clr_8_ix, m68k_op_clr_8_ix, m68k_op_clr_8_ix, m68k_op_clr_8_ix, m68k_op_clr_8_ix, m68k_op_clr_8_ix, m68k_op_clr_8_ix, m68k_op_clr_8_ix, - m68k_op_clr_8_aw, m68k_op_clr_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_clr_16_d, m68k_op_clr_16_d, m68k_op_clr_16_d, m68k_op_clr_16_d, m68k_op_clr_16_d, m68k_op_clr_16_d, m68k_op_clr_16_d, m68k_op_clr_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_clr_16_ai, m68k_op_clr_16_ai, m68k_op_clr_16_ai, m68k_op_clr_16_ai, m68k_op_clr_16_ai, m68k_op_clr_16_ai, m68k_op_clr_16_ai, m68k_op_clr_16_ai, - m68k_op_clr_16_pi, m68k_op_clr_16_pi, m68k_op_clr_16_pi, m68k_op_clr_16_pi, m68k_op_clr_16_pi, m68k_op_clr_16_pi, m68k_op_clr_16_pi, m68k_op_clr_16_pi, - m68k_op_clr_16_pd, m68k_op_clr_16_pd, m68k_op_clr_16_pd, m68k_op_clr_16_pd, m68k_op_clr_16_pd, m68k_op_clr_16_pd, m68k_op_clr_16_pd, m68k_op_clr_16_pd, - m68k_op_clr_16_di, m68k_op_clr_16_di, m68k_op_clr_16_di, m68k_op_clr_16_di, m68k_op_clr_16_di, m68k_op_clr_16_di, m68k_op_clr_16_di, m68k_op_clr_16_di, - m68k_op_clr_16_ix, m68k_op_clr_16_ix, m68k_op_clr_16_ix, m68k_op_clr_16_ix, m68k_op_clr_16_ix, m68k_op_clr_16_ix, m68k_op_clr_16_ix, m68k_op_clr_16_ix, - m68k_op_clr_16_aw, m68k_op_clr_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_clr_32_d, m68k_op_clr_32_d, m68k_op_clr_32_d, m68k_op_clr_32_d, m68k_op_clr_32_d, m68k_op_clr_32_d, m68k_op_clr_32_d, m68k_op_clr_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_clr_32_ai, m68k_op_clr_32_ai, m68k_op_clr_32_ai, m68k_op_clr_32_ai, m68k_op_clr_32_ai, m68k_op_clr_32_ai, m68k_op_clr_32_ai, m68k_op_clr_32_ai, - m68k_op_clr_32_pi, m68k_op_clr_32_pi, m68k_op_clr_32_pi, m68k_op_clr_32_pi, m68k_op_clr_32_pi, m68k_op_clr_32_pi, m68k_op_clr_32_pi, m68k_op_clr_32_pi, - m68k_op_clr_32_pd, m68k_op_clr_32_pd, m68k_op_clr_32_pd, m68k_op_clr_32_pd, m68k_op_clr_32_pd, m68k_op_clr_32_pd, m68k_op_clr_32_pd, m68k_op_clr_32_pd, - m68k_op_clr_32_di, m68k_op_clr_32_di, m68k_op_clr_32_di, m68k_op_clr_32_di, m68k_op_clr_32_di, m68k_op_clr_32_di, m68k_op_clr_32_di, m68k_op_clr_32_di, - m68k_op_clr_32_ix, m68k_op_clr_32_ix, m68k_op_clr_32_ix, m68k_op_clr_32_ix, m68k_op_clr_32_ix, m68k_op_clr_32_ix, m68k_op_clr_32_ix, m68k_op_clr_32_ix, - m68k_op_clr_32_aw, m68k_op_clr_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_neg_8_d, m68k_op_neg_8_d, m68k_op_neg_8_d, m68k_op_neg_8_d, m68k_op_neg_8_d, m68k_op_neg_8_d, m68k_op_neg_8_d, m68k_op_neg_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_neg_8_ai, m68k_op_neg_8_ai, m68k_op_neg_8_ai, m68k_op_neg_8_ai, m68k_op_neg_8_ai, m68k_op_neg_8_ai, m68k_op_neg_8_ai, m68k_op_neg_8_ai, - m68k_op_neg_8_pi, m68k_op_neg_8_pi, m68k_op_neg_8_pi, m68k_op_neg_8_pi, m68k_op_neg_8_pi, m68k_op_neg_8_pi, m68k_op_neg_8_pi, m68k_op_neg_8_pi7, - m68k_op_neg_8_pd, m68k_op_neg_8_pd, m68k_op_neg_8_pd, m68k_op_neg_8_pd, m68k_op_neg_8_pd, m68k_op_neg_8_pd, m68k_op_neg_8_pd, m68k_op_neg_8_pd7, - m68k_op_neg_8_di, m68k_op_neg_8_di, m68k_op_neg_8_di, m68k_op_neg_8_di, m68k_op_neg_8_di, m68k_op_neg_8_di, m68k_op_neg_8_di, m68k_op_neg_8_di, - m68k_op_neg_8_ix, m68k_op_neg_8_ix, m68k_op_neg_8_ix, m68k_op_neg_8_ix, m68k_op_neg_8_ix, m68k_op_neg_8_ix, m68k_op_neg_8_ix, m68k_op_neg_8_ix, - m68k_op_neg_8_aw, m68k_op_neg_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_neg_16_d, m68k_op_neg_16_d, m68k_op_neg_16_d, m68k_op_neg_16_d, m68k_op_neg_16_d, m68k_op_neg_16_d, m68k_op_neg_16_d, m68k_op_neg_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_neg_16_ai, m68k_op_neg_16_ai, m68k_op_neg_16_ai, m68k_op_neg_16_ai, m68k_op_neg_16_ai, m68k_op_neg_16_ai, m68k_op_neg_16_ai, m68k_op_neg_16_ai, - m68k_op_neg_16_pi, m68k_op_neg_16_pi, m68k_op_neg_16_pi, m68k_op_neg_16_pi, m68k_op_neg_16_pi, m68k_op_neg_16_pi, m68k_op_neg_16_pi, m68k_op_neg_16_pi, - m68k_op_neg_16_pd, m68k_op_neg_16_pd, m68k_op_neg_16_pd, m68k_op_neg_16_pd, m68k_op_neg_16_pd, m68k_op_neg_16_pd, m68k_op_neg_16_pd, m68k_op_neg_16_pd, - m68k_op_neg_16_di, m68k_op_neg_16_di, m68k_op_neg_16_di, m68k_op_neg_16_di, m68k_op_neg_16_di, m68k_op_neg_16_di, m68k_op_neg_16_di, m68k_op_neg_16_di, - m68k_op_neg_16_ix, m68k_op_neg_16_ix, m68k_op_neg_16_ix, m68k_op_neg_16_ix, m68k_op_neg_16_ix, m68k_op_neg_16_ix, m68k_op_neg_16_ix, m68k_op_neg_16_ix, - m68k_op_neg_16_aw, m68k_op_neg_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_neg_32_d, m68k_op_neg_32_d, m68k_op_neg_32_d, m68k_op_neg_32_d, m68k_op_neg_32_d, m68k_op_neg_32_d, m68k_op_neg_32_d, m68k_op_neg_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_neg_32_ai, m68k_op_neg_32_ai, m68k_op_neg_32_ai, m68k_op_neg_32_ai, m68k_op_neg_32_ai, m68k_op_neg_32_ai, m68k_op_neg_32_ai, m68k_op_neg_32_ai, - m68k_op_neg_32_pi, m68k_op_neg_32_pi, m68k_op_neg_32_pi, m68k_op_neg_32_pi, m68k_op_neg_32_pi, m68k_op_neg_32_pi, m68k_op_neg_32_pi, m68k_op_neg_32_pi, - m68k_op_neg_32_pd, m68k_op_neg_32_pd, m68k_op_neg_32_pd, m68k_op_neg_32_pd, m68k_op_neg_32_pd, m68k_op_neg_32_pd, m68k_op_neg_32_pd, m68k_op_neg_32_pd, - m68k_op_neg_32_di, m68k_op_neg_32_di, m68k_op_neg_32_di, m68k_op_neg_32_di, m68k_op_neg_32_di, m68k_op_neg_32_di, m68k_op_neg_32_di, m68k_op_neg_32_di, - m68k_op_neg_32_ix, m68k_op_neg_32_ix, m68k_op_neg_32_ix, m68k_op_neg_32_ix, m68k_op_neg_32_ix, m68k_op_neg_32_ix, m68k_op_neg_32_ix, m68k_op_neg_32_ix, - m68k_op_neg_32_aw, m68k_op_neg_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_toc_d, m68k_op_move_16_toc_d, m68k_op_move_16_toc_d, m68k_op_move_16_toc_d, m68k_op_move_16_toc_d, m68k_op_move_16_toc_d, m68k_op_move_16_toc_d, m68k_op_move_16_toc_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_toc_ai, m68k_op_move_16_toc_ai, m68k_op_move_16_toc_ai, m68k_op_move_16_toc_ai, m68k_op_move_16_toc_ai, m68k_op_move_16_toc_ai, m68k_op_move_16_toc_ai, m68k_op_move_16_toc_ai, - m68k_op_move_16_toc_pi, m68k_op_move_16_toc_pi, m68k_op_move_16_toc_pi, m68k_op_move_16_toc_pi, m68k_op_move_16_toc_pi, m68k_op_move_16_toc_pi, m68k_op_move_16_toc_pi, m68k_op_move_16_toc_pi, - m68k_op_move_16_toc_pd, m68k_op_move_16_toc_pd, m68k_op_move_16_toc_pd, m68k_op_move_16_toc_pd, m68k_op_move_16_toc_pd, m68k_op_move_16_toc_pd, m68k_op_move_16_toc_pd, m68k_op_move_16_toc_pd, - m68k_op_move_16_toc_di, m68k_op_move_16_toc_di, m68k_op_move_16_toc_di, m68k_op_move_16_toc_di, m68k_op_move_16_toc_di, m68k_op_move_16_toc_di, m68k_op_move_16_toc_di, m68k_op_move_16_toc_di, - m68k_op_move_16_toc_ix, m68k_op_move_16_toc_ix, m68k_op_move_16_toc_ix, m68k_op_move_16_toc_ix, m68k_op_move_16_toc_ix, m68k_op_move_16_toc_ix, m68k_op_move_16_toc_ix, m68k_op_move_16_toc_ix, - m68k_op_move_16_toc_aw, m68k_op_move_16_toc_al, m68k_op_move_16_toc_pcdi, m68k_op_move_16_toc_pcix, m68k_op_move_16_toc_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_not_8_d, m68k_op_not_8_d, m68k_op_not_8_d, m68k_op_not_8_d, m68k_op_not_8_d, m68k_op_not_8_d, m68k_op_not_8_d, m68k_op_not_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_not_8_ai, m68k_op_not_8_ai, m68k_op_not_8_ai, m68k_op_not_8_ai, m68k_op_not_8_ai, m68k_op_not_8_ai, m68k_op_not_8_ai, m68k_op_not_8_ai, - m68k_op_not_8_pi, m68k_op_not_8_pi, m68k_op_not_8_pi, m68k_op_not_8_pi, m68k_op_not_8_pi, m68k_op_not_8_pi, m68k_op_not_8_pi, m68k_op_not_8_pi7, - m68k_op_not_8_pd, m68k_op_not_8_pd, m68k_op_not_8_pd, m68k_op_not_8_pd, m68k_op_not_8_pd, m68k_op_not_8_pd, m68k_op_not_8_pd, m68k_op_not_8_pd7, - m68k_op_not_8_di, m68k_op_not_8_di, m68k_op_not_8_di, m68k_op_not_8_di, m68k_op_not_8_di, m68k_op_not_8_di, m68k_op_not_8_di, m68k_op_not_8_di, - m68k_op_not_8_ix, m68k_op_not_8_ix, m68k_op_not_8_ix, m68k_op_not_8_ix, m68k_op_not_8_ix, m68k_op_not_8_ix, m68k_op_not_8_ix, m68k_op_not_8_ix, - m68k_op_not_8_aw, m68k_op_not_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_not_16_d, m68k_op_not_16_d, m68k_op_not_16_d, m68k_op_not_16_d, m68k_op_not_16_d, m68k_op_not_16_d, m68k_op_not_16_d, m68k_op_not_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_not_16_ai, m68k_op_not_16_ai, m68k_op_not_16_ai, m68k_op_not_16_ai, m68k_op_not_16_ai, m68k_op_not_16_ai, m68k_op_not_16_ai, m68k_op_not_16_ai, - m68k_op_not_16_pi, m68k_op_not_16_pi, m68k_op_not_16_pi, m68k_op_not_16_pi, m68k_op_not_16_pi, m68k_op_not_16_pi, m68k_op_not_16_pi, m68k_op_not_16_pi, - m68k_op_not_16_pd, m68k_op_not_16_pd, m68k_op_not_16_pd, m68k_op_not_16_pd, m68k_op_not_16_pd, m68k_op_not_16_pd, m68k_op_not_16_pd, m68k_op_not_16_pd, - m68k_op_not_16_di, m68k_op_not_16_di, m68k_op_not_16_di, m68k_op_not_16_di, m68k_op_not_16_di, m68k_op_not_16_di, m68k_op_not_16_di, m68k_op_not_16_di, - m68k_op_not_16_ix, m68k_op_not_16_ix, m68k_op_not_16_ix, m68k_op_not_16_ix, m68k_op_not_16_ix, m68k_op_not_16_ix, m68k_op_not_16_ix, m68k_op_not_16_ix, - m68k_op_not_16_aw, m68k_op_not_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_not_32_d, m68k_op_not_32_d, m68k_op_not_32_d, m68k_op_not_32_d, m68k_op_not_32_d, m68k_op_not_32_d, m68k_op_not_32_d, m68k_op_not_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_not_32_ai, m68k_op_not_32_ai, m68k_op_not_32_ai, m68k_op_not_32_ai, m68k_op_not_32_ai, m68k_op_not_32_ai, m68k_op_not_32_ai, m68k_op_not_32_ai, - m68k_op_not_32_pi, m68k_op_not_32_pi, m68k_op_not_32_pi, m68k_op_not_32_pi, m68k_op_not_32_pi, m68k_op_not_32_pi, m68k_op_not_32_pi, m68k_op_not_32_pi, - m68k_op_not_32_pd, m68k_op_not_32_pd, m68k_op_not_32_pd, m68k_op_not_32_pd, m68k_op_not_32_pd, m68k_op_not_32_pd, m68k_op_not_32_pd, m68k_op_not_32_pd, - m68k_op_not_32_di, m68k_op_not_32_di, m68k_op_not_32_di, m68k_op_not_32_di, m68k_op_not_32_di, m68k_op_not_32_di, m68k_op_not_32_di, m68k_op_not_32_di, - m68k_op_not_32_ix, m68k_op_not_32_ix, m68k_op_not_32_ix, m68k_op_not_32_ix, m68k_op_not_32_ix, m68k_op_not_32_ix, m68k_op_not_32_ix, m68k_op_not_32_ix, - m68k_op_not_32_aw, m68k_op_not_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_tos_d, m68k_op_move_16_tos_d, m68k_op_move_16_tos_d, m68k_op_move_16_tos_d, m68k_op_move_16_tos_d, m68k_op_move_16_tos_d, m68k_op_move_16_tos_d, m68k_op_move_16_tos_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_move_16_tos_ai, m68k_op_move_16_tos_ai, m68k_op_move_16_tos_ai, m68k_op_move_16_tos_ai, m68k_op_move_16_tos_ai, m68k_op_move_16_tos_ai, m68k_op_move_16_tos_ai, m68k_op_move_16_tos_ai, - m68k_op_move_16_tos_pi, m68k_op_move_16_tos_pi, m68k_op_move_16_tos_pi, m68k_op_move_16_tos_pi, m68k_op_move_16_tos_pi, m68k_op_move_16_tos_pi, m68k_op_move_16_tos_pi, m68k_op_move_16_tos_pi, - m68k_op_move_16_tos_pd, m68k_op_move_16_tos_pd, m68k_op_move_16_tos_pd, m68k_op_move_16_tos_pd, m68k_op_move_16_tos_pd, m68k_op_move_16_tos_pd, m68k_op_move_16_tos_pd, m68k_op_move_16_tos_pd, - m68k_op_move_16_tos_di, m68k_op_move_16_tos_di, m68k_op_move_16_tos_di, m68k_op_move_16_tos_di, m68k_op_move_16_tos_di, m68k_op_move_16_tos_di, m68k_op_move_16_tos_di, m68k_op_move_16_tos_di, - m68k_op_move_16_tos_ix, m68k_op_move_16_tos_ix, m68k_op_move_16_tos_ix, m68k_op_move_16_tos_ix, m68k_op_move_16_tos_ix, m68k_op_move_16_tos_ix, m68k_op_move_16_tos_ix, m68k_op_move_16_tos_ix, - m68k_op_move_16_tos_aw, m68k_op_move_16_tos_al, m68k_op_move_16_tos_pcdi, m68k_op_move_16_tos_pcix, m68k_op_move_16_tos_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_nbcd_8_d, m68k_op_nbcd_8_d, m68k_op_nbcd_8_d, m68k_op_nbcd_8_d, m68k_op_nbcd_8_d, m68k_op_nbcd_8_d, m68k_op_nbcd_8_d, m68k_op_nbcd_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_nbcd_8_ai, m68k_op_nbcd_8_ai, m68k_op_nbcd_8_ai, m68k_op_nbcd_8_ai, m68k_op_nbcd_8_ai, m68k_op_nbcd_8_ai, m68k_op_nbcd_8_ai, m68k_op_nbcd_8_ai, - m68k_op_nbcd_8_pi, m68k_op_nbcd_8_pi, m68k_op_nbcd_8_pi, m68k_op_nbcd_8_pi, m68k_op_nbcd_8_pi, m68k_op_nbcd_8_pi, m68k_op_nbcd_8_pi, m68k_op_nbcd_8_pi7, - m68k_op_nbcd_8_pd, m68k_op_nbcd_8_pd, m68k_op_nbcd_8_pd, m68k_op_nbcd_8_pd, m68k_op_nbcd_8_pd, m68k_op_nbcd_8_pd, m68k_op_nbcd_8_pd, m68k_op_nbcd_8_pd7, - m68k_op_nbcd_8_di, m68k_op_nbcd_8_di, m68k_op_nbcd_8_di, m68k_op_nbcd_8_di, m68k_op_nbcd_8_di, m68k_op_nbcd_8_di, m68k_op_nbcd_8_di, m68k_op_nbcd_8_di, - m68k_op_nbcd_8_ix, m68k_op_nbcd_8_ix, m68k_op_nbcd_8_ix, m68k_op_nbcd_8_ix, m68k_op_nbcd_8_ix, m68k_op_nbcd_8_ix, m68k_op_nbcd_8_ix, m68k_op_nbcd_8_ix, - m68k_op_nbcd_8_aw, m68k_op_nbcd_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_swap_32, m68k_op_swap_32, m68k_op_swap_32, m68k_op_swap_32, m68k_op_swap_32, m68k_op_swap_32, m68k_op_swap_32, m68k_op_swap_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_pea_32_ai, m68k_op_pea_32_ai, m68k_op_pea_32_ai, m68k_op_pea_32_ai, m68k_op_pea_32_ai, m68k_op_pea_32_ai, m68k_op_pea_32_ai, m68k_op_pea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_pea_32_di, m68k_op_pea_32_di, m68k_op_pea_32_di, m68k_op_pea_32_di, m68k_op_pea_32_di, m68k_op_pea_32_di, m68k_op_pea_32_di, m68k_op_pea_32_di, - m68k_op_pea_32_ix, m68k_op_pea_32_ix, m68k_op_pea_32_ix, m68k_op_pea_32_ix, m68k_op_pea_32_ix, m68k_op_pea_32_ix, m68k_op_pea_32_ix, m68k_op_pea_32_ix, - m68k_op_pea_32_aw, m68k_op_pea_32_al, m68k_op_pea_32_pcdi, m68k_op_pea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ext_16, m68k_op_ext_16, m68k_op_ext_16, m68k_op_ext_16, m68k_op_ext_16, m68k_op_ext_16, m68k_op_ext_16, m68k_op_ext_16, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_16_re_ai, m68k_op_movem_16_re_ai, m68k_op_movem_16_re_ai, m68k_op_movem_16_re_ai, m68k_op_movem_16_re_ai, m68k_op_movem_16_re_ai, m68k_op_movem_16_re_ai, m68k_op_movem_16_re_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_16_re_pd, m68k_op_movem_16_re_pd, m68k_op_movem_16_re_pd, m68k_op_movem_16_re_pd, m68k_op_movem_16_re_pd, m68k_op_movem_16_re_pd, m68k_op_movem_16_re_pd, m68k_op_movem_16_re_pd, - m68k_op_movem_16_re_di, m68k_op_movem_16_re_di, m68k_op_movem_16_re_di, m68k_op_movem_16_re_di, m68k_op_movem_16_re_di, m68k_op_movem_16_re_di, m68k_op_movem_16_re_di, m68k_op_movem_16_re_di, - m68k_op_movem_16_re_ix, m68k_op_movem_16_re_ix, m68k_op_movem_16_re_ix, m68k_op_movem_16_re_ix, m68k_op_movem_16_re_ix, m68k_op_movem_16_re_ix, m68k_op_movem_16_re_ix, m68k_op_movem_16_re_ix, - m68k_op_movem_16_re_aw, m68k_op_movem_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ext_32, m68k_op_ext_32, m68k_op_ext_32, m68k_op_ext_32, m68k_op_ext_32, m68k_op_ext_32, m68k_op_ext_32, m68k_op_ext_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_32_re_ai, m68k_op_movem_32_re_ai, m68k_op_movem_32_re_ai, m68k_op_movem_32_re_ai, m68k_op_movem_32_re_ai, m68k_op_movem_32_re_ai, m68k_op_movem_32_re_ai, m68k_op_movem_32_re_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_32_re_pd, m68k_op_movem_32_re_pd, m68k_op_movem_32_re_pd, m68k_op_movem_32_re_pd, m68k_op_movem_32_re_pd, m68k_op_movem_32_re_pd, m68k_op_movem_32_re_pd, m68k_op_movem_32_re_pd, - m68k_op_movem_32_re_di, m68k_op_movem_32_re_di, m68k_op_movem_32_re_di, m68k_op_movem_32_re_di, m68k_op_movem_32_re_di, m68k_op_movem_32_re_di, m68k_op_movem_32_re_di, m68k_op_movem_32_re_di, - m68k_op_movem_32_re_ix, m68k_op_movem_32_re_ix, m68k_op_movem_32_re_ix, m68k_op_movem_32_re_ix, m68k_op_movem_32_re_ix, m68k_op_movem_32_re_ix, m68k_op_movem_32_re_ix, m68k_op_movem_32_re_ix, - m68k_op_movem_32_re_aw, m68k_op_movem_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tst_8_d, m68k_op_tst_8_d, m68k_op_tst_8_d, m68k_op_tst_8_d, m68k_op_tst_8_d, m68k_op_tst_8_d, m68k_op_tst_8_d, m68k_op_tst_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tst_8_ai, m68k_op_tst_8_ai, m68k_op_tst_8_ai, m68k_op_tst_8_ai, m68k_op_tst_8_ai, m68k_op_tst_8_ai, m68k_op_tst_8_ai, m68k_op_tst_8_ai, - m68k_op_tst_8_pi, m68k_op_tst_8_pi, m68k_op_tst_8_pi, m68k_op_tst_8_pi, m68k_op_tst_8_pi, m68k_op_tst_8_pi, m68k_op_tst_8_pi, m68k_op_tst_8_pi7, - m68k_op_tst_8_pd, m68k_op_tst_8_pd, m68k_op_tst_8_pd, m68k_op_tst_8_pd, m68k_op_tst_8_pd, m68k_op_tst_8_pd, m68k_op_tst_8_pd, m68k_op_tst_8_pd7, - m68k_op_tst_8_di, m68k_op_tst_8_di, m68k_op_tst_8_di, m68k_op_tst_8_di, m68k_op_tst_8_di, m68k_op_tst_8_di, m68k_op_tst_8_di, m68k_op_tst_8_di, - m68k_op_tst_8_ix, m68k_op_tst_8_ix, m68k_op_tst_8_ix, m68k_op_tst_8_ix, m68k_op_tst_8_ix, m68k_op_tst_8_ix, m68k_op_tst_8_ix, m68k_op_tst_8_ix, - m68k_op_tst_8_aw, m68k_op_tst_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tst_16_d, m68k_op_tst_16_d, m68k_op_tst_16_d, m68k_op_tst_16_d, m68k_op_tst_16_d, m68k_op_tst_16_d, m68k_op_tst_16_d, m68k_op_tst_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tst_16_ai, m68k_op_tst_16_ai, m68k_op_tst_16_ai, m68k_op_tst_16_ai, m68k_op_tst_16_ai, m68k_op_tst_16_ai, m68k_op_tst_16_ai, m68k_op_tst_16_ai, - m68k_op_tst_16_pi, m68k_op_tst_16_pi, m68k_op_tst_16_pi, m68k_op_tst_16_pi, m68k_op_tst_16_pi, m68k_op_tst_16_pi, m68k_op_tst_16_pi, m68k_op_tst_16_pi, - m68k_op_tst_16_pd, m68k_op_tst_16_pd, m68k_op_tst_16_pd, m68k_op_tst_16_pd, m68k_op_tst_16_pd, m68k_op_tst_16_pd, m68k_op_tst_16_pd, m68k_op_tst_16_pd, - m68k_op_tst_16_di, m68k_op_tst_16_di, m68k_op_tst_16_di, m68k_op_tst_16_di, m68k_op_tst_16_di, m68k_op_tst_16_di, m68k_op_tst_16_di, m68k_op_tst_16_di, - m68k_op_tst_16_ix, m68k_op_tst_16_ix, m68k_op_tst_16_ix, m68k_op_tst_16_ix, m68k_op_tst_16_ix, m68k_op_tst_16_ix, m68k_op_tst_16_ix, m68k_op_tst_16_ix, - m68k_op_tst_16_aw, m68k_op_tst_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tst_32_d, m68k_op_tst_32_d, m68k_op_tst_32_d, m68k_op_tst_32_d, m68k_op_tst_32_d, m68k_op_tst_32_d, m68k_op_tst_32_d, m68k_op_tst_32_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tst_32_ai, m68k_op_tst_32_ai, m68k_op_tst_32_ai, m68k_op_tst_32_ai, m68k_op_tst_32_ai, m68k_op_tst_32_ai, m68k_op_tst_32_ai, m68k_op_tst_32_ai, - m68k_op_tst_32_pi, m68k_op_tst_32_pi, m68k_op_tst_32_pi, m68k_op_tst_32_pi, m68k_op_tst_32_pi, m68k_op_tst_32_pi, m68k_op_tst_32_pi, m68k_op_tst_32_pi, - m68k_op_tst_32_pd, m68k_op_tst_32_pd, m68k_op_tst_32_pd, m68k_op_tst_32_pd, m68k_op_tst_32_pd, m68k_op_tst_32_pd, m68k_op_tst_32_pd, m68k_op_tst_32_pd, - m68k_op_tst_32_di, m68k_op_tst_32_di, m68k_op_tst_32_di, m68k_op_tst_32_di, m68k_op_tst_32_di, m68k_op_tst_32_di, m68k_op_tst_32_di, m68k_op_tst_32_di, - m68k_op_tst_32_ix, m68k_op_tst_32_ix, m68k_op_tst_32_ix, m68k_op_tst_32_ix, m68k_op_tst_32_ix, m68k_op_tst_32_ix, m68k_op_tst_32_ix, m68k_op_tst_32_ix, - m68k_op_tst_32_aw, m68k_op_tst_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tas_8_d, m68k_op_tas_8_d, m68k_op_tas_8_d, m68k_op_tas_8_d, m68k_op_tas_8_d, m68k_op_tas_8_d, m68k_op_tas_8_d, m68k_op_tas_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_tas_8_ai, m68k_op_tas_8_ai, m68k_op_tas_8_ai, m68k_op_tas_8_ai, m68k_op_tas_8_ai, m68k_op_tas_8_ai, m68k_op_tas_8_ai, m68k_op_tas_8_ai, - m68k_op_tas_8_pi, m68k_op_tas_8_pi, m68k_op_tas_8_pi, m68k_op_tas_8_pi, m68k_op_tas_8_pi, m68k_op_tas_8_pi, m68k_op_tas_8_pi, m68k_op_tas_8_pi7, - m68k_op_tas_8_pd, m68k_op_tas_8_pd, m68k_op_tas_8_pd, m68k_op_tas_8_pd, m68k_op_tas_8_pd, m68k_op_tas_8_pd, m68k_op_tas_8_pd, m68k_op_tas_8_pd7, - m68k_op_tas_8_di, m68k_op_tas_8_di, m68k_op_tas_8_di, m68k_op_tas_8_di, m68k_op_tas_8_di, m68k_op_tas_8_di, m68k_op_tas_8_di, m68k_op_tas_8_di, - m68k_op_tas_8_ix, m68k_op_tas_8_ix, m68k_op_tas_8_ix, m68k_op_tas_8_ix, m68k_op_tas_8_ix, m68k_op_tas_8_ix, m68k_op_tas_8_ix, m68k_op_tas_8_ix, - m68k_op_tas_8_aw, m68k_op_tas_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_16_er_ai, m68k_op_movem_16_er_ai, m68k_op_movem_16_er_ai, m68k_op_movem_16_er_ai, m68k_op_movem_16_er_ai, m68k_op_movem_16_er_ai, m68k_op_movem_16_er_ai, m68k_op_movem_16_er_ai, - m68k_op_movem_16_er_pi, m68k_op_movem_16_er_pi, m68k_op_movem_16_er_pi, m68k_op_movem_16_er_pi, m68k_op_movem_16_er_pi, m68k_op_movem_16_er_pi, m68k_op_movem_16_er_pi, m68k_op_movem_16_er_pi, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_16_er_di, m68k_op_movem_16_er_di, m68k_op_movem_16_er_di, m68k_op_movem_16_er_di, m68k_op_movem_16_er_di, m68k_op_movem_16_er_di, m68k_op_movem_16_er_di, m68k_op_movem_16_er_di, - m68k_op_movem_16_er_ix, m68k_op_movem_16_er_ix, m68k_op_movem_16_er_ix, m68k_op_movem_16_er_ix, m68k_op_movem_16_er_ix, m68k_op_movem_16_er_ix, m68k_op_movem_16_er_ix, m68k_op_movem_16_er_ix, - m68k_op_movem_16_er_aw, m68k_op_movem_16_er_al, m68k_op_movem_16_er_pcdi, m68k_op_movem_16_er_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_32_er_ai, m68k_op_movem_32_er_ai, m68k_op_movem_32_er_ai, m68k_op_movem_32_er_ai, m68k_op_movem_32_er_ai, m68k_op_movem_32_er_ai, m68k_op_movem_32_er_ai, m68k_op_movem_32_er_ai, - m68k_op_movem_32_er_pi, m68k_op_movem_32_er_pi, m68k_op_movem_32_er_pi, m68k_op_movem_32_er_pi, m68k_op_movem_32_er_pi, m68k_op_movem_32_er_pi, m68k_op_movem_32_er_pi, m68k_op_movem_32_er_pi, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_movem_32_er_di, m68k_op_movem_32_er_di, m68k_op_movem_32_er_di, m68k_op_movem_32_er_di, m68k_op_movem_32_er_di, m68k_op_movem_32_er_di, m68k_op_movem_32_er_di, m68k_op_movem_32_er_di, - m68k_op_movem_32_er_ix, m68k_op_movem_32_er_ix, m68k_op_movem_32_er_ix, m68k_op_movem_32_er_ix, m68k_op_movem_32_er_ix, m68k_op_movem_32_er_ix, m68k_op_movem_32_er_ix, m68k_op_movem_32_er_ix, - m68k_op_movem_32_er_aw, m68k_op_movem_32_er_al, m68k_op_movem_32_er_pcdi, m68k_op_movem_32_er_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, - m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, m68k_op_trap, - m68k_op_link_16, m68k_op_link_16, m68k_op_link_16, m68k_op_link_16, m68k_op_link_16, m68k_op_link_16, m68k_op_link_16, m68k_op_link_16_a7, - m68k_op_unlk_32, m68k_op_unlk_32, m68k_op_unlk_32, m68k_op_unlk_32, m68k_op_unlk_32, m68k_op_unlk_32, m68k_op_unlk_32, m68k_op_unlk_32_a7, - m68k_op_move_32_tou, m68k_op_move_32_tou, m68k_op_move_32_tou, m68k_op_move_32_tou, m68k_op_move_32_tou, m68k_op_move_32_tou, m68k_op_move_32_tou, m68k_op_move_32_tou, - m68k_op_move_32_fru, m68k_op_move_32_fru, m68k_op_move_32_fru, m68k_op_move_32_fru, m68k_op_move_32_fru, m68k_op_move_32_fru, m68k_op_move_32_fru, m68k_op_move_32_fru, - m68k_op_reset, m68k_op_nop, m68k_op_stop, m68k_op_rte_32, m68k_op_illegal, m68k_op_rts_32, m68k_op_trapv, m68k_op_rtr_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_jsr_32_ai, m68k_op_jsr_32_ai, m68k_op_jsr_32_ai, m68k_op_jsr_32_ai, m68k_op_jsr_32_ai, m68k_op_jsr_32_ai, m68k_op_jsr_32_ai, m68k_op_jsr_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_jsr_32_di, m68k_op_jsr_32_di, m68k_op_jsr_32_di, m68k_op_jsr_32_di, m68k_op_jsr_32_di, m68k_op_jsr_32_di, m68k_op_jsr_32_di, m68k_op_jsr_32_di, - m68k_op_jsr_32_ix, m68k_op_jsr_32_ix, m68k_op_jsr_32_ix, m68k_op_jsr_32_ix, m68k_op_jsr_32_ix, m68k_op_jsr_32_ix, m68k_op_jsr_32_ix, m68k_op_jsr_32_ix, - m68k_op_jsr_32_aw, m68k_op_jsr_32_al, m68k_op_jsr_32_pcdi, m68k_op_jsr_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_jmp_32_ai, m68k_op_jmp_32_ai, m68k_op_jmp_32_ai, m68k_op_jmp_32_ai, m68k_op_jmp_32_ai, m68k_op_jmp_32_ai, m68k_op_jmp_32_ai, m68k_op_jmp_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_jmp_32_di, m68k_op_jmp_32_di, m68k_op_jmp_32_di, m68k_op_jmp_32_di, m68k_op_jmp_32_di, m68k_op_jmp_32_di, m68k_op_jmp_32_di, m68k_op_jmp_32_di, - m68k_op_jmp_32_ix, m68k_op_jmp_32_ix, m68k_op_jmp_32_ix, m68k_op_jmp_32_ix, m68k_op_jmp_32_ix, m68k_op_jmp_32_ix, m68k_op_jmp_32_ix, m68k_op_jmp_32_ix, - m68k_op_jmp_32_aw, m68k_op_jmp_32_al, m68k_op_jmp_32_pcdi, m68k_op_jmp_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, m68k_op_chk_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, m68k_op_chk_16_ai, - m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, m68k_op_chk_16_pi, - m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, m68k_op_chk_16_pd, - m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, m68k_op_chk_16_di, - m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, m68k_op_chk_16_ix, - m68k_op_chk_16_aw, m68k_op_chk_16_al, m68k_op_chk_16_pcdi, m68k_op_chk_16_pcix, m68k_op_chk_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, m68k_op_lea_32_ai, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, m68k_op_lea_32_di, - m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, m68k_op_lea_32_ix, - m68k_op_lea_32_aw, m68k_op_lea_32_al, m68k_op_lea_32_pcdi, m68k_op_lea_32_pcix, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_st_8_d, m68k_op_st_8_d, m68k_op_st_8_d, m68k_op_st_8_d, m68k_op_st_8_d, m68k_op_st_8_d, m68k_op_st_8_d, m68k_op_st_8_d, - m68k_op_dbt_16, m68k_op_dbt_16, m68k_op_dbt_16, m68k_op_dbt_16, m68k_op_dbt_16, m68k_op_dbt_16, m68k_op_dbt_16, m68k_op_dbt_16, - m68k_op_st_8_ai, m68k_op_st_8_ai, m68k_op_st_8_ai, m68k_op_st_8_ai, m68k_op_st_8_ai, m68k_op_st_8_ai, m68k_op_st_8_ai, m68k_op_st_8_ai, - m68k_op_st_8_pi, m68k_op_st_8_pi, m68k_op_st_8_pi, m68k_op_st_8_pi, m68k_op_st_8_pi, m68k_op_st_8_pi, m68k_op_st_8_pi, m68k_op_st_8_pi7, - m68k_op_st_8_pd, m68k_op_st_8_pd, m68k_op_st_8_pd, m68k_op_st_8_pd, m68k_op_st_8_pd, m68k_op_st_8_pd, m68k_op_st_8_pd, m68k_op_st_8_pd7, - m68k_op_st_8_di, m68k_op_st_8_di, m68k_op_st_8_di, m68k_op_st_8_di, m68k_op_st_8_di, m68k_op_st_8_di, m68k_op_st_8_di, m68k_op_st_8_di, - m68k_op_st_8_ix, m68k_op_st_8_ix, m68k_op_st_8_ix, m68k_op_st_8_ix, m68k_op_st_8_ix, m68k_op_st_8_ix, m68k_op_st_8_ix, m68k_op_st_8_ix, - m68k_op_st_8_aw, m68k_op_st_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sf_8_d, m68k_op_sf_8_d, m68k_op_sf_8_d, m68k_op_sf_8_d, m68k_op_sf_8_d, m68k_op_sf_8_d, m68k_op_sf_8_d, m68k_op_sf_8_d, - m68k_op_dbf_16, m68k_op_dbf_16, m68k_op_dbf_16, m68k_op_dbf_16, m68k_op_dbf_16, m68k_op_dbf_16, m68k_op_dbf_16, m68k_op_dbf_16, - m68k_op_sf_8_ai, m68k_op_sf_8_ai, m68k_op_sf_8_ai, m68k_op_sf_8_ai, m68k_op_sf_8_ai, m68k_op_sf_8_ai, m68k_op_sf_8_ai, m68k_op_sf_8_ai, - m68k_op_sf_8_pi, m68k_op_sf_8_pi, m68k_op_sf_8_pi, m68k_op_sf_8_pi, m68k_op_sf_8_pi, m68k_op_sf_8_pi, m68k_op_sf_8_pi, m68k_op_sf_8_pi7, - m68k_op_sf_8_pd, m68k_op_sf_8_pd, m68k_op_sf_8_pd, m68k_op_sf_8_pd, m68k_op_sf_8_pd, m68k_op_sf_8_pd, m68k_op_sf_8_pd, m68k_op_sf_8_pd7, - m68k_op_sf_8_di, m68k_op_sf_8_di, m68k_op_sf_8_di, m68k_op_sf_8_di, m68k_op_sf_8_di, m68k_op_sf_8_di, m68k_op_sf_8_di, m68k_op_sf_8_di, - m68k_op_sf_8_ix, m68k_op_sf_8_ix, m68k_op_sf_8_ix, m68k_op_sf_8_ix, m68k_op_sf_8_ix, m68k_op_sf_8_ix, m68k_op_sf_8_ix, m68k_op_sf_8_ix, - m68k_op_sf_8_aw, m68k_op_sf_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_shi_8_d, m68k_op_shi_8_d, m68k_op_shi_8_d, m68k_op_shi_8_d, m68k_op_shi_8_d, m68k_op_shi_8_d, m68k_op_shi_8_d, m68k_op_shi_8_d, - m68k_op_dbhi_16, m68k_op_dbhi_16, m68k_op_dbhi_16, m68k_op_dbhi_16, m68k_op_dbhi_16, m68k_op_dbhi_16, m68k_op_dbhi_16, m68k_op_dbhi_16, - m68k_op_shi_8_ai, m68k_op_shi_8_ai, m68k_op_shi_8_ai, m68k_op_shi_8_ai, m68k_op_shi_8_ai, m68k_op_shi_8_ai, m68k_op_shi_8_ai, m68k_op_shi_8_ai, - m68k_op_shi_8_pi, m68k_op_shi_8_pi, m68k_op_shi_8_pi, m68k_op_shi_8_pi, m68k_op_shi_8_pi, m68k_op_shi_8_pi, m68k_op_shi_8_pi, m68k_op_shi_8_pi7, - m68k_op_shi_8_pd, m68k_op_shi_8_pd, m68k_op_shi_8_pd, m68k_op_shi_8_pd, m68k_op_shi_8_pd, m68k_op_shi_8_pd, m68k_op_shi_8_pd, m68k_op_shi_8_pd7, - m68k_op_shi_8_di, m68k_op_shi_8_di, m68k_op_shi_8_di, m68k_op_shi_8_di, m68k_op_shi_8_di, m68k_op_shi_8_di, m68k_op_shi_8_di, m68k_op_shi_8_di, - m68k_op_shi_8_ix, m68k_op_shi_8_ix, m68k_op_shi_8_ix, m68k_op_shi_8_ix, m68k_op_shi_8_ix, m68k_op_shi_8_ix, m68k_op_shi_8_ix, m68k_op_shi_8_ix, - m68k_op_shi_8_aw, m68k_op_shi_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sls_8_d, m68k_op_sls_8_d, m68k_op_sls_8_d, m68k_op_sls_8_d, m68k_op_sls_8_d, m68k_op_sls_8_d, m68k_op_sls_8_d, m68k_op_sls_8_d, - m68k_op_dbls_16, m68k_op_dbls_16, m68k_op_dbls_16, m68k_op_dbls_16, m68k_op_dbls_16, m68k_op_dbls_16, m68k_op_dbls_16, m68k_op_dbls_16, - m68k_op_sls_8_ai, m68k_op_sls_8_ai, m68k_op_sls_8_ai, m68k_op_sls_8_ai, m68k_op_sls_8_ai, m68k_op_sls_8_ai, m68k_op_sls_8_ai, m68k_op_sls_8_ai, - m68k_op_sls_8_pi, m68k_op_sls_8_pi, m68k_op_sls_8_pi, m68k_op_sls_8_pi, m68k_op_sls_8_pi, m68k_op_sls_8_pi, m68k_op_sls_8_pi, m68k_op_sls_8_pi7, - m68k_op_sls_8_pd, m68k_op_sls_8_pd, m68k_op_sls_8_pd, m68k_op_sls_8_pd, m68k_op_sls_8_pd, m68k_op_sls_8_pd, m68k_op_sls_8_pd, m68k_op_sls_8_pd7, - m68k_op_sls_8_di, m68k_op_sls_8_di, m68k_op_sls_8_di, m68k_op_sls_8_di, m68k_op_sls_8_di, m68k_op_sls_8_di, m68k_op_sls_8_di, m68k_op_sls_8_di, - m68k_op_sls_8_ix, m68k_op_sls_8_ix, m68k_op_sls_8_ix, m68k_op_sls_8_ix, m68k_op_sls_8_ix, m68k_op_sls_8_ix, m68k_op_sls_8_ix, m68k_op_sls_8_ix, - m68k_op_sls_8_aw, m68k_op_sls_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_scc_8_d, m68k_op_scc_8_d, m68k_op_scc_8_d, m68k_op_scc_8_d, m68k_op_scc_8_d, m68k_op_scc_8_d, m68k_op_scc_8_d, m68k_op_scc_8_d, - m68k_op_dbcc_16, m68k_op_dbcc_16, m68k_op_dbcc_16, m68k_op_dbcc_16, m68k_op_dbcc_16, m68k_op_dbcc_16, m68k_op_dbcc_16, m68k_op_dbcc_16, - m68k_op_scc_8_ai, m68k_op_scc_8_ai, m68k_op_scc_8_ai, m68k_op_scc_8_ai, m68k_op_scc_8_ai, m68k_op_scc_8_ai, m68k_op_scc_8_ai, m68k_op_scc_8_ai, - m68k_op_scc_8_pi, m68k_op_scc_8_pi, m68k_op_scc_8_pi, m68k_op_scc_8_pi, m68k_op_scc_8_pi, m68k_op_scc_8_pi, m68k_op_scc_8_pi, m68k_op_scc_8_pi7, - m68k_op_scc_8_pd, m68k_op_scc_8_pd, m68k_op_scc_8_pd, m68k_op_scc_8_pd, m68k_op_scc_8_pd, m68k_op_scc_8_pd, m68k_op_scc_8_pd, m68k_op_scc_8_pd7, - m68k_op_scc_8_di, m68k_op_scc_8_di, m68k_op_scc_8_di, m68k_op_scc_8_di, m68k_op_scc_8_di, m68k_op_scc_8_di, m68k_op_scc_8_di, m68k_op_scc_8_di, - m68k_op_scc_8_ix, m68k_op_scc_8_ix, m68k_op_scc_8_ix, m68k_op_scc_8_ix, m68k_op_scc_8_ix, m68k_op_scc_8_ix, m68k_op_scc_8_ix, m68k_op_scc_8_ix, - m68k_op_scc_8_aw, m68k_op_scc_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_scs_8_d, m68k_op_scs_8_d, m68k_op_scs_8_d, m68k_op_scs_8_d, m68k_op_scs_8_d, m68k_op_scs_8_d, m68k_op_scs_8_d, m68k_op_scs_8_d, - m68k_op_dbcs_16, m68k_op_dbcs_16, m68k_op_dbcs_16, m68k_op_dbcs_16, m68k_op_dbcs_16, m68k_op_dbcs_16, m68k_op_dbcs_16, m68k_op_dbcs_16, - m68k_op_scs_8_ai, m68k_op_scs_8_ai, m68k_op_scs_8_ai, m68k_op_scs_8_ai, m68k_op_scs_8_ai, m68k_op_scs_8_ai, m68k_op_scs_8_ai, m68k_op_scs_8_ai, - m68k_op_scs_8_pi, m68k_op_scs_8_pi, m68k_op_scs_8_pi, m68k_op_scs_8_pi, m68k_op_scs_8_pi, m68k_op_scs_8_pi, m68k_op_scs_8_pi, m68k_op_scs_8_pi7, - m68k_op_scs_8_pd, m68k_op_scs_8_pd, m68k_op_scs_8_pd, m68k_op_scs_8_pd, m68k_op_scs_8_pd, m68k_op_scs_8_pd, m68k_op_scs_8_pd, m68k_op_scs_8_pd7, - m68k_op_scs_8_di, m68k_op_scs_8_di, m68k_op_scs_8_di, m68k_op_scs_8_di, m68k_op_scs_8_di, m68k_op_scs_8_di, m68k_op_scs_8_di, m68k_op_scs_8_di, - m68k_op_scs_8_ix, m68k_op_scs_8_ix, m68k_op_scs_8_ix, m68k_op_scs_8_ix, m68k_op_scs_8_ix, m68k_op_scs_8_ix, m68k_op_scs_8_ix, m68k_op_scs_8_ix, - m68k_op_scs_8_aw, m68k_op_scs_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sne_8_d, m68k_op_sne_8_d, m68k_op_sne_8_d, m68k_op_sne_8_d, m68k_op_sne_8_d, m68k_op_sne_8_d, m68k_op_sne_8_d, m68k_op_sne_8_d, - m68k_op_dbne_16, m68k_op_dbne_16, m68k_op_dbne_16, m68k_op_dbne_16, m68k_op_dbne_16, m68k_op_dbne_16, m68k_op_dbne_16, m68k_op_dbne_16, - m68k_op_sne_8_ai, m68k_op_sne_8_ai, m68k_op_sne_8_ai, m68k_op_sne_8_ai, m68k_op_sne_8_ai, m68k_op_sne_8_ai, m68k_op_sne_8_ai, m68k_op_sne_8_ai, - m68k_op_sne_8_pi, m68k_op_sne_8_pi, m68k_op_sne_8_pi, m68k_op_sne_8_pi, m68k_op_sne_8_pi, m68k_op_sne_8_pi, m68k_op_sne_8_pi, m68k_op_sne_8_pi7, - m68k_op_sne_8_pd, m68k_op_sne_8_pd, m68k_op_sne_8_pd, m68k_op_sne_8_pd, m68k_op_sne_8_pd, m68k_op_sne_8_pd, m68k_op_sne_8_pd, m68k_op_sne_8_pd7, - m68k_op_sne_8_di, m68k_op_sne_8_di, m68k_op_sne_8_di, m68k_op_sne_8_di, m68k_op_sne_8_di, m68k_op_sne_8_di, m68k_op_sne_8_di, m68k_op_sne_8_di, - m68k_op_sne_8_ix, m68k_op_sne_8_ix, m68k_op_sne_8_ix, m68k_op_sne_8_ix, m68k_op_sne_8_ix, m68k_op_sne_8_ix, m68k_op_sne_8_ix, m68k_op_sne_8_ix, - m68k_op_sne_8_aw, m68k_op_sne_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_seq_8_d, m68k_op_seq_8_d, m68k_op_seq_8_d, m68k_op_seq_8_d, m68k_op_seq_8_d, m68k_op_seq_8_d, m68k_op_seq_8_d, m68k_op_seq_8_d, - m68k_op_dbeq_16, m68k_op_dbeq_16, m68k_op_dbeq_16, m68k_op_dbeq_16, m68k_op_dbeq_16, m68k_op_dbeq_16, m68k_op_dbeq_16, m68k_op_dbeq_16, - m68k_op_seq_8_ai, m68k_op_seq_8_ai, m68k_op_seq_8_ai, m68k_op_seq_8_ai, m68k_op_seq_8_ai, m68k_op_seq_8_ai, m68k_op_seq_8_ai, m68k_op_seq_8_ai, - m68k_op_seq_8_pi, m68k_op_seq_8_pi, m68k_op_seq_8_pi, m68k_op_seq_8_pi, m68k_op_seq_8_pi, m68k_op_seq_8_pi, m68k_op_seq_8_pi, m68k_op_seq_8_pi7, - m68k_op_seq_8_pd, m68k_op_seq_8_pd, m68k_op_seq_8_pd, m68k_op_seq_8_pd, m68k_op_seq_8_pd, m68k_op_seq_8_pd, m68k_op_seq_8_pd, m68k_op_seq_8_pd7, - m68k_op_seq_8_di, m68k_op_seq_8_di, m68k_op_seq_8_di, m68k_op_seq_8_di, m68k_op_seq_8_di, m68k_op_seq_8_di, m68k_op_seq_8_di, m68k_op_seq_8_di, - m68k_op_seq_8_ix, m68k_op_seq_8_ix, m68k_op_seq_8_ix, m68k_op_seq_8_ix, m68k_op_seq_8_ix, m68k_op_seq_8_ix, m68k_op_seq_8_ix, m68k_op_seq_8_ix, - m68k_op_seq_8_aw, m68k_op_seq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_svc_8_d, m68k_op_svc_8_d, m68k_op_svc_8_d, m68k_op_svc_8_d, m68k_op_svc_8_d, m68k_op_svc_8_d, m68k_op_svc_8_d, m68k_op_svc_8_d, - m68k_op_dbvc_16, m68k_op_dbvc_16, m68k_op_dbvc_16, m68k_op_dbvc_16, m68k_op_dbvc_16, m68k_op_dbvc_16, m68k_op_dbvc_16, m68k_op_dbvc_16, - m68k_op_svc_8_ai, m68k_op_svc_8_ai, m68k_op_svc_8_ai, m68k_op_svc_8_ai, m68k_op_svc_8_ai, m68k_op_svc_8_ai, m68k_op_svc_8_ai, m68k_op_svc_8_ai, - m68k_op_svc_8_pi, m68k_op_svc_8_pi, m68k_op_svc_8_pi, m68k_op_svc_8_pi, m68k_op_svc_8_pi, m68k_op_svc_8_pi, m68k_op_svc_8_pi, m68k_op_svc_8_pi7, - m68k_op_svc_8_pd, m68k_op_svc_8_pd, m68k_op_svc_8_pd, m68k_op_svc_8_pd, m68k_op_svc_8_pd, m68k_op_svc_8_pd, m68k_op_svc_8_pd, m68k_op_svc_8_pd7, - m68k_op_svc_8_di, m68k_op_svc_8_di, m68k_op_svc_8_di, m68k_op_svc_8_di, m68k_op_svc_8_di, m68k_op_svc_8_di, m68k_op_svc_8_di, m68k_op_svc_8_di, - m68k_op_svc_8_ix, m68k_op_svc_8_ix, m68k_op_svc_8_ix, m68k_op_svc_8_ix, m68k_op_svc_8_ix, m68k_op_svc_8_ix, m68k_op_svc_8_ix, m68k_op_svc_8_ix, - m68k_op_svc_8_aw, m68k_op_svc_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_svs_8_d, m68k_op_svs_8_d, m68k_op_svs_8_d, m68k_op_svs_8_d, m68k_op_svs_8_d, m68k_op_svs_8_d, m68k_op_svs_8_d, m68k_op_svs_8_d, - m68k_op_dbvs_16, m68k_op_dbvs_16, m68k_op_dbvs_16, m68k_op_dbvs_16, m68k_op_dbvs_16, m68k_op_dbvs_16, m68k_op_dbvs_16, m68k_op_dbvs_16, - m68k_op_svs_8_ai, m68k_op_svs_8_ai, m68k_op_svs_8_ai, m68k_op_svs_8_ai, m68k_op_svs_8_ai, m68k_op_svs_8_ai, m68k_op_svs_8_ai, m68k_op_svs_8_ai, - m68k_op_svs_8_pi, m68k_op_svs_8_pi, m68k_op_svs_8_pi, m68k_op_svs_8_pi, m68k_op_svs_8_pi, m68k_op_svs_8_pi, m68k_op_svs_8_pi, m68k_op_svs_8_pi7, - m68k_op_svs_8_pd, m68k_op_svs_8_pd, m68k_op_svs_8_pd, m68k_op_svs_8_pd, m68k_op_svs_8_pd, m68k_op_svs_8_pd, m68k_op_svs_8_pd, m68k_op_svs_8_pd7, - m68k_op_svs_8_di, m68k_op_svs_8_di, m68k_op_svs_8_di, m68k_op_svs_8_di, m68k_op_svs_8_di, m68k_op_svs_8_di, m68k_op_svs_8_di, m68k_op_svs_8_di, - m68k_op_svs_8_ix, m68k_op_svs_8_ix, m68k_op_svs_8_ix, m68k_op_svs_8_ix, m68k_op_svs_8_ix, m68k_op_svs_8_ix, m68k_op_svs_8_ix, m68k_op_svs_8_ix, - m68k_op_svs_8_aw, m68k_op_svs_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_spl_8_d, m68k_op_spl_8_d, m68k_op_spl_8_d, m68k_op_spl_8_d, m68k_op_spl_8_d, m68k_op_spl_8_d, m68k_op_spl_8_d, m68k_op_spl_8_d, - m68k_op_dbpl_16, m68k_op_dbpl_16, m68k_op_dbpl_16, m68k_op_dbpl_16, m68k_op_dbpl_16, m68k_op_dbpl_16, m68k_op_dbpl_16, m68k_op_dbpl_16, - m68k_op_spl_8_ai, m68k_op_spl_8_ai, m68k_op_spl_8_ai, m68k_op_spl_8_ai, m68k_op_spl_8_ai, m68k_op_spl_8_ai, m68k_op_spl_8_ai, m68k_op_spl_8_ai, - m68k_op_spl_8_pi, m68k_op_spl_8_pi, m68k_op_spl_8_pi, m68k_op_spl_8_pi, m68k_op_spl_8_pi, m68k_op_spl_8_pi, m68k_op_spl_8_pi, m68k_op_spl_8_pi7, - m68k_op_spl_8_pd, m68k_op_spl_8_pd, m68k_op_spl_8_pd, m68k_op_spl_8_pd, m68k_op_spl_8_pd, m68k_op_spl_8_pd, m68k_op_spl_8_pd, m68k_op_spl_8_pd7, - m68k_op_spl_8_di, m68k_op_spl_8_di, m68k_op_spl_8_di, m68k_op_spl_8_di, m68k_op_spl_8_di, m68k_op_spl_8_di, m68k_op_spl_8_di, m68k_op_spl_8_di, - m68k_op_spl_8_ix, m68k_op_spl_8_ix, m68k_op_spl_8_ix, m68k_op_spl_8_ix, m68k_op_spl_8_ix, m68k_op_spl_8_ix, m68k_op_spl_8_ix, m68k_op_spl_8_ix, - m68k_op_spl_8_aw, m68k_op_spl_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_smi_8_d, m68k_op_smi_8_d, m68k_op_smi_8_d, m68k_op_smi_8_d, m68k_op_smi_8_d, m68k_op_smi_8_d, m68k_op_smi_8_d, m68k_op_smi_8_d, - m68k_op_dbmi_16, m68k_op_dbmi_16, m68k_op_dbmi_16, m68k_op_dbmi_16, m68k_op_dbmi_16, m68k_op_dbmi_16, m68k_op_dbmi_16, m68k_op_dbmi_16, - m68k_op_smi_8_ai, m68k_op_smi_8_ai, m68k_op_smi_8_ai, m68k_op_smi_8_ai, m68k_op_smi_8_ai, m68k_op_smi_8_ai, m68k_op_smi_8_ai, m68k_op_smi_8_ai, - m68k_op_smi_8_pi, m68k_op_smi_8_pi, m68k_op_smi_8_pi, m68k_op_smi_8_pi, m68k_op_smi_8_pi, m68k_op_smi_8_pi, m68k_op_smi_8_pi, m68k_op_smi_8_pi7, - m68k_op_smi_8_pd, m68k_op_smi_8_pd, m68k_op_smi_8_pd, m68k_op_smi_8_pd, m68k_op_smi_8_pd, m68k_op_smi_8_pd, m68k_op_smi_8_pd, m68k_op_smi_8_pd7, - m68k_op_smi_8_di, m68k_op_smi_8_di, m68k_op_smi_8_di, m68k_op_smi_8_di, m68k_op_smi_8_di, m68k_op_smi_8_di, m68k_op_smi_8_di, m68k_op_smi_8_di, - m68k_op_smi_8_ix, m68k_op_smi_8_ix, m68k_op_smi_8_ix, m68k_op_smi_8_ix, m68k_op_smi_8_ix, m68k_op_smi_8_ix, m68k_op_smi_8_ix, m68k_op_smi_8_ix, - m68k_op_smi_8_aw, m68k_op_smi_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sge_8_d, m68k_op_sge_8_d, m68k_op_sge_8_d, m68k_op_sge_8_d, m68k_op_sge_8_d, m68k_op_sge_8_d, m68k_op_sge_8_d, m68k_op_sge_8_d, - m68k_op_dbge_16, m68k_op_dbge_16, m68k_op_dbge_16, m68k_op_dbge_16, m68k_op_dbge_16, m68k_op_dbge_16, m68k_op_dbge_16, m68k_op_dbge_16, - m68k_op_sge_8_ai, m68k_op_sge_8_ai, m68k_op_sge_8_ai, m68k_op_sge_8_ai, m68k_op_sge_8_ai, m68k_op_sge_8_ai, m68k_op_sge_8_ai, m68k_op_sge_8_ai, - m68k_op_sge_8_pi, m68k_op_sge_8_pi, m68k_op_sge_8_pi, m68k_op_sge_8_pi, m68k_op_sge_8_pi, m68k_op_sge_8_pi, m68k_op_sge_8_pi, m68k_op_sge_8_pi7, - m68k_op_sge_8_pd, m68k_op_sge_8_pd, m68k_op_sge_8_pd, m68k_op_sge_8_pd, m68k_op_sge_8_pd, m68k_op_sge_8_pd, m68k_op_sge_8_pd, m68k_op_sge_8_pd7, - m68k_op_sge_8_di, m68k_op_sge_8_di, m68k_op_sge_8_di, m68k_op_sge_8_di, m68k_op_sge_8_di, m68k_op_sge_8_di, m68k_op_sge_8_di, m68k_op_sge_8_di, - m68k_op_sge_8_ix, m68k_op_sge_8_ix, m68k_op_sge_8_ix, m68k_op_sge_8_ix, m68k_op_sge_8_ix, m68k_op_sge_8_ix, m68k_op_sge_8_ix, m68k_op_sge_8_ix, - m68k_op_sge_8_aw, m68k_op_sge_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_slt_8_d, m68k_op_slt_8_d, m68k_op_slt_8_d, m68k_op_slt_8_d, m68k_op_slt_8_d, m68k_op_slt_8_d, m68k_op_slt_8_d, m68k_op_slt_8_d, - m68k_op_dblt_16, m68k_op_dblt_16, m68k_op_dblt_16, m68k_op_dblt_16, m68k_op_dblt_16, m68k_op_dblt_16, m68k_op_dblt_16, m68k_op_dblt_16, - m68k_op_slt_8_ai, m68k_op_slt_8_ai, m68k_op_slt_8_ai, m68k_op_slt_8_ai, m68k_op_slt_8_ai, m68k_op_slt_8_ai, m68k_op_slt_8_ai, m68k_op_slt_8_ai, - m68k_op_slt_8_pi, m68k_op_slt_8_pi, m68k_op_slt_8_pi, m68k_op_slt_8_pi, m68k_op_slt_8_pi, m68k_op_slt_8_pi, m68k_op_slt_8_pi, m68k_op_slt_8_pi7, - m68k_op_slt_8_pd, m68k_op_slt_8_pd, m68k_op_slt_8_pd, m68k_op_slt_8_pd, m68k_op_slt_8_pd, m68k_op_slt_8_pd, m68k_op_slt_8_pd, m68k_op_slt_8_pd7, - m68k_op_slt_8_di, m68k_op_slt_8_di, m68k_op_slt_8_di, m68k_op_slt_8_di, m68k_op_slt_8_di, m68k_op_slt_8_di, m68k_op_slt_8_di, m68k_op_slt_8_di, - m68k_op_slt_8_ix, m68k_op_slt_8_ix, m68k_op_slt_8_ix, m68k_op_slt_8_ix, m68k_op_slt_8_ix, m68k_op_slt_8_ix, m68k_op_slt_8_ix, m68k_op_slt_8_ix, - m68k_op_slt_8_aw, m68k_op_slt_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, m68k_op_addq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, m68k_op_addq_8_ai, - m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi, m68k_op_addq_8_pi7, - m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd, m68k_op_addq_8_pd7, - m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, m68k_op_addq_8_di, - m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, m68k_op_addq_8_ix, - m68k_op_addq_8_aw, m68k_op_addq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, m68k_op_addq_16_d, - m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, m68k_op_addq_16_a, - m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, m68k_op_addq_16_ai, - m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, m68k_op_addq_16_pi, - m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, m68k_op_addq_16_pd, - m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, m68k_op_addq_16_di, - m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, m68k_op_addq_16_ix, - m68k_op_addq_16_aw, m68k_op_addq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, m68k_op_addq_32_d, - m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, m68k_op_addq_32_a, - m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, m68k_op_addq_32_ai, - m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, m68k_op_addq_32_pi, - m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, m68k_op_addq_32_pd, - m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, m68k_op_addq_32_di, - m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, m68k_op_addq_32_ix, - m68k_op_addq_32_aw, m68k_op_addq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sgt_8_d, m68k_op_sgt_8_d, m68k_op_sgt_8_d, m68k_op_sgt_8_d, m68k_op_sgt_8_d, m68k_op_sgt_8_d, m68k_op_sgt_8_d, m68k_op_sgt_8_d, - m68k_op_dbgt_16, m68k_op_dbgt_16, m68k_op_dbgt_16, m68k_op_dbgt_16, m68k_op_dbgt_16, m68k_op_dbgt_16, m68k_op_dbgt_16, m68k_op_dbgt_16, - m68k_op_sgt_8_ai, m68k_op_sgt_8_ai, m68k_op_sgt_8_ai, m68k_op_sgt_8_ai, m68k_op_sgt_8_ai, m68k_op_sgt_8_ai, m68k_op_sgt_8_ai, m68k_op_sgt_8_ai, - m68k_op_sgt_8_pi, m68k_op_sgt_8_pi, m68k_op_sgt_8_pi, m68k_op_sgt_8_pi, m68k_op_sgt_8_pi, m68k_op_sgt_8_pi, m68k_op_sgt_8_pi, m68k_op_sgt_8_pi7, - m68k_op_sgt_8_pd, m68k_op_sgt_8_pd, m68k_op_sgt_8_pd, m68k_op_sgt_8_pd, m68k_op_sgt_8_pd, m68k_op_sgt_8_pd, m68k_op_sgt_8_pd, m68k_op_sgt_8_pd7, - m68k_op_sgt_8_di, m68k_op_sgt_8_di, m68k_op_sgt_8_di, m68k_op_sgt_8_di, m68k_op_sgt_8_di, m68k_op_sgt_8_di, m68k_op_sgt_8_di, m68k_op_sgt_8_di, - m68k_op_sgt_8_ix, m68k_op_sgt_8_ix, m68k_op_sgt_8_ix, m68k_op_sgt_8_ix, m68k_op_sgt_8_ix, m68k_op_sgt_8_ix, m68k_op_sgt_8_ix, m68k_op_sgt_8_ix, - m68k_op_sgt_8_aw, m68k_op_sgt_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, m68k_op_subq_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, m68k_op_subq_8_ai, - m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi, m68k_op_subq_8_pi7, - m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd, m68k_op_subq_8_pd7, - m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, m68k_op_subq_8_di, - m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, m68k_op_subq_8_ix, - m68k_op_subq_8_aw, m68k_op_subq_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, m68k_op_subq_16_d, - m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, m68k_op_subq_16_a, - m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, m68k_op_subq_16_ai, - m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, m68k_op_subq_16_pi, - m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, m68k_op_subq_16_pd, - m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, m68k_op_subq_16_di, - m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, m68k_op_subq_16_ix, - m68k_op_subq_16_aw, m68k_op_subq_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, m68k_op_subq_32_d, - m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, m68k_op_subq_32_a, - m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, m68k_op_subq_32_ai, - m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, m68k_op_subq_32_pi, - m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, m68k_op_subq_32_pd, - m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, m68k_op_subq_32_di, - m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, m68k_op_subq_32_ix, - m68k_op_subq_32_aw, m68k_op_subq_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sle_8_d, m68k_op_sle_8_d, m68k_op_sle_8_d, m68k_op_sle_8_d, m68k_op_sle_8_d, m68k_op_sle_8_d, m68k_op_sle_8_d, m68k_op_sle_8_d, - m68k_op_dble_16, m68k_op_dble_16, m68k_op_dble_16, m68k_op_dble_16, m68k_op_dble_16, m68k_op_dble_16, m68k_op_dble_16, m68k_op_dble_16, - m68k_op_sle_8_ai, m68k_op_sle_8_ai, m68k_op_sle_8_ai, m68k_op_sle_8_ai, m68k_op_sle_8_ai, m68k_op_sle_8_ai, m68k_op_sle_8_ai, m68k_op_sle_8_ai, - m68k_op_sle_8_pi, m68k_op_sle_8_pi, m68k_op_sle_8_pi, m68k_op_sle_8_pi, m68k_op_sle_8_pi, m68k_op_sle_8_pi, m68k_op_sle_8_pi, m68k_op_sle_8_pi7, - m68k_op_sle_8_pd, m68k_op_sle_8_pd, m68k_op_sle_8_pd, m68k_op_sle_8_pd, m68k_op_sle_8_pd, m68k_op_sle_8_pd, m68k_op_sle_8_pd, m68k_op_sle_8_pd7, - m68k_op_sle_8_di, m68k_op_sle_8_di, m68k_op_sle_8_di, m68k_op_sle_8_di, m68k_op_sle_8_di, m68k_op_sle_8_di, m68k_op_sle_8_di, m68k_op_sle_8_di, - m68k_op_sle_8_ix, m68k_op_sle_8_ix, m68k_op_sle_8_ix, m68k_op_sle_8_ix, m68k_op_sle_8_ix, m68k_op_sle_8_ix, m68k_op_sle_8_ix, m68k_op_sle_8_ix, - m68k_op_sle_8_aw, m68k_op_sle_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_bra_16, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, - m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_8, m68k_op_bra_32, - m68k_op_bsr_16, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, - m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_8, m68k_op_bsr_32, - m68k_op_bhi_16, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, - m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_8, m68k_op_bhi_32, - m68k_op_bls_16, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, - m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_8, m68k_op_bls_32, - m68k_op_bcc_16, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, - m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_8, m68k_op_bcc_32, - m68k_op_bcs_16, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, - m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_8, m68k_op_bcs_32, - m68k_op_bne_16, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, - m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_8, m68k_op_bne_32, - m68k_op_beq_16, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, - m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_8, m68k_op_beq_32, - m68k_op_bvc_16, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, - m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_8, m68k_op_bvc_32, - m68k_op_bvs_16, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, - m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_8, m68k_op_bvs_32, - m68k_op_bpl_16, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, - m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_8, m68k_op_bpl_32, - m68k_op_bmi_16, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, - m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_8, m68k_op_bmi_32, - m68k_op_bge_16, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, - m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_8, m68k_op_bge_32, - m68k_op_blt_16, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, - m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_8, m68k_op_blt_32, - m68k_op_bgt_16, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, - m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_8, m68k_op_bgt_32, - m68k_op_ble_16, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, - m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_8, m68k_op_ble_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, m68k_op_moveq_32, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm_ay7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm_ay7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm_ay7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm_ay7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm_ay7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm_ay7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm, m68k_op_sbcd_8_mm_ay7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, m68k_op_or_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, m68k_op_or_8_er_ai, - m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi, m68k_op_or_8_er_pi7, - m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd, m68k_op_or_8_er_pd7, - m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, m68k_op_or_8_er_di, - m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, m68k_op_or_8_er_ix, - m68k_op_or_8_er_aw, m68k_op_or_8_er_al, m68k_op_or_8_er_pcdi, m68k_op_or_8_er_pcix, m68k_op_or_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, m68k_op_or_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, m68k_op_or_16_er_ai, - m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, m68k_op_or_16_er_pi, - m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, m68k_op_or_16_er_pd, - m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, m68k_op_or_16_er_di, - m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, m68k_op_or_16_er_ix, - m68k_op_or_16_er_aw, m68k_op_or_16_er_al, m68k_op_or_16_er_pcdi, m68k_op_or_16_er_pcix, m68k_op_or_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, m68k_op_or_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, m68k_op_or_32_er_ai, - m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, m68k_op_or_32_er_pi, - m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, m68k_op_or_32_er_pd, - m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, m68k_op_or_32_er_di, - m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, m68k_op_or_32_er_ix, - m68k_op_or_32_er_aw, m68k_op_or_32_er_al, m68k_op_or_32_er_pcdi, m68k_op_or_32_er_pcix, m68k_op_or_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, m68k_op_divu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, m68k_op_divu_16_ai, - m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, m68k_op_divu_16_pi, - m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, m68k_op_divu_16_pd, - m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, m68k_op_divu_16_di, - m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, m68k_op_divu_16_ix, - m68k_op_divu_16_aw, m68k_op_divu_16_al, m68k_op_divu_16_pcdi, m68k_op_divu_16_pcix, m68k_op_divu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, m68k_op_sbcd_8_rr, - m68k_op_sbcd_8_mm_ax7, m68k_op_sbcd_8_mm_ax7, m68k_op_sbcd_8_mm_ax7, m68k_op_sbcd_8_mm_ax7, m68k_op_sbcd_8_mm_ax7, m68k_op_sbcd_8_mm_ax7, m68k_op_sbcd_8_mm_ax7, m68k_op_sbcd_8_mm_axy7, - m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, m68k_op_or_8_re_ai, - m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi, m68k_op_or_8_re_pi7, - m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd, m68k_op_or_8_re_pd7, - m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, m68k_op_or_8_re_di, - m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, m68k_op_or_8_re_ix, - m68k_op_or_8_re_aw, m68k_op_or_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, m68k_op_or_16_re_ai, - m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, m68k_op_or_16_re_pi, - m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, m68k_op_or_16_re_pd, - m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, m68k_op_or_16_re_di, - m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, m68k_op_or_16_re_ix, - m68k_op_or_16_re_aw, m68k_op_or_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, m68k_op_or_32_re_ai, - m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, m68k_op_or_32_re_pi, - m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, m68k_op_or_32_re_pd, - m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, m68k_op_or_32_re_di, - m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, m68k_op_or_32_re_ix, - m68k_op_or_32_re_aw, m68k_op_or_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, m68k_op_divs_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, m68k_op_divs_16_ai, - m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, m68k_op_divs_16_pi, - m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, m68k_op_divs_16_pd, - m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, m68k_op_divs_16_di, - m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, m68k_op_divs_16_ix, - m68k_op_divs_16_aw, m68k_op_divs_16_al, m68k_op_divs_16_pcdi, m68k_op_divs_16_pcix, m68k_op_divs_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm_ay7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm_ay7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm_ay7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm_ay7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm_ay7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm_ay7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm, m68k_op_subx_8_mm_ay7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, m68k_op_sub_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, m68k_op_sub_8_er_ai, - m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi, m68k_op_sub_8_er_pi7, - m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd, m68k_op_sub_8_er_pd7, - m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, m68k_op_sub_8_er_di, - m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, m68k_op_sub_8_er_ix, - m68k_op_sub_8_er_aw, m68k_op_sub_8_er_al, m68k_op_sub_8_er_pcdi, m68k_op_sub_8_er_pcix, m68k_op_sub_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, m68k_op_sub_16_er_d, - m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, m68k_op_sub_16_er_a, - m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, m68k_op_sub_16_er_ai, - m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, m68k_op_sub_16_er_pi, - m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, m68k_op_sub_16_er_pd, - m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, m68k_op_sub_16_er_di, - m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, m68k_op_sub_16_er_ix, - m68k_op_sub_16_er_aw, m68k_op_sub_16_er_al, m68k_op_sub_16_er_pcdi, m68k_op_sub_16_er_pcix, m68k_op_sub_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, m68k_op_sub_32_er_d, - m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, m68k_op_sub_32_er_a, - m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, m68k_op_sub_32_er_ai, - m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, m68k_op_sub_32_er_pi, - m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, m68k_op_sub_32_er_pd, - m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, m68k_op_sub_32_er_di, - m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, m68k_op_sub_32_er_ix, - m68k_op_sub_32_er_aw, m68k_op_sub_32_er_al, m68k_op_sub_32_er_pcdi, m68k_op_sub_32_er_pcix, m68k_op_sub_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, m68k_op_suba_16_d, - m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, m68k_op_suba_16_a, - m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, m68k_op_suba_16_ai, - m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, m68k_op_suba_16_pi, - m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, m68k_op_suba_16_pd, - m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, m68k_op_suba_16_di, - m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, m68k_op_suba_16_ix, - m68k_op_suba_16_aw, m68k_op_suba_16_al, m68k_op_suba_16_pcdi, m68k_op_suba_16_pcix, m68k_op_suba_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, m68k_op_subx_8_rr, - m68k_op_subx_8_mm_ax7, m68k_op_subx_8_mm_ax7, m68k_op_subx_8_mm_ax7, m68k_op_subx_8_mm_ax7, m68k_op_subx_8_mm_ax7, m68k_op_subx_8_mm_ax7, m68k_op_subx_8_mm_ax7, m68k_op_subx_8_mm_axy7, - m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, m68k_op_sub_8_re_ai, - m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi, m68k_op_sub_8_re_pi7, - m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd, m68k_op_sub_8_re_pd7, - m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, m68k_op_sub_8_re_di, - m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, m68k_op_sub_8_re_ix, - m68k_op_sub_8_re_aw, m68k_op_sub_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, m68k_op_subx_16_rr, - m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, m68k_op_subx_16_mm, - m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, m68k_op_sub_16_re_ai, - m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, m68k_op_sub_16_re_pi, - m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, m68k_op_sub_16_re_pd, - m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, m68k_op_sub_16_re_di, - m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, m68k_op_sub_16_re_ix, - m68k_op_sub_16_re_aw, m68k_op_sub_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, m68k_op_subx_32_rr, - m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, m68k_op_subx_32_mm, - m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, m68k_op_sub_32_re_ai, - m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, m68k_op_sub_32_re_pi, - m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, m68k_op_sub_32_re_pd, - m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, m68k_op_sub_32_re_di, - m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, m68k_op_sub_32_re_ix, - m68k_op_sub_32_re_aw, m68k_op_sub_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, m68k_op_suba_32_d, - m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, m68k_op_suba_32_a, - m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, m68k_op_suba_32_ai, - m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, m68k_op_suba_32_pi, - m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, m68k_op_suba_32_pd, - m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, m68k_op_suba_32_di, - m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, m68k_op_suba_32_ix, - m68k_op_suba_32_aw, m68k_op_suba_32_al, m68k_op_suba_32_pcdi, m68k_op_suba_32_pcix, m68k_op_suba_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, m68k_op_1010, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8_ay7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8_ay7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8_ay7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8_ay7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8_ay7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8_ay7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8, m68k_op_cmpm_8_ay7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, m68k_op_cmp_8_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, m68k_op_cmp_8_ai, - m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi, m68k_op_cmp_8_pi7, - m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd, m68k_op_cmp_8_pd7, - m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, m68k_op_cmp_8_di, - m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, m68k_op_cmp_8_ix, - m68k_op_cmp_8_aw, m68k_op_cmp_8_al, m68k_op_cmp_8_pcdi, m68k_op_cmp_8_pcix, m68k_op_cmp_8_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, m68k_op_cmp_16_d, - m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, m68k_op_cmp_16_a, - m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, m68k_op_cmp_16_ai, - m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, m68k_op_cmp_16_pi, - m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, m68k_op_cmp_16_pd, - m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, m68k_op_cmp_16_di, - m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, m68k_op_cmp_16_ix, - m68k_op_cmp_16_aw, m68k_op_cmp_16_al, m68k_op_cmp_16_pcdi, m68k_op_cmp_16_pcix, m68k_op_cmp_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, m68k_op_cmp_32_d, - m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, m68k_op_cmp_32_a, - m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, m68k_op_cmp_32_ai, - m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, m68k_op_cmp_32_pi, - m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, m68k_op_cmp_32_pd, - m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, m68k_op_cmp_32_di, - m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, m68k_op_cmp_32_ix, - m68k_op_cmp_32_aw, m68k_op_cmp_32_al, m68k_op_cmp_32_pcdi, m68k_op_cmp_32_pcix, m68k_op_cmp_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, m68k_op_cmpa_16_d, - m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, m68k_op_cmpa_16_a, - m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, m68k_op_cmpa_16_ai, - m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, m68k_op_cmpa_16_pi, - m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, m68k_op_cmpa_16_pd, - m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, m68k_op_cmpa_16_di, - m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, m68k_op_cmpa_16_ix, - m68k_op_cmpa_16_aw, m68k_op_cmpa_16_al, m68k_op_cmpa_16_pcdi, m68k_op_cmpa_16_pcix, m68k_op_cmpa_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, m68k_op_eor_8_d, - m68k_op_cmpm_8_ax7, m68k_op_cmpm_8_ax7, m68k_op_cmpm_8_ax7, m68k_op_cmpm_8_ax7, m68k_op_cmpm_8_ax7, m68k_op_cmpm_8_ax7, m68k_op_cmpm_8_ax7, m68k_op_cmpm_8_axy7, - m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, m68k_op_eor_8_ai, - m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi, m68k_op_eor_8_pi7, - m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd, m68k_op_eor_8_pd7, - m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, m68k_op_eor_8_di, - m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, m68k_op_eor_8_ix, - m68k_op_eor_8_aw, m68k_op_eor_8_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, m68k_op_eor_16_d, - m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, m68k_op_cmpm_16, - m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, m68k_op_eor_16_ai, - m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, m68k_op_eor_16_pi, - m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, m68k_op_eor_16_pd, - m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, m68k_op_eor_16_di, - m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, m68k_op_eor_16_ix, - m68k_op_eor_16_aw, m68k_op_eor_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, m68k_op_eor_32_d, - m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, m68k_op_cmpm_32, - m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, m68k_op_eor_32_ai, - m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, m68k_op_eor_32_pi, - m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, m68k_op_eor_32_pd, - m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, m68k_op_eor_32_di, - m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, m68k_op_eor_32_ix, - m68k_op_eor_32_aw, m68k_op_eor_32_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, m68k_op_cmpa_32_d, - m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, m68k_op_cmpa_32_a, - m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, m68k_op_cmpa_32_ai, - m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, m68k_op_cmpa_32_pi, - m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, m68k_op_cmpa_32_pd, - m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, m68k_op_cmpa_32_di, - m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, m68k_op_cmpa_32_ix, - m68k_op_cmpa_32_aw, m68k_op_cmpa_32_al, m68k_op_cmpa_32_pcdi, m68k_op_cmpa_32_pcix, m68k_op_cmpa_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm_ay7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm_ay7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm_ay7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm_ay7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm_ay7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm_ay7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm, m68k_op_abcd_8_mm_ay7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, m68k_op_and_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, m68k_op_and_8_er_ai, - m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi, m68k_op_and_8_er_pi7, - m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd, m68k_op_and_8_er_pd7, - m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, m68k_op_and_8_er_di, - m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, m68k_op_and_8_er_ix, - m68k_op_and_8_er_aw, m68k_op_and_8_er_al, m68k_op_and_8_er_pcdi, m68k_op_and_8_er_pcix, m68k_op_and_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, m68k_op_and_16_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, m68k_op_and_16_er_ai, - m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, m68k_op_and_16_er_pi, - m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, m68k_op_and_16_er_pd, - m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, m68k_op_and_16_er_di, - m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, m68k_op_and_16_er_ix, - m68k_op_and_16_er_aw, m68k_op_and_16_er_al, m68k_op_and_16_er_pcdi, m68k_op_and_16_er_pcix, m68k_op_and_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, m68k_op_and_32_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, m68k_op_and_32_er_ai, - m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, m68k_op_and_32_er_pi, - m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, m68k_op_and_32_er_pd, - m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, m68k_op_and_32_er_di, - m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, m68k_op_and_32_er_ix, - m68k_op_and_32_er_aw, m68k_op_and_32_er_al, m68k_op_and_32_er_pcdi, m68k_op_and_32_er_pcix, m68k_op_and_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, m68k_op_mulu_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, m68k_op_mulu_16_ai, - m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, m68k_op_mulu_16_pi, - m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, m68k_op_mulu_16_pd, - m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, m68k_op_mulu_16_di, - m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, m68k_op_mulu_16_ix, - m68k_op_mulu_16_aw, m68k_op_mulu_16_al, m68k_op_mulu_16_pcdi, m68k_op_mulu_16_pcix, m68k_op_mulu_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, m68k_op_abcd_8_rr, - m68k_op_abcd_8_mm_ax7, m68k_op_abcd_8_mm_ax7, m68k_op_abcd_8_mm_ax7, m68k_op_abcd_8_mm_ax7, m68k_op_abcd_8_mm_ax7, m68k_op_abcd_8_mm_ax7, m68k_op_abcd_8_mm_ax7, m68k_op_abcd_8_mm_axy7, - m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, m68k_op_and_8_re_ai, - m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi, m68k_op_and_8_re_pi7, - m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd, m68k_op_and_8_re_pd7, - m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, m68k_op_and_8_re_di, - m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, m68k_op_and_8_re_ix, - m68k_op_and_8_re_aw, m68k_op_and_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, m68k_op_exg_32_dd, - m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, m68k_op_exg_32_aa, - m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, m68k_op_and_16_re_ai, - m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, m68k_op_and_16_re_pi, - m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, m68k_op_and_16_re_pd, - m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, m68k_op_and_16_re_di, - m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, m68k_op_and_16_re_ix, - m68k_op_and_16_re_aw, m68k_op_and_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, m68k_op_exg_32_da, - m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, m68k_op_and_32_re_ai, - m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, m68k_op_and_32_re_pi, - m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, m68k_op_and_32_re_pd, - m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, m68k_op_and_32_re_di, - m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, m68k_op_and_32_re_ix, - m68k_op_and_32_re_aw, m68k_op_and_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, m68k_op_muls_16_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, m68k_op_muls_16_ai, - m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, m68k_op_muls_16_pi, - m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, m68k_op_muls_16_pd, - m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, m68k_op_muls_16_di, - m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, m68k_op_muls_16_ix, - m68k_op_muls_16_aw, m68k_op_muls_16_al, m68k_op_muls_16_pcdi, m68k_op_muls_16_pcix, m68k_op_muls_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm_ay7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm_ay7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm_ay7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm_ay7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm_ay7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm_ay7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm, m68k_op_addx_8_mm_ay7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, m68k_op_add_8_er_d, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, m68k_op_add_8_er_ai, - m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi, m68k_op_add_8_er_pi7, - m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd, m68k_op_add_8_er_pd7, - m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, m68k_op_add_8_er_di, - m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, m68k_op_add_8_er_ix, - m68k_op_add_8_er_aw, m68k_op_add_8_er_al, m68k_op_add_8_er_pcdi, m68k_op_add_8_er_pcix, m68k_op_add_8_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, m68k_op_add_16_er_d, - m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, m68k_op_add_16_er_a, - m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, m68k_op_add_16_er_ai, - m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, m68k_op_add_16_er_pi, - m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, m68k_op_add_16_er_pd, - m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, m68k_op_add_16_er_di, - m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, m68k_op_add_16_er_ix, - m68k_op_add_16_er_aw, m68k_op_add_16_er_al, m68k_op_add_16_er_pcdi, m68k_op_add_16_er_pcix, m68k_op_add_16_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, m68k_op_add_32_er_d, - m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, m68k_op_add_32_er_a, - m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, m68k_op_add_32_er_ai, - m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, m68k_op_add_32_er_pi, - m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, m68k_op_add_32_er_pd, - m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, m68k_op_add_32_er_di, - m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, m68k_op_add_32_er_ix, - m68k_op_add_32_er_aw, m68k_op_add_32_er_al, m68k_op_add_32_er_pcdi, m68k_op_add_32_er_pcix, m68k_op_add_32_er_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, m68k_op_adda_16_d, - m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, m68k_op_adda_16_a, - m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, m68k_op_adda_16_ai, - m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, m68k_op_adda_16_pi, - m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, m68k_op_adda_16_pd, - m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, m68k_op_adda_16_di, - m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, m68k_op_adda_16_ix, - m68k_op_adda_16_aw, m68k_op_adda_16_al, m68k_op_adda_16_pcdi, m68k_op_adda_16_pcix, m68k_op_adda_16_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, m68k_op_addx_8_rr, - m68k_op_addx_8_mm_ax7, m68k_op_addx_8_mm_ax7, m68k_op_addx_8_mm_ax7, m68k_op_addx_8_mm_ax7, m68k_op_addx_8_mm_ax7, m68k_op_addx_8_mm_ax7, m68k_op_addx_8_mm_ax7, m68k_op_addx_8_mm_axy7, - m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, m68k_op_add_8_re_ai, - m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi, m68k_op_add_8_re_pi7, - m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd, m68k_op_add_8_re_pd7, - m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, m68k_op_add_8_re_di, - m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, m68k_op_add_8_re_ix, - m68k_op_add_8_re_aw, m68k_op_add_8_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, m68k_op_addx_16_rr, - m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, m68k_op_addx_16_mm, - m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, m68k_op_add_16_re_ai, - m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, m68k_op_add_16_re_pi, - m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, m68k_op_add_16_re_pd, - m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, m68k_op_add_16_re_di, - m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, m68k_op_add_16_re_ix, - m68k_op_add_16_re_aw, m68k_op_add_16_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, m68k_op_addx_32_rr, - m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, m68k_op_addx_32_mm, - m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, m68k_op_add_32_re_ai, - m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, m68k_op_add_32_re_pi, - m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, m68k_op_add_32_re_pd, - m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, m68k_op_add_32_re_di, - m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, m68k_op_add_32_re_ix, - m68k_op_add_32_re_aw, m68k_op_add_32_re_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, m68k_op_adda_32_d, - m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, m68k_op_adda_32_a, - m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, m68k_op_adda_32_ai, - m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, m68k_op_adda_32_pi, - m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, m68k_op_adda_32_pd, - m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, m68k_op_adda_32_di, - m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, m68k_op_adda_32_ix, - m68k_op_adda_32_aw, m68k_op_adda_32_al, m68k_op_adda_32_pcdi, m68k_op_adda_32_pcix, m68k_op_adda_32_i, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_16_ai, m68k_op_asr_16_ai, m68k_op_asr_16_ai, m68k_op_asr_16_ai, m68k_op_asr_16_ai, m68k_op_asr_16_ai, m68k_op_asr_16_ai, m68k_op_asr_16_ai, - m68k_op_asr_16_pi, m68k_op_asr_16_pi, m68k_op_asr_16_pi, m68k_op_asr_16_pi, m68k_op_asr_16_pi, m68k_op_asr_16_pi, m68k_op_asr_16_pi, m68k_op_asr_16_pi, - m68k_op_asr_16_pd, m68k_op_asr_16_pd, m68k_op_asr_16_pd, m68k_op_asr_16_pd, m68k_op_asr_16_pd, m68k_op_asr_16_pd, m68k_op_asr_16_pd, m68k_op_asr_16_pd, - m68k_op_asr_16_di, m68k_op_asr_16_di, m68k_op_asr_16_di, m68k_op_asr_16_di, m68k_op_asr_16_di, m68k_op_asr_16_di, m68k_op_asr_16_di, m68k_op_asr_16_di, - m68k_op_asr_16_ix, m68k_op_asr_16_ix, m68k_op_asr_16_ix, m68k_op_asr_16_ix, m68k_op_asr_16_ix, m68k_op_asr_16_ix, m68k_op_asr_16_ix, m68k_op_asr_16_ix, - m68k_op_asr_16_aw, m68k_op_asr_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_16_ai, m68k_op_asl_16_ai, m68k_op_asl_16_ai, m68k_op_asl_16_ai, m68k_op_asl_16_ai, m68k_op_asl_16_ai, m68k_op_asl_16_ai, m68k_op_asl_16_ai, - m68k_op_asl_16_pi, m68k_op_asl_16_pi, m68k_op_asl_16_pi, m68k_op_asl_16_pi, m68k_op_asl_16_pi, m68k_op_asl_16_pi, m68k_op_asl_16_pi, m68k_op_asl_16_pi, - m68k_op_asl_16_pd, m68k_op_asl_16_pd, m68k_op_asl_16_pd, m68k_op_asl_16_pd, m68k_op_asl_16_pd, m68k_op_asl_16_pd, m68k_op_asl_16_pd, m68k_op_asl_16_pd, - m68k_op_asl_16_di, m68k_op_asl_16_di, m68k_op_asl_16_di, m68k_op_asl_16_di, m68k_op_asl_16_di, m68k_op_asl_16_di, m68k_op_asl_16_di, m68k_op_asl_16_di, - m68k_op_asl_16_ix, m68k_op_asl_16_ix, m68k_op_asl_16_ix, m68k_op_asl_16_ix, m68k_op_asl_16_ix, m68k_op_asl_16_ix, m68k_op_asl_16_ix, m68k_op_asl_16_ix, - m68k_op_asl_16_aw, m68k_op_asl_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lsr_16_ai, m68k_op_lsr_16_ai, m68k_op_lsr_16_ai, m68k_op_lsr_16_ai, m68k_op_lsr_16_ai, m68k_op_lsr_16_ai, m68k_op_lsr_16_ai, m68k_op_lsr_16_ai, - m68k_op_lsr_16_pi, m68k_op_lsr_16_pi, m68k_op_lsr_16_pi, m68k_op_lsr_16_pi, m68k_op_lsr_16_pi, m68k_op_lsr_16_pi, m68k_op_lsr_16_pi, m68k_op_lsr_16_pi, - m68k_op_lsr_16_pd, m68k_op_lsr_16_pd, m68k_op_lsr_16_pd, m68k_op_lsr_16_pd, m68k_op_lsr_16_pd, m68k_op_lsr_16_pd, m68k_op_lsr_16_pd, m68k_op_lsr_16_pd, - m68k_op_lsr_16_di, m68k_op_lsr_16_di, m68k_op_lsr_16_di, m68k_op_lsr_16_di, m68k_op_lsr_16_di, m68k_op_lsr_16_di, m68k_op_lsr_16_di, m68k_op_lsr_16_di, - m68k_op_lsr_16_ix, m68k_op_lsr_16_ix, m68k_op_lsr_16_ix, m68k_op_lsr_16_ix, m68k_op_lsr_16_ix, m68k_op_lsr_16_ix, m68k_op_lsr_16_ix, m68k_op_lsr_16_ix, - m68k_op_lsr_16_aw, m68k_op_lsr_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_lsl_16_ai, m68k_op_lsl_16_ai, m68k_op_lsl_16_ai, m68k_op_lsl_16_ai, m68k_op_lsl_16_ai, m68k_op_lsl_16_ai, m68k_op_lsl_16_ai, m68k_op_lsl_16_ai, - m68k_op_lsl_16_pi, m68k_op_lsl_16_pi, m68k_op_lsl_16_pi, m68k_op_lsl_16_pi, m68k_op_lsl_16_pi, m68k_op_lsl_16_pi, m68k_op_lsl_16_pi, m68k_op_lsl_16_pi, - m68k_op_lsl_16_pd, m68k_op_lsl_16_pd, m68k_op_lsl_16_pd, m68k_op_lsl_16_pd, m68k_op_lsl_16_pd, m68k_op_lsl_16_pd, m68k_op_lsl_16_pd, m68k_op_lsl_16_pd, - m68k_op_lsl_16_di, m68k_op_lsl_16_di, m68k_op_lsl_16_di, m68k_op_lsl_16_di, m68k_op_lsl_16_di, m68k_op_lsl_16_di, m68k_op_lsl_16_di, m68k_op_lsl_16_di, - m68k_op_lsl_16_ix, m68k_op_lsl_16_ix, m68k_op_lsl_16_ix, m68k_op_lsl_16_ix, m68k_op_lsl_16_ix, m68k_op_lsl_16_ix, m68k_op_lsl_16_ix, m68k_op_lsl_16_ix, - m68k_op_lsl_16_aw, m68k_op_lsl_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_roxr_16_ai, m68k_op_roxr_16_ai, m68k_op_roxr_16_ai, m68k_op_roxr_16_ai, m68k_op_roxr_16_ai, m68k_op_roxr_16_ai, m68k_op_roxr_16_ai, m68k_op_roxr_16_ai, - m68k_op_roxr_16_pi, m68k_op_roxr_16_pi, m68k_op_roxr_16_pi, m68k_op_roxr_16_pi, m68k_op_roxr_16_pi, m68k_op_roxr_16_pi, m68k_op_roxr_16_pi, m68k_op_roxr_16_pi, - m68k_op_roxr_16_pd, m68k_op_roxr_16_pd, m68k_op_roxr_16_pd, m68k_op_roxr_16_pd, m68k_op_roxr_16_pd, m68k_op_roxr_16_pd, m68k_op_roxr_16_pd, m68k_op_roxr_16_pd, - m68k_op_roxr_16_di, m68k_op_roxr_16_di, m68k_op_roxr_16_di, m68k_op_roxr_16_di, m68k_op_roxr_16_di, m68k_op_roxr_16_di, m68k_op_roxr_16_di, m68k_op_roxr_16_di, - m68k_op_roxr_16_ix, m68k_op_roxr_16_ix, m68k_op_roxr_16_ix, m68k_op_roxr_16_ix, m68k_op_roxr_16_ix, m68k_op_roxr_16_ix, m68k_op_roxr_16_ix, m68k_op_roxr_16_ix, - m68k_op_roxr_16_aw, m68k_op_roxr_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_roxl_16_ai, m68k_op_roxl_16_ai, m68k_op_roxl_16_ai, m68k_op_roxl_16_ai, m68k_op_roxl_16_ai, m68k_op_roxl_16_ai, m68k_op_roxl_16_ai, m68k_op_roxl_16_ai, - m68k_op_roxl_16_pi, m68k_op_roxl_16_pi, m68k_op_roxl_16_pi, m68k_op_roxl_16_pi, m68k_op_roxl_16_pi, m68k_op_roxl_16_pi, m68k_op_roxl_16_pi, m68k_op_roxl_16_pi, - m68k_op_roxl_16_pd, m68k_op_roxl_16_pd, m68k_op_roxl_16_pd, m68k_op_roxl_16_pd, m68k_op_roxl_16_pd, m68k_op_roxl_16_pd, m68k_op_roxl_16_pd, m68k_op_roxl_16_pd, - m68k_op_roxl_16_di, m68k_op_roxl_16_di, m68k_op_roxl_16_di, m68k_op_roxl_16_di, m68k_op_roxl_16_di, m68k_op_roxl_16_di, m68k_op_roxl_16_di, m68k_op_roxl_16_di, - m68k_op_roxl_16_ix, m68k_op_roxl_16_ix, m68k_op_roxl_16_ix, m68k_op_roxl_16_ix, m68k_op_roxl_16_ix, m68k_op_roxl_16_ix, m68k_op_roxl_16_ix, m68k_op_roxl_16_ix, - m68k_op_roxl_16_aw, m68k_op_roxl_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_ror_16_ai, m68k_op_ror_16_ai, m68k_op_ror_16_ai, m68k_op_ror_16_ai, m68k_op_ror_16_ai, m68k_op_ror_16_ai, m68k_op_ror_16_ai, m68k_op_ror_16_ai, - m68k_op_ror_16_pi, m68k_op_ror_16_pi, m68k_op_ror_16_pi, m68k_op_ror_16_pi, m68k_op_ror_16_pi, m68k_op_ror_16_pi, m68k_op_ror_16_pi, m68k_op_ror_16_pi, - m68k_op_ror_16_pd, m68k_op_ror_16_pd, m68k_op_ror_16_pd, m68k_op_ror_16_pd, m68k_op_ror_16_pd, m68k_op_ror_16_pd, m68k_op_ror_16_pd, m68k_op_ror_16_pd, - m68k_op_ror_16_di, m68k_op_ror_16_di, m68k_op_ror_16_di, m68k_op_ror_16_di, m68k_op_ror_16_di, m68k_op_ror_16_di, m68k_op_ror_16_di, m68k_op_ror_16_di, - m68k_op_ror_16_ix, m68k_op_ror_16_ix, m68k_op_ror_16_ix, m68k_op_ror_16_ix, m68k_op_ror_16_ix, m68k_op_ror_16_ix, m68k_op_ror_16_ix, m68k_op_ror_16_ix, - m68k_op_ror_16_aw, m68k_op_ror_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_rol_16_ai, m68k_op_rol_16_ai, m68k_op_rol_16_ai, m68k_op_rol_16_ai, m68k_op_rol_16_ai, m68k_op_rol_16_ai, m68k_op_rol_16_ai, m68k_op_rol_16_ai, - m68k_op_rol_16_pi, m68k_op_rol_16_pi, m68k_op_rol_16_pi, m68k_op_rol_16_pi, m68k_op_rol_16_pi, m68k_op_rol_16_pi, m68k_op_rol_16_pi, m68k_op_rol_16_pi, - m68k_op_rol_16_pd, m68k_op_rol_16_pd, m68k_op_rol_16_pd, m68k_op_rol_16_pd, m68k_op_rol_16_pd, m68k_op_rol_16_pd, m68k_op_rol_16_pd, m68k_op_rol_16_pd, - m68k_op_rol_16_di, m68k_op_rol_16_di, m68k_op_rol_16_di, m68k_op_rol_16_di, m68k_op_rol_16_di, m68k_op_rol_16_di, m68k_op_rol_16_di, m68k_op_rol_16_di, - m68k_op_rol_16_ix, m68k_op_rol_16_ix, m68k_op_rol_16_ix, m68k_op_rol_16_ix, m68k_op_rol_16_ix, m68k_op_rol_16_ix, m68k_op_rol_16_ix, m68k_op_rol_16_ix, - m68k_op_rol_16_aw, m68k_op_rol_16_al, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, m68k_op_asr_8_s, - m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, m68k_op_lsr_8_s, - m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, m68k_op_roxr_8_s, - m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, m68k_op_ror_8_s, - m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, m68k_op_asr_8_r, - m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, m68k_op_lsr_8_r, - m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, m68k_op_roxr_8_r, - m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, m68k_op_ror_8_r, - m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, m68k_op_asr_16_s, - m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, m68k_op_lsr_16_s, - m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, m68k_op_roxr_16_s, - m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, m68k_op_ror_16_s, - m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, m68k_op_asr_16_r, - m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, m68k_op_lsr_16_r, - m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, m68k_op_roxr_16_r, - m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, m68k_op_ror_16_r, - m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, m68k_op_asr_32_s, - m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, m68k_op_lsr_32_s, - m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, m68k_op_roxr_32_s, - m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, m68k_op_ror_32_s, - m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, m68k_op_asr_32_r, - m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, m68k_op_lsr_32_r, - m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, m68k_op_roxr_32_r, - m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, m68k_op_ror_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, m68k_op_asl_8_s, - m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, m68k_op_lsl_8_s, - m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, m68k_op_roxl_8_s, - m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, m68k_op_rol_8_s, - m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, m68k_op_asl_8_r, - m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, m68k_op_lsl_8_r, - m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, m68k_op_roxl_8_r, - m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, m68k_op_rol_8_r, - m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, m68k_op_asl_16_s, - m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, m68k_op_lsl_16_s, - m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, m68k_op_roxl_16_s, - m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, m68k_op_rol_16_s, - m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, m68k_op_asl_16_r, - m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, m68k_op_lsl_16_r, - m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, m68k_op_roxl_16_r, - m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, m68k_op_rol_16_r, - m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, m68k_op_asl_32_s, - m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, m68k_op_lsl_32_s, - m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, m68k_op_roxl_32_s, - m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, m68k_op_rol_32_s, - m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, m68k_op_asl_32_r, - m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, m68k_op_lsl_32_r, - m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, m68k_op_roxl_32_r, - m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, m68k_op_rol_32_r, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, m68k_op_illegal, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, - m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, m68k_op_1111, -}; diff --git a/waterbox/gpgx/core/m68k/m68kops.h b/waterbox/gpgx/core/m68k/m68kops.h deleted file mode 100644 index 2dc14c0128..0000000000 --- a/waterbox/gpgx/core/m68k/m68kops.h +++ /dev/null @@ -1,25461 +0,0 @@ - -/* ======================================================================== */ -/* ============== CYCLE-ACCURATE DIV/MUL EXECUTION ======================== */ -/* ======================================================================== */ - -INLINE void UseDivuCycles(uint32 dst, uint32 src) -{ - int i; - - /* minimum cycle time */ - uint mcycles = 38 * MUL; - - /* 16-bit divisor */ - src <<= 16; - - /* 16-bit dividend */ - for (i=0; i<15; i++) - { - /* check if carry bit set */ - if ((sint32) dst < 0) - { - /* shift dividend and apply divisor */ - dst <<= 1; - dst -= src; - } - else - { - /* shift dividend and add two cycles */ - dst <<= 1; - mcycles += (2 * MUL); - - if (dst >= src) - { - /* apply divisor and remove one cycle */ - dst -= src; - mcycles -= 1 * MUL; - } - } - } - - USE_CYCLES(mcycles << 1); -} - -INLINE void UseDivsCycles(sint32 dst, sint16 src) -{ - /* minimum cycle time */ - uint mcycles = 6 * MUL; - - /* negative dividend */ - if (dst < 0) mcycles += 1 * MUL; - - if ((abs(dst) >> 16) < abs(src)) - { - int i; - - /* absolute quotient */ - uint32 quotient = abs(dst) / abs(src); - - /* add default cycle time */ - mcycles += (55 * MUL); - - /* positive divisor */ - if (src >= 0) - { - /* check dividend sign */ - if (dst >= 0) mcycles -= 1 * MUL; - else mcycles += 1 * MUL; - } - - /* check higher 15-bits of quotient */ - for (i=0; i<15; i++) - { - quotient >>= 1; - if (!(quotient & 1)) mcycles += 1 * MUL; - } - } - else - { - /* absolute overflow */ - mcycles += (2 * MUL); - } - - USE_CYCLES(mcycles << 1); -} - -INLINE void UseMuluCycles(uint16 src) -{ - /* minimum cycle time */ - uint mcycles = 38 * MUL; - - /* count number of bits set to 1 */ - while (src) - { - if (src & 1) mcycles += (2 * MUL); - src >>= 1; - } - - /* 38 + 2*N */ - USE_CYCLES(mcycles); -} - -INLINE void UseMulsCycles(sint16 src) -{ - /* minimum cycle time */ - uint mcycles = 38 * MUL; - - /* detect 01 or 10 patterns */ - sint32 tmp = src << 1; - tmp = (tmp ^ src) & 0xFFFF; - - /* count number of bits set to 1 */ - while (tmp) - { - if (tmp & 1) mcycles += (2 * MUL); - tmp >>= 1; - } - - /* 38 + 2*N */ - USE_CYCLES(mcycles); -} - - -/* ======================================================================== */ -/* ========================= INSTRUCTION HANDLERS ========================= */ -/* ======================================================================== */ - - -static void m68k_op_1010(void) -{ - m68ki_exception_1010(); -} - - -static void m68k_op_1111(void) -{ - m68ki_exception_1111(); -} - - -static void m68k_op_abcd_8_rr(void) -{ - uint* r_dst = &DX; - uint src = DY; - uint dst = *r_dst; - uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); - - FLAG_V = ~res; /* Undefined V behavior */ - - if(res > 9) - res += 6; - res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); - FLAG_X = FLAG_C = (res > 0x99) << 8; - if(FLAG_C) - res -= 0xa0; - - FLAG_V &= res; /* Undefined V behavior part II */ - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; -} - - -static void m68k_op_abcd_8_mm_ax7(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); - - FLAG_V = ~res; /* Undefined V behavior */ - - if(res > 9) - res += 6; - res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); - FLAG_X = FLAG_C = (res > 0x99) << 8; - if(FLAG_C) - res -= 0xa0; - - FLAG_V &= res; /* Undefined V behavior part II */ - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_abcd_8_mm_ay7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); - - FLAG_V = ~res; /* Undefined V behavior */ - - if(res > 9) - res += 6; - res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); - FLAG_X = FLAG_C = (res > 0x99) << 8; - if(FLAG_C) - res -= 0xa0; - - FLAG_V &= res; /* Undefined V behavior part II */ - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_abcd_8_mm_axy7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); - - FLAG_V = ~res; /* Undefined V behavior */ - - if(res > 9) - res += 6; - res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); - FLAG_X = FLAG_C = (res > 0x99) << 8; - if(FLAG_C) - res -= 0xa0; - - FLAG_V &= res; /* Undefined V behavior part II */ - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_abcd_8_mm(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); - - FLAG_V = ~res; /* Undefined V behavior */ - - if(res > 9) - res += 6; - res += HIGH_NIBBLE(src) + HIGH_NIBBLE(dst); - FLAG_X = FLAG_C = (res > 0x99) << 8; - if(FLAG_C) - res -= 0xa0; - - FLAG_V &= res; /* Undefined V behavior part II */ - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_add_8_er_d(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_8(DY); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_pi7(void) -{ - uint* r_dst = &DX; - uint src = OPER_A7_PI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_pd7(void) -{ - uint* r_dst = &DX; - uint src = OPER_A7_PD_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_8_er_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_d(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(DY); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_a(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(AY); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_16_er_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_add_32_er_d(void) -{ - uint* r_dst = &DX; - uint src = DY; - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_a(void) -{ - uint* r_dst = &DX; - uint src = AY; - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_32_er_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_add_8_re_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_di(void) -{ - uint ea = EA_AY_DI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_aw(void) -{ - uint ea = EA_AW_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_8_re_al(void) -{ - uint ea = EA_AL_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_add_16_re_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_add_16_re_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_add_16_re_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_add_16_re_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_add_16_re_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_add_16_re_aw(void) -{ - uint ea = EA_AW_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_add_16_re_al(void) -{ - uint ea = EA_AL_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_add_32_re_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_add_32_re_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_add_32_re_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_add_32_re_di(void) -{ - uint ea = EA_AY_DI_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_add_32_re_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_add_32_re_aw(void) -{ - uint ea = EA_AW_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_add_32_re_al(void) -{ - uint ea = EA_AL_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_adda_16_d(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(DY)); -} - - -static void m68k_op_adda_16_a(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + MAKE_INT_16(AY)); -} - - -static void m68k_op_adda_16_ai(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_AI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_pi(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_PI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_pd(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_PD_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_di(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_DI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_ix(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_IX_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_aw(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AW_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_al(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AL_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_pcdi(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_PCDI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_pcix(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_PCIX_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_16_i(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_I_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + src); -} - - -static void m68k_op_adda_32_d(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + DY); -} - - -static void m68k_op_adda_32_a(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + AY); -} - - -static void m68k_op_adda_32_ai(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_AY_AI_32() + *r_dst); -} - - -static void m68k_op_adda_32_pi(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_AY_PI_32() + *r_dst); -} - - -static void m68k_op_adda_32_pd(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_AY_PD_32() + *r_dst); -} - - -static void m68k_op_adda_32_di(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_AY_DI_32() + *r_dst); -} - - -static void m68k_op_adda_32_ix(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_AY_IX_32() + *r_dst); -} - - -static void m68k_op_adda_32_aw(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_AW_32() + *r_dst); -} - - -static void m68k_op_adda_32_al(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_AL_32() + *r_dst); -} - - -static void m68k_op_adda_32_pcdi(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_PCDI_32() + *r_dst); -} - - -static void m68k_op_adda_32_pcix(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_PCIX_32() + *r_dst); -} - - -static void m68k_op_adda_32_i(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(OPER_I_32() + *r_dst); -} - - -static void m68k_op_addi_8_d(void) -{ - uint* r_dst = &DY; - uint src = OPER_I_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_addi_8_ai(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_AI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_pi(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_pi7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_pd(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_pd7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_di(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_DI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_ix(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_IX_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_aw(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AW_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_8_al(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AL_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addi_16_d(void) -{ - uint* r_dst = &DY; - uint src = OPER_I_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_addi_16_ai(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_AI_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addi_16_pi(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PI_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addi_16_pd(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PD_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addi_16_di(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_DI_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addi_16_ix(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_IX_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addi_16_aw(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AW_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addi_16_al(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AL_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addi_32_d(void) -{ - uint* r_dst = &DY; - uint src = OPER_I_32(); - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_addi_32_ai(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_AI_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addi_32_pi(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PI_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addi_32_pd(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PD_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addi_32_di(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_DI_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addi_32_ix(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_IX_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addi_32_aw(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AW_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addi_32_al(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AL_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_d(void) -{ - uint* r_dst = &DY; - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_addq_8_ai(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_AI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_pi(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_pi7(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_A7_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_pd(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_pd7(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_di(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_DI_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_ix(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_IX_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_aw(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AW_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_8_al(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AL_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst; - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_addq_16_d(void) -{ - uint* r_dst = &DY; - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_addq_16_a(void) -{ - uint* r_dst = &AY; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1); -} - - -static void m68k_op_addq_16_ai(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_AI_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addq_16_pi(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PI_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addq_16_pd(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PD_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addq_16_di(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_DI_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addq_16_ix(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_IX_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addq_16_aw(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AW_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addq_16_al(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AL_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst; - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_addq_32_d(void) -{ - uint* r_dst = &DY; - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint dst = *r_dst; - uint res = src + dst; - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_addq_32_a(void) -{ - uint* r_dst = &AY; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst + (((REG_IR >> 9) - 1) & 7) + 1); -} - - -static void m68k_op_addq_32_ai(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_AI_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addq_32_pi(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PI_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addq_32_pd(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PD_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addq_32_di(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_DI_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addq_32_ix(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_IX_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addq_32_aw(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AW_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addq_32_al(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AL_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst; - - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_addx_8_rr(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_8(DY); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; -} - - -static void m68k_op_addx_16_rr(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(DY); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; -} - - -static void m68k_op_addx_32_rr(void) -{ - uint* r_dst = &DX; - uint src = DY; - uint dst = *r_dst; - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - *r_dst = res; -} - - -static void m68k_op_addx_8_mm_ax7(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_addx_8_mm_ay7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_addx_8_mm_axy7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_addx_8_mm(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_V = VFLAG_ADD_8(src, dst, res); - FLAG_X = FLAG_C = CFLAG_8(res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_addx_16_mm(void) -{ - uint src = OPER_AY_PD_16(); - uint ea = EA_AX_PD_16(); - uint dst = m68ki_read_16(ea); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_V = VFLAG_ADD_16(src, dst, res); - FLAG_X = FLAG_C = CFLAG_16(res); - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_addx_32_mm(void) -{ - uint src = OPER_AY_PD_32(); - uint ea = EA_AX_PD_32(); - uint dst = m68ki_read_32(ea); - uint res = src + dst + XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_ADD_32(src, dst, res); - FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_and_8_er_d(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (DY | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_ai(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_AI_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_pi(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PI_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_pi7(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PI_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_pd(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_PD_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_pd7(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_A7_PD_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_di(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_DI_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_ix(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AY_IX_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_aw(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AW_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_al(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_AL_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_pcdi(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCDI_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_pcix(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_PCIX_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_er_i(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DX &= (OPER_I_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_d(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (DY | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_ai(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_AI_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_pi(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PI_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_pd(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_PD_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_di(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_DI_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_ix(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AY_IX_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_aw(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AW_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_al(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_AL_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_pcdi(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCDI_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_pcix(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_PCIX_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_16_er_i(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DX &= (OPER_I_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_d(void) -{ - FLAG_Z = DX &= DY; - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_ai(void) -{ - FLAG_Z = DX &= OPER_AY_AI_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_pi(void) -{ - FLAG_Z = DX &= OPER_AY_PI_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_pd(void) -{ - FLAG_Z = DX &= OPER_AY_PD_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_di(void) -{ - FLAG_Z = DX &= OPER_AY_DI_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_ix(void) -{ - FLAG_Z = DX &= OPER_AY_IX_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_aw(void) -{ - FLAG_Z = DX &= OPER_AW_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_al(void) -{ - FLAG_Z = DX &= OPER_AL_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_pcdi(void) -{ - FLAG_Z = DX &= OPER_PCDI_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_pcix(void) -{ - FLAG_Z = DX &= OPER_PCIX_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_32_er_i(void) -{ - FLAG_Z = DX &= OPER_I_32(); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_and_8_re_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_di(void) -{ - uint ea = EA_AY_DI_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_aw(void) -{ - uint ea = EA_AW_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_8_re_al(void) -{ - uint ea = EA_AL_8(); - uint res = DX & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_and_16_re_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint res = DX & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_and_16_re_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint res = DX & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_and_16_re_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint res = DX & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_and_16_re_di(void) -{ - uint ea = EA_AY_DI_16(); - uint res = DX & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_and_16_re_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint res = DX & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_and_16_re_aw(void) -{ - uint ea = EA_AW_16(); - uint res = DX & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_and_16_re_al(void) -{ - uint ea = EA_AL_16(); - uint res = DX & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_and_32_re_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint res = DX & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_and_32_re_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint res = DX & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_and_32_re_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint res = DX & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_and_32_re_di(void) -{ - uint ea = EA_AY_DI_32(); - uint res = DX & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_and_32_re_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint res = DX & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_and_32_re_aw(void) -{ - uint ea = EA_AW_32(); - uint res = DX & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_and_32_re_al(void) -{ - uint ea = EA_AL_32(); - uint res = DX & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_8_d(void) -{ - FLAG_Z = MASK_OUT_ABOVE_8(DY &= (OPER_I_8() | 0xffffff00)); - - FLAG_N = NFLAG_8(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_andi_8_ai(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_AI_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_pi(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PI_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_pi7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PI_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_pd(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PD_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_pd7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PD_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_di(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_DI_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_ix(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_IX_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_aw(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AW_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_8_al(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AL_8(); - uint res = src & m68ki_read_8(ea); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_andi_16_d(void) -{ - FLAG_Z = MASK_OUT_ABOVE_16(DY &= (OPER_I_16() | 0xffff0000)); - - FLAG_N = NFLAG_16(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_andi_16_ai(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_AI_16(); - uint res = src & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_andi_16_pi(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PI_16(); - uint res = src & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_andi_16_pd(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PD_16(); - uint res = src & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_andi_16_di(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_DI_16(); - uint res = src & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_andi_16_ix(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_IX_16(); - uint res = src & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_andi_16_aw(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AW_16(); - uint res = src & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_andi_16_al(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AL_16(); - uint res = src & m68ki_read_16(ea); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_andi_32_d(void) -{ - FLAG_Z = DY &= (OPER_I_32()); - - FLAG_N = NFLAG_32(FLAG_Z); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_andi_32_ai(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_AI_32(); - uint res = src & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_32_pi(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PI_32(); - uint res = src & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_32_pd(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PD_32(); - uint res = src & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_32_di(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_DI_32(); - uint res = src & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_32_ix(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_IX_32(); - uint res = src & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_32_aw(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AW_32(); - uint res = src & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_32_al(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AL_32(); - uint res = src & m68ki_read_32(ea); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_andi_16_toc(void) -{ - m68ki_set_ccr(m68ki_get_ccr() & OPER_I_16()); -} - - -static void m68k_op_andi_16_tos(void) -{ - if(FLAG_S) - { - uint src = OPER_I_16(); - m68ki_set_sr(m68ki_get_sr() & src); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_asr_8_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = src >> shift; - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - if(GET_MSB_8(src)) - res |= m68ki_shift_8_table[shift]; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_X = FLAG_C = src << (9-shift); -} - - -static void m68k_op_asr_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = src >> shift; - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - if(GET_MSB_16(src)) - res |= m68ki_shift_16_table[shift]; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_X = FLAG_C = src << (9-shift); -} - - -static void m68k_op_asr_32_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = *r_dst; - uint res = src >> shift; - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - if(GET_MSB_32(src)) - res |= m68ki_shift_32_table[shift]; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_X = FLAG_C = src << (9-shift); -} - - -static void m68k_op_asr_8_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = src >> shift; - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 8) - { - if(GET_MSB_8(src)) - res |= m68ki_shift_8_table[shift]; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_X = FLAG_C = src << (9-shift); - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - if(GET_MSB_8(src)) - { - *r_dst |= 0xff; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - FLAG_N = NFLAG_SET; - FLAG_Z = ZFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst &= 0xffffff00; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_8(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_asr_16_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = src >> shift; - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 16) - { - if(GET_MSB_16(src)) - res |= m68ki_shift_16_table[shift]; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_C = FLAG_X = (src >> (shift - 1))<<8; - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - if(GET_MSB_16(src)) - { - *r_dst |= 0xffff; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - FLAG_N = NFLAG_SET; - FLAG_Z = ZFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst &= 0xffff0000; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_16(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_asr_32_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = *r_dst; - uint res = src >> shift; - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 32) - { - if(GET_MSB_32(src)) - res |= m68ki_shift_32_table[shift]; - - *r_dst = res; - - FLAG_C = FLAG_X = (src >> (shift - 1))<<8; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - if(GET_MSB_32(src)) - { - *r_dst = 0xffffffff; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - FLAG_N = NFLAG_SET; - FLAG_Z = ZFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst = 0; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_32(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_asr_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - if(GET_MSB_16(src)) - res |= 0x8000; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = FLAG_X = src << 8; -} - - -static void m68k_op_asr_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - if(GET_MSB_16(src)) - res |= 0x8000; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = FLAG_X = src << 8; -} - - -static void m68k_op_asr_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - if(GET_MSB_16(src)) - res |= 0x8000; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = FLAG_X = src << 8; -} - - -static void m68k_op_asr_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - if(GET_MSB_16(src)) - res |= 0x8000; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = FLAG_X = src << 8; -} - - -static void m68k_op_asr_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - if(GET_MSB_16(src)) - res |= 0x8000; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = FLAG_X = src << 8; -} - - -static void m68k_op_asr_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - if(GET_MSB_16(src)) - res |= 0x8000; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = FLAG_X = src << 8; -} - - -static void m68k_op_asr_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - if(GET_MSB_16(src)) - res |= 0x8000; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = FLAG_X = src << 8; -} - - -static void m68k_op_asl_8_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = MASK_OUT_ABOVE_8(src << shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_X = FLAG_C = src << shift; - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - src &= m68ki_shift_8_table[shift + 1]; - FLAG_V = (!(src == 0 || (src == m68ki_shift_8_table[shift + 1] && shift < 8)))<<7; -} - - -static void m68k_op_asl_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = MASK_OUT_ABOVE_16(src << shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> (8-shift); - src &= m68ki_shift_16_table[shift + 1]; - FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7; -} - - -static void m68k_op_asl_32_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32(src << shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> (24-shift); - src &= m68ki_shift_32_table[shift + 1]; - FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7; -} - - -static void m68k_op_asl_8_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = MASK_OUT_ABOVE_8(src << shift); - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 8) - { - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - FLAG_X = FLAG_C = src << shift; - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - src &= m68ki_shift_8_table[shift + 1]; - FLAG_V = (!(src == 0 || src == m68ki_shift_8_table[shift + 1]))<<7; - return; - } - - *r_dst &= 0xffffff00; - FLAG_X = FLAG_C = ((shift == 8 ? src & 1 : 0))<<8; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = (!(src == 0))<<7; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_8(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_asl_16_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = MASK_OUT_ABOVE_16(src << shift); - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 16) - { - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - FLAG_X = FLAG_C = (src << shift) >> 8; - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - src &= m68ki_shift_16_table[shift + 1]; - FLAG_V = (!(src == 0 || src == m68ki_shift_16_table[shift + 1]))<<7; - return; - } - - *r_dst &= 0xffff0000; - FLAG_X = FLAG_C = ((shift == 16 ? src & 1 : 0))<<8; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = (!(src == 0))<<7; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_16(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_asl_32_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32(src << shift); - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 32) - { - *r_dst = res; - FLAG_X = FLAG_C = (src >> (32 - shift)) << 8; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - src &= m68ki_shift_32_table[shift + 1]; - FLAG_V = (!(src == 0 || src == m68ki_shift_32_table[shift + 1]))<<7; - return; - } - - *r_dst = 0; - FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = (!(src == 0))<<7; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_32(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_asl_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - src &= 0xc000; - FLAG_V = (!(src == 0 || src == 0xc000))<<7; -} - - -static void m68k_op_asl_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - src &= 0xc000; - FLAG_V = (!(src == 0 || src == 0xc000))<<7; -} - - -static void m68k_op_asl_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - src &= 0xc000; - FLAG_V = (!(src == 0 || src == 0xc000))<<7; -} - - -static void m68k_op_asl_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - src &= 0xc000; - FLAG_V = (!(src == 0 || src == 0xc000))<<7; -} - - -static void m68k_op_asl_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - src &= 0xc000; - FLAG_V = (!(src == 0 || src == 0xc000))<<7; -} - - -static void m68k_op_asl_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - src &= 0xc000; - FLAG_V = (!(src == 0 || src == 0xc000))<<7; -} - - -static void m68k_op_asl_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - src &= 0xc000; - FLAG_V = (!(src == 0 || src == 0xc000))<<7; -} - - -static void m68k_op_bhi_8(void) -{ - if(COND_HI()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bls_8(void) -{ - if(COND_LS()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bcc_8(void) -{ - if(COND_CC()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bcs_8(void) -{ - if(COND_CS()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bne_8(void) -{ - if(COND_NE()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_beq_8(void) -{ - if(COND_EQ()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bvc_8(void) -{ - if(COND_VC()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bvs_8(void) -{ - if(COND_VS()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bpl_8(void) -{ - if(COND_PL()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bmi_8(void) -{ - if(COND_MI()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bge_8(void) -{ - if(COND_GE()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_blt_8(void) -{ - if(COND_LT()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bgt_8(void) -{ - if(COND_GT()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_ble_8(void) -{ - if(COND_LE()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bhi_16(void) -{ - if(COND_HI()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bls_16(void) -{ - if(COND_LS()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bcc_16(void) -{ - if(COND_CC()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bcs_16(void) -{ - if(COND_CS()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bne_16(void) -{ - if(COND_NE()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_beq_16(void) -{ - if(COND_EQ()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bvc_16(void) -{ - if(COND_VC()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bvs_16(void) -{ - if(COND_VS()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bpl_16(void) -{ - if(COND_PL()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bmi_16(void) -{ - if(COND_MI()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bge_16(void) -{ - if(COND_GE()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_blt_16(void) -{ - if(COND_LT()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bgt_16(void) -{ - if(COND_GT()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_ble_16(void) -{ - if(COND_LE()) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - return; - } - REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); -} - - -static void m68k_op_bhi_32(void) -{ - if(COND_HI()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bls_32(void) -{ - if(COND_LS()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bcc_32(void) -{ - if(COND_CC()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bcs_32(void) -{ - if(COND_CS()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bne_32(void) -{ - if(COND_NE()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_beq_32(void) -{ - if(COND_EQ()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bvc_32(void) -{ - if(COND_VC()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bvs_32(void) -{ - if(COND_VS()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bpl_32(void) -{ - if(COND_PL()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bmi_32(void) -{ - if(COND_MI()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bge_32(void) -{ - if(COND_GE()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_blt_32(void) -{ - if(COND_LT()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bgt_32(void) -{ - if(COND_GT()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_ble_32(void) -{ - if(COND_LE()) - { - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); - return; - } - USE_CYCLES(CYC_BCC_NOTAKE_B); -} - - -static void m68k_op_bchg_32_r_d(void) -{ - uint* r_dst = &DY; - uint mask = 1 << (DX & 0x1f); - - FLAG_Z = *r_dst & mask; - *r_dst ^= mask; -} - - -static void m68k_op_bchg_8_r_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_di(void) -{ - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_aw(void) -{ - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_r_al(void) -{ - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_32_s_d(void) -{ - uint* r_dst = &DY; - uint mask = 1 << (OPER_I_8() & 0x1f); - - FLAG_Z = *r_dst & mask; - *r_dst ^= mask; -} - - -static void m68k_op_bchg_8_s_ai(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_pi(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_pi7(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_pd(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_pd7(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_di(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_ix(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_aw(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bchg_8_s_al(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); -} - - -static void m68k_op_bclr_32_r_d(void) -{ - uint* r_dst = &DY; - uint mask = 1 << (DX & 0x1f); - - FLAG_Z = *r_dst & mask; - *r_dst &= ~mask; -} - - -static void m68k_op_bclr_8_r_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_di(void) -{ - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_aw(void) -{ - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_r_al(void) -{ - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_32_s_d(void) -{ - uint* r_dst = &DY; - uint mask = 1 << (OPER_I_8() & 0x1f); - - FLAG_Z = *r_dst & mask; - *r_dst &= ~mask; -} - - -static void m68k_op_bclr_8_s_ai(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_pi(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_pi7(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_pd(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_pd7(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_di(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_ix(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_aw(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bclr_8_s_al(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); -} - - -static void m68k_op_bra_8(void) -{ - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); -} - - -static void m68k_op_bra_16(void) -{ - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); -} - - -static void m68k_op_bra_32(void) -{ - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); -} - - -static void m68k_op_bset_32_r_d(void) -{ - uint* r_dst = &DY; - uint mask = 1 << (DX & 0x1f); - - FLAG_Z = *r_dst & mask; - *r_dst |= mask; -} - - -static void m68k_op_bset_8_r_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_di(void) -{ - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_aw(void) -{ - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_r_al(void) -{ - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - uint mask = 1 << (DX & 7); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_32_s_d(void) -{ - uint* r_dst = &DY; - uint mask = 1 << (OPER_I_8() & 0x1f); - - FLAG_Z = *r_dst & mask; - *r_dst |= mask; -} - - -static void m68k_op_bset_8_s_ai(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_pi(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_pi7(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_pd(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_pd7(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_di(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_ix(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_aw(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bset_8_s_al(void) -{ - uint mask = 1 << (OPER_I_8() & 7); - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - - FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); -} - - -static void m68k_op_bsr_8(void) -{ - m68ki_push_32(REG_PC); - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); -} - - -static void m68k_op_bsr_16(void) -{ - uint offset = OPER_I_16(); - m68ki_push_32(REG_PC); - REG_PC -= 2; - m68ki_branch_16(offset); -} - - -static void m68k_op_bsr_32(void) -{ - m68ki_push_32(REG_PC); - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); -} - - -static void m68k_op_btst_32_r_d(void) -{ - FLAG_Z = DY & (1 << (DX & 0x1f)); -} - - -static void m68k_op_btst_8_r_ai(void) -{ - FLAG_Z = OPER_AY_AI_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_pi(void) -{ - FLAG_Z = OPER_AY_PI_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_pi7(void) -{ - FLAG_Z = OPER_A7_PI_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_pd(void) -{ - FLAG_Z = OPER_AY_PD_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_pd7(void) -{ - FLAG_Z = OPER_A7_PD_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_di(void) -{ - FLAG_Z = OPER_AY_DI_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_ix(void) -{ - FLAG_Z = OPER_AY_IX_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_aw(void) -{ - FLAG_Z = OPER_AW_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_al(void) -{ - FLAG_Z = OPER_AL_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_pcdi(void) -{ - FLAG_Z = OPER_PCDI_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_pcix(void) -{ - FLAG_Z = OPER_PCIX_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_8_r_i(void) -{ - FLAG_Z = OPER_I_8() & (1 << (DX & 7)); -} - - -static void m68k_op_btst_32_s_d(void) -{ - FLAG_Z = DY & (1 << (OPER_I_8() & 0x1f)); -} - - -static void m68k_op_btst_8_s_ai(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_AY_AI_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_pi(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_AY_PI_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_pi7(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_A7_PI_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_pd(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_AY_PD_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_pd7(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_A7_PD_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_di(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_AY_DI_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_ix(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_AY_IX_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_aw(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_AW_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_al(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_AL_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_pcdi(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_PCDI_8() & (1 << bit); -} - - -static void m68k_op_btst_8_s_pcix(void) -{ - uint bit = OPER_I_8() & 7; - - FLAG_Z = OPER_PCIX_8() & (1 << bit); -} - - -static void m68k_op_chk_16_d(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(DY); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_ai(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_AY_AI_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_pi(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_AY_PI_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_pd(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_AY_PD_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_di(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_AY_DI_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_ix(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_AY_IX_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_aw(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_AW_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_al(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_AL_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_pcdi(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_PCDI_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_pcix(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_PCIX_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_chk_16_i(void) -{ - sint src = MAKE_INT_16(DX); - sint bound = MAKE_INT_16(OPER_I_16()); - - FLAG_Z = ZFLAG_16(src); /* Undocumented */ - FLAG_V = VFLAG_CLEAR; /* Undocumented */ - FLAG_C = CFLAG_CLEAR; /* Undocumented */ - - if(src >= 0 && src <= bound) - { - return; - } - FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); -} - - -static void m68k_op_clr_8_d(void) -{ - DY &= 0xffffff00; - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_8_al(void) -{ - m68ki_write_8(EA_AL_8(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_d(void) -{ - DY &= 0xffff0000; - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_ai(void) -{ - m68ki_write_16(EA_AY_AI_16(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_pi(void) -{ - m68ki_write_16(EA_AY_PI_16(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_pd(void) -{ - m68ki_write_16(EA_AY_PD_16(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_di(void) -{ - m68ki_write_16(EA_AY_DI_16(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_ix(void) -{ - m68ki_write_16(EA_AY_IX_16(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_aw(void) -{ - m68ki_write_16(EA_AW_16(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_16_al(void) -{ - m68ki_write_16(EA_AL_16(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_d(void) -{ - DY = 0; - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_ai(void) -{ - m68ki_write_32(EA_AY_AI_32(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_pi(void) -{ - m68ki_write_32(EA_AY_PI_32(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_pd(void) -{ - m68ki_write_32(EA_AY_PD_32(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_di(void) -{ - m68ki_write_32(EA_AY_DI_32(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_ix(void) -{ - m68ki_write_32(EA_AY_IX_32(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_aw(void) -{ - m68ki_write_32(EA_AW_32(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_clr_32_al(void) -{ - m68ki_write_32(EA_AL_32(), 0); - - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; -} - - -static void m68k_op_cmp_8_d(void) -{ - uint src = MASK_OUT_ABOVE_8(DY); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_ai(void) -{ - uint src = OPER_AY_AI_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_pi(void) -{ - uint src = OPER_AY_PI_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_pi7(void) -{ - uint src = OPER_A7_PI_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_pd(void) -{ - uint src = OPER_AY_PD_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_pd7(void) -{ - uint src = OPER_A7_PD_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_di(void) -{ - uint src = OPER_AY_DI_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_ix(void) -{ - uint src = OPER_AY_IX_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_aw(void) -{ - uint src = OPER_AW_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_al(void) -{ - uint src = OPER_AL_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_pcdi(void) -{ - uint src = OPER_PCDI_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_pcix(void) -{ - uint src = OPER_PCIX_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_8_i(void) -{ - uint src = OPER_I_8(); - uint dst = MASK_OUT_ABOVE_8(DX); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmp_16_d(void) -{ - uint src = MASK_OUT_ABOVE_16(DY); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_a(void) -{ - uint src = MASK_OUT_ABOVE_16(AY); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_ai(void) -{ - uint src = OPER_AY_AI_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_pi(void) -{ - uint src = OPER_AY_PI_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_pd(void) -{ - uint src = OPER_AY_PD_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_di(void) -{ - uint src = OPER_AY_DI_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_ix(void) -{ - uint src = OPER_AY_IX_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_aw(void) -{ - uint src = OPER_AW_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_al(void) -{ - uint src = OPER_AL_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_pcdi(void) -{ - uint src = OPER_PCDI_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_pcix(void) -{ - uint src = OPER_PCIX_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_16_i(void) -{ - uint src = OPER_I_16(); - uint dst = MASK_OUT_ABOVE_16(DX); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmp_32_d(void) -{ - uint src = DY; - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_a(void) -{ - uint src = AY; - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_ai(void) -{ - uint src = OPER_AY_AI_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_pi(void) -{ - uint src = OPER_AY_PI_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_pd(void) -{ - uint src = OPER_AY_PD_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_di(void) -{ - uint src = OPER_AY_DI_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_ix(void) -{ - uint src = OPER_AY_IX_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_aw(void) -{ - uint src = OPER_AW_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_al(void) -{ - uint src = OPER_AL_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_pcdi(void) -{ - uint src = OPER_PCDI_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_pcix(void) -{ - uint src = OPER_PCIX_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmp_32_i(void) -{ - uint src = OPER_I_32(); - uint dst = DX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_d(void) -{ - uint src = MAKE_INT_16(DY); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_a(void) -{ - uint src = MAKE_INT_16(AY); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_ai(void) -{ - uint src = MAKE_INT_16(OPER_AY_AI_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_pi(void) -{ - uint src = MAKE_INT_16(OPER_AY_PI_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_pd(void) -{ - uint src = MAKE_INT_16(OPER_AY_PD_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_di(void) -{ - uint src = MAKE_INT_16(OPER_AY_DI_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_ix(void) -{ - uint src = MAKE_INT_16(OPER_AY_IX_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_aw(void) -{ - uint src = MAKE_INT_16(OPER_AW_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_al(void) -{ - uint src = MAKE_INT_16(OPER_AL_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_pcdi(void) -{ - uint src = MAKE_INT_16(OPER_PCDI_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_pcix(void) -{ - uint src = MAKE_INT_16(OPER_PCIX_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_16_i(void) -{ - uint src = MAKE_INT_16(OPER_I_16()); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_d(void) -{ - uint src = DY; - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_a(void) -{ - uint src = AY; - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_ai(void) -{ - uint src = OPER_AY_AI_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_pi(void) -{ - uint src = OPER_AY_PI_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_pd(void) -{ - uint src = OPER_AY_PD_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_di(void) -{ - uint src = OPER_AY_DI_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_ix(void) -{ - uint src = OPER_AY_IX_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_aw(void) -{ - uint src = OPER_AW_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_al(void) -{ - uint src = OPER_AL_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_pcdi(void) -{ - uint src = OPER_PCDI_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_pcix(void) -{ - uint src = OPER_PCIX_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpa_32_i(void) -{ - uint src = OPER_I_32(); - uint dst = AX; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_8_d(void) -{ - uint src = OPER_I_8(); - uint dst = MASK_OUT_ABOVE_8(DY); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_ai(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_AY_AI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_pi(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_AY_PI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_pi7(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_A7_PI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_pd(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_AY_PD_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_pd7(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_A7_PD_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_di(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_AY_DI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_ix(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_AY_IX_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_aw(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_AW_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_8_al(void) -{ - uint src = OPER_I_8(); - uint dst = OPER_AL_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpi_16_d(void) -{ - uint src = OPER_I_16(); - uint dst = MASK_OUT_ABOVE_16(DY); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_16_ai(void) -{ - uint src = OPER_I_16(); - uint dst = OPER_AY_AI_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_16_pi(void) -{ - uint src = OPER_I_16(); - uint dst = OPER_AY_PI_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_16_pd(void) -{ - uint src = OPER_I_16(); - uint dst = OPER_AY_PD_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_16_di(void) -{ - uint src = OPER_I_16(); - uint dst = OPER_AY_DI_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_16_ix(void) -{ - uint src = OPER_I_16(); - uint dst = OPER_AY_IX_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_16_aw(void) -{ - uint src = OPER_I_16(); - uint dst = OPER_AW_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_16_al(void) -{ - uint src = OPER_I_16(); - uint dst = OPER_AL_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpi_32_d(void) -{ - uint src = OPER_I_32(); - uint dst = DY; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_32_ai(void) -{ - uint src = OPER_I_32(); - uint dst = OPER_AY_AI_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_32_pi(void) -{ - uint src = OPER_I_32(); - uint dst = OPER_AY_PI_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_32_pd(void) -{ - uint src = OPER_I_32(); - uint dst = OPER_AY_PD_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_32_di(void) -{ - uint src = OPER_I_32(); - uint dst = OPER_AY_DI_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_32_ix(void) -{ - uint src = OPER_I_32(); - uint dst = OPER_AY_IX_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_32_aw(void) -{ - uint src = OPER_I_32(); - uint dst = OPER_AW_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpi_32_al(void) -{ - uint src = OPER_I_32(); - uint dst = OPER_AL_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_cmpm_8_ax7(void) -{ - uint src = OPER_AY_PI_8(); - uint dst = OPER_A7_PI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpm_8_ay7(void) -{ - uint src = OPER_A7_PI_8(); - uint dst = OPER_AX_PI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpm_8_axy7(void) -{ - uint src = OPER_A7_PI_8(); - uint dst = OPER_A7_PI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpm_8(void) -{ - uint src = OPER_AY_PI_8(); - uint dst = OPER_AX_PI_8(); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_C = CFLAG_8(res); -} - - -static void m68k_op_cmpm_16(void) -{ - uint src = OPER_AY_PI_16(); - uint dst = OPER_AX_PI_16(); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_C = CFLAG_16(res); -} - - -static void m68k_op_cmpm_32(void) -{ - uint src = OPER_AY_PI_32(); - uint dst = OPER_AX_PI_32(); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_C = CFLAG_SUB_32(src, dst, res); -} - - -static void m68k_op_dbt_16(void) -{ - REG_PC += 2; -} - - -static void m68k_op_dbf_16(void) -{ - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); -} - - -static void m68k_op_dbhi_16(void) -{ - if(COND_NOT_HI()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbls_16(void) -{ - if(COND_NOT_LS()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbcc_16(void) -{ - if(COND_NOT_CC()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbcs_16(void) -{ - if(COND_NOT_CS()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbne_16(void) -{ - if(COND_NOT_NE()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbeq_16(void) -{ - if(COND_NOT_EQ()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbvc_16(void) -{ - if(COND_NOT_VC()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbvs_16(void) -{ - if(COND_NOT_VS()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbpl_16(void) -{ - if(COND_NOT_PL()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbmi_16(void) -{ - if(COND_NOT_MI()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbge_16(void) -{ - if(COND_NOT_GE()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dblt_16(void) -{ - if(COND_NOT_LT()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dbgt_16(void) -{ - if(COND_NOT_GT()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_dble_16(void) -{ - if(COND_NOT_LE()) - { - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(*r_dst - 1); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - if(res != 0xffff) - { - uint offset = OPER_I_16(); - REG_PC -= 2; - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); - - /* reset idle loop detection */ - m68ki_cpu.poll.detected = 0; - return; - } - REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); - return; - } - REG_PC += 2; -} - - -static void m68k_op_divs_16_d(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(DY); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_ai(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_AI_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_pi(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_PI_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_pd(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_PD_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_di(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_DI_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_ix(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_IX_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_aw(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AW_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_al(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AL_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_pcdi(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_PCDI_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_pcix(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_PCIX_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divs_16_i(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_I_16()); - sint quotient; - sint remainder; - - if(src != 0) - { - UseDivsCycles(*r_dst,src); - - if((uint32)*r_dst == 0x80000000 && src == -1) - { - FLAG_Z = 0; - FLAG_N = NFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = 0; - return; - } - - quotient = MAKE_INT_32(*r_dst) / src; - remainder = MAKE_INT_32(*r_dst) % src; - - if(quotient == MAKE_INT_16(quotient)) - { - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_d(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(DY); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 *10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_divu_16_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_16(); - - if(src != 0) - { - uint quotient = *r_dst / src; - uint remainder = *r_dst % src; - - if(quotient < 0x10000) - { - UseDivuCycles(*r_dst,src); - FLAG_Z = quotient; - FLAG_N = NFLAG_16(quotient); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst = MASK_OUT_ABOVE_32(MASK_OUT_ABOVE_16(quotient) | (remainder << 16)); - return; - } - USE_CYCLES(7 * 10); - FLAG_V = VFLAG_SET; - FLAG_N = NFLAG_SET; /* undocumented behavior (fixes Blood Shot on Genesis) */ - FLAG_C = CFLAG_CLEAR; - return; - } - FLAG_C = CFLAG_CLEAR; - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); -} - - -static void m68k_op_eor_8_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY ^= MASK_OUT_ABOVE_8(DX)); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_di(void) -{ - uint ea = EA_AY_DI_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_aw(void) -{ - uint ea = EA_AW_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_8_al(void) -{ - uint ea = EA_AL_8(); - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY ^= MASK_OUT_ABOVE_16(DX)); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_aw(void) -{ - uint ea = EA_AW_16(); - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_16_al(void) -{ - uint ea = EA_AL_16(); - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_d(void) -{ - uint res = DY ^= DX; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint res = DX ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint res = DX ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint res = DX ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_di(void) -{ - uint ea = EA_AY_DI_32(); - uint res = DX ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint res = DX ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_aw(void) -{ - uint ea = EA_AW_32(); - uint res = DX ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eor_32_al(void) -{ - uint ea = EA_AL_32(); - uint res = DX ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8()); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_ai(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_AI_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_pi(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PI_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_pi7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PI_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_pd(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PD_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_pd7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PD_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_di(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_DI_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_ix(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_IX_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_aw(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AW_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_8_al(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AL_8(); - uint res = src ^ m68ki_read_8(ea); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16()); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_ai(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_AI_16(); - uint res = src ^ m68ki_read_16(ea); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_pi(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PI_16(); - uint res = src ^ m68ki_read_16(ea); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_pd(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PD_16(); - uint res = src ^ m68ki_read_16(ea); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_di(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_DI_16(); - uint res = src ^ m68ki_read_16(ea); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_ix(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_IX_16(); - uint res = src ^ m68ki_read_16(ea); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_aw(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AW_16(); - uint res = src ^ m68ki_read_16(ea); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_al(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AL_16(); - uint res = src ^ m68ki_read_16(ea); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_d(void) -{ - uint res = DY ^= OPER_I_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_ai(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_AI_32(); - uint res = src ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_pi(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PI_32(); - uint res = src ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_pd(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PD_32(); - uint res = src ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_di(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_DI_32(); - uint res = src ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_ix(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_IX_32(); - uint res = src ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_aw(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AW_32(); - uint res = src ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_32_al(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AL_32(); - uint res = src ^ m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_eori_16_toc(void) -{ - m68ki_set_ccr(m68ki_get_ccr() ^ OPER_I_16()); -} - - -static void m68k_op_eori_16_tos(void) -{ - if(FLAG_S) - { - uint src = OPER_I_16(); - m68ki_set_sr(m68ki_get_sr() ^ src); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_exg_32_dd(void) -{ - uint* reg_a = &DX; - uint* reg_b = &DY; - uint tmp = *reg_a; - *reg_a = *reg_b; - *reg_b = tmp; -} - - -static void m68k_op_exg_32_aa(void) -{ - uint* reg_a = &AX; - uint* reg_b = &AY; - uint tmp = *reg_a; - *reg_a = *reg_b; - *reg_b = tmp; -} - - -static void m68k_op_exg_32_da(void) -{ - uint* reg_a = &DX; - uint* reg_b = &AY; - uint tmp = *reg_a; - *reg_a = *reg_b; - *reg_b = tmp; -} - - -static void m68k_op_ext_16(void) -{ - uint* r_dst = &DY; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | MASK_OUT_ABOVE_8(*r_dst) | (GET_MSB_8(*r_dst) ? 0xff00 : 0); - - FLAG_N = NFLAG_16(*r_dst); - FLAG_Z = MASK_OUT_ABOVE_16(*r_dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_ext_32(void) -{ - uint* r_dst = &DY; - - *r_dst = MASK_OUT_ABOVE_16(*r_dst) | (GET_MSB_16(*r_dst) ? 0xffff0000 : 0); - - FLAG_N = NFLAG_32(*r_dst); - FLAG_Z = *r_dst; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_illegal(void) -{ - m68ki_exception_illegal(); -} - - -static void m68k_op_jmp_32_ai(void) -{ - m68ki_jump(EA_AY_AI_32()); -} - - -static void m68k_op_jmp_32_di(void) -{ - m68ki_jump(EA_AY_DI_32()); -} - - -static void m68k_op_jmp_32_ix(void) -{ - m68ki_jump(EA_AY_IX_32()); -} - - -static void m68k_op_jmp_32_aw(void) -{ - m68ki_jump(EA_AW_32()); -} - - -static void m68k_op_jmp_32_al(void) -{ - m68ki_jump(EA_AL_32()); -} - - -static void m68k_op_jmp_32_pcdi(void) -{ - m68ki_jump(EA_PCDI_32()); -} - - -static void m68k_op_jmp_32_pcix(void) -{ - m68ki_jump(EA_PCIX_32()); -} - - -static void m68k_op_jsr_32_ai(void) -{ - uint ea = EA_AY_AI_32(); - m68ki_push_32(REG_PC); - m68ki_jump(ea); -} - - -static void m68k_op_jsr_32_di(void) -{ - uint ea = EA_AY_DI_32(); - m68ki_push_32(REG_PC); - m68ki_jump(ea); -} - - -static void m68k_op_jsr_32_ix(void) -{ - uint ea = EA_AY_IX_32(); - m68ki_push_32(REG_PC); - m68ki_jump(ea); -} - - -static void m68k_op_jsr_32_aw(void) -{ - uint ea = EA_AW_32(); - m68ki_push_32(REG_PC); - m68ki_jump(ea); -} - - -static void m68k_op_jsr_32_al(void) -{ - uint ea = EA_AL_32(); - m68ki_push_32(REG_PC); - m68ki_jump(ea); -} - - -static void m68k_op_jsr_32_pcdi(void) -{ - uint ea = EA_PCDI_32(); - m68ki_push_32(REG_PC); - m68ki_jump(ea); -} - - -static void m68k_op_jsr_32_pcix(void) -{ - uint ea = EA_PCIX_32(); - m68ki_push_32(REG_PC); - m68ki_jump(ea); -} - - -static void m68k_op_lea_32_ai(void) -{ - AX = EA_AY_AI_32(); -} - - -static void m68k_op_lea_32_di(void) -{ - AX = EA_AY_DI_32(); -} - - -static void m68k_op_lea_32_ix(void) -{ - AX = EA_AY_IX_32(); -} - - -static void m68k_op_lea_32_aw(void) -{ - AX = EA_AW_32(); -} - - -static void m68k_op_lea_32_al(void) -{ - AX = EA_AL_32(); -} - - -static void m68k_op_lea_32_pcdi(void) -{ - AX = EA_PCDI_32(); -} - - -static void m68k_op_lea_32_pcix(void) -{ - AX = EA_PCIX_32(); -} - - -static void m68k_op_link_16_a7(void) -{ - REG_A[7] -= 4; - m68ki_write_32(REG_A[7], REG_A[7]); - REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); -} - - -static void m68k_op_link_16(void) -{ - uint* r_dst = &AY; - - m68ki_push_32(*r_dst); - *r_dst = REG_A[7]; - REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); -} - - -static void m68k_op_lsr_8_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = src >> shift; - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_X = FLAG_C = src << (9-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = src >> shift; - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_X = FLAG_C = src << (9-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_32_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = *r_dst; - uint res = src >> shift; - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_X = FLAG_C = src << (9-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_8_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = src >> shift; - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift <= 8) - { - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - FLAG_X = FLAG_C = src << (9-shift); - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst &= 0xffffff00; - FLAG_X = XFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_8(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = src >> shift; - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift <= 16) - { - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - FLAG_C = FLAG_X = (src >> (shift - 1))<<8; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst &= 0xffff0000; - FLAG_X = XFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_16(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_32_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = *r_dst; - uint res = src >> shift; - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 32) - { - *r_dst = res; - FLAG_C = FLAG_X = (src >> (shift - 1))<<8; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst = 0; - FLAG_X = FLAG_C = (shift == 32 ? GET_MSB_32(src)>>23 : 0); - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_32(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_C = FLAG_X = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_C = FLAG_X = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_C = FLAG_X = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_C = FLAG_X = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_C = FLAG_X = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_C = FLAG_X = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsr_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = src >> 1; - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_CLEAR; - FLAG_Z = res; - FLAG_C = FLAG_X = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_8_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = MASK_OUT_ABOVE_8(src << shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src << shift; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = MASK_OUT_ABOVE_16(src << shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> (8-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_32_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32(src << shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> (24-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_8_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = MASK_OUT_ABOVE_8(src << shift); - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift <= 8) - { - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - FLAG_X = FLAG_C = src << shift; - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst &= 0xffffff00; - FLAG_X = XFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_8(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = MASK_OUT_ABOVE_16(src << shift); - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift <= 16) - { - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - FLAG_X = FLAG_C = (src << shift) >> 8; - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst &= 0xffff0000; - FLAG_X = XFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_16(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_32_r(void) -{ - uint* r_dst = &DY; - uint shift = DX & 0x3f; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32(src << shift); - - if(shift != 0) - { - USE_CYCLES(shift * CYC_SHIFT); - - if(shift < 32) - { - *r_dst = res; - FLAG_X = FLAG_C = (src >> (32 - shift)) << 8; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - *r_dst = 0; - FLAG_X = FLAG_C = ((shift == 32 ? src & 1 : 0))<<8; - FLAG_N = NFLAG_CLEAR; - FLAG_Z = ZFLAG_SET; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_32(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_lsl_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(src << 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_X = FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_di(void) -{ - uint res = OPER_AY_DI_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_aw(void) -{ - uint res = OPER_AW_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_al(void) -{ - uint res = OPER_AL_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_d_i(void) -{ - uint res = OPER_I_8(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_8_ai_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ai_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_AX_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi7_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pi_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_AX_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd7_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_pd_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_AX_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_di_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_AX_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_ix_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_AX_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_aw_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_ai(void) -{ - uint res = OPER_AY_AI_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_pi(void) -{ - uint res = OPER_AY_PI_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_pi7(void) -{ - uint res = OPER_A7_PI_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_pd(void) -{ - uint res = OPER_AY_PD_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_pd7(void) -{ - uint res = OPER_A7_PD_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_di(void) -{ - uint res = OPER_AY_DI_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_ix(void) -{ - uint res = OPER_AY_IX_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_aw(void) -{ - uint res = OPER_AW_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_al(void) -{ - uint res = OPER_AL_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_pcdi(void) -{ - uint res = OPER_PCDI_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_pcix(void) -{ - uint res = OPER_PCIX_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_8_al_i(void) -{ - uint res = OPER_I_8(); - uint ea = EA_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_move_16_d_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_di(void) -{ - uint res = OPER_AY_DI_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_aw(void) -{ - uint res = OPER_AW_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_al(void) -{ - uint res = OPER_AL_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_d_i(void) -{ - uint res = OPER_I_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_16_ai_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_di(void) -{ - uint res = OPER_AY_DI_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_aw(void) -{ - uint res = OPER_AW_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_al(void) -{ - uint res = OPER_AL_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ai_i(void) -{ - uint res = OPER_I_16(); - uint ea = EA_AX_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_di(void) -{ - uint res = OPER_AY_DI_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_aw(void) -{ - uint res = OPER_AW_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_al(void) -{ - uint res = OPER_AL_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pi_i(void) -{ - uint res = OPER_I_16(); - uint ea = EA_AX_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_di(void) -{ - uint res = OPER_AY_DI_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_aw(void) -{ - uint res = OPER_AW_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_al(void) -{ - uint res = OPER_AL_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_pd_i(void) -{ - uint res = OPER_I_16(); - uint ea = EA_AX_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_di(void) -{ - uint res = OPER_AY_DI_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_aw(void) -{ - uint res = OPER_AW_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_al(void) -{ - uint res = OPER_AL_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_di_i(void) -{ - uint res = OPER_I_16(); - uint ea = EA_AX_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_di(void) -{ - uint res = OPER_AY_DI_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_aw(void) -{ - uint res = OPER_AW_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_al(void) -{ - uint res = OPER_AL_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_ix_i(void) -{ - uint res = OPER_I_16(); - uint ea = EA_AX_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_di(void) -{ - uint res = OPER_AY_DI_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_aw(void) -{ - uint res = OPER_AW_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_al(void) -{ - uint res = OPER_AL_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_aw_i(void) -{ - uint res = OPER_I_16(); - uint ea = EA_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_a(void) -{ - uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_ai(void) -{ - uint res = OPER_AY_AI_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_pi(void) -{ - uint res = OPER_AY_PI_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_pd(void) -{ - uint res = OPER_AY_PD_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_di(void) -{ - uint res = OPER_AY_DI_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_ix(void) -{ - uint res = OPER_AY_IX_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_aw(void) -{ - uint res = OPER_AW_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_al(void) -{ - uint res = OPER_AL_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_pcdi(void) -{ - uint res = OPER_PCDI_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_pcix(void) -{ - uint res = OPER_PCIX_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_16_al_i(void) -{ - uint res = OPER_I_16(); - uint ea = EA_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_move_32_d_d(void) -{ - uint res = DY; - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_a(void) -{ - uint res = AY; - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_di(void) -{ - uint res = OPER_AY_DI_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_aw(void) -{ - uint res = OPER_AW_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_al(void) -{ - uint res = OPER_AL_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_d_i(void) -{ - uint res = OPER_I_32(); - uint* r_dst = &DX; - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_move_32_ai_d(void) -{ - uint res = DY; - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_a(void) -{ - uint res = AY; - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_di(void) -{ - uint res = OPER_AY_DI_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_aw(void) -{ - uint res = OPER_AW_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_al(void) -{ - uint res = OPER_AL_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ai_i(void) -{ - uint res = OPER_I_32(); - uint ea = EA_AX_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_d(void) -{ - uint res = DY; - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_a(void) -{ - uint res = AY; - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_di(void) -{ - uint res = OPER_AY_DI_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_aw(void) -{ - uint res = OPER_AW_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_al(void) -{ - uint res = OPER_AL_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pi_i(void) -{ - uint res = OPER_I_32(); - uint ea = EA_AX_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_pd_d(void) -{ - uint res = DY; - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_a(void) -{ - uint res = AY; - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_di(void) -{ - uint res = OPER_AY_DI_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_aw(void) -{ - uint res = OPER_AW_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_al(void) -{ - uint res = OPER_AL_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_pd_i(void) -{ - uint res = OPER_I_32(); - uint ea = EA_AX_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); -} - - -static void m68k_op_move_32_di_d(void) -{ - uint res = DY; - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_a(void) -{ - uint res = AY; - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_di(void) -{ - uint res = OPER_AY_DI_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_aw(void) -{ - uint res = OPER_AW_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_al(void) -{ - uint res = OPER_AL_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_di_i(void) -{ - uint res = OPER_I_32(); - uint ea = EA_AX_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_d(void) -{ - uint res = DY; - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_a(void) -{ - uint res = AY; - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_di(void) -{ - uint res = OPER_AY_DI_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_aw(void) -{ - uint res = OPER_AW_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_al(void) -{ - uint res = OPER_AL_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_ix_i(void) -{ - uint res = OPER_I_32(); - uint ea = EA_AX_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_d(void) -{ - uint res = DY; - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_a(void) -{ - uint res = AY; - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_di(void) -{ - uint res = OPER_AY_DI_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_aw(void) -{ - uint res = OPER_AW_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_al(void) -{ - uint res = OPER_AL_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_aw_i(void) -{ - uint res = OPER_I_32(); - uint ea = EA_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_d(void) -{ - uint res = DY; - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_a(void) -{ - uint res = AY; - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_ai(void) -{ - uint res = OPER_AY_AI_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_pi(void) -{ - uint res = OPER_AY_PI_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_pd(void) -{ - uint res = OPER_AY_PD_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_di(void) -{ - uint res = OPER_AY_DI_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_ix(void) -{ - uint res = OPER_AY_IX_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_aw(void) -{ - uint res = OPER_AW_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_al(void) -{ - uint res = OPER_AL_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_pcdi(void) -{ - uint res = OPER_PCDI_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_pcix(void) -{ - uint res = OPER_PCIX_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_move_32_al_i(void) -{ - uint res = OPER_I_32(); - uint ea = EA_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_movea_16_d(void) -{ - AX = MAKE_INT_16(DY); -} - - -static void m68k_op_movea_16_a(void) -{ - AX = MAKE_INT_16(AY); -} - - -static void m68k_op_movea_16_ai(void) -{ - AX = MAKE_INT_16(OPER_AY_AI_16()); -} - - -static void m68k_op_movea_16_pi(void) -{ - AX = MAKE_INT_16(OPER_AY_PI_16()); -} - - -static void m68k_op_movea_16_pd(void) -{ - AX = MAKE_INT_16(OPER_AY_PD_16()); -} - - -static void m68k_op_movea_16_di(void) -{ - AX = MAKE_INT_16(OPER_AY_DI_16()); -} - - -static void m68k_op_movea_16_ix(void) -{ - AX = MAKE_INT_16(OPER_AY_IX_16()); -} - - -static void m68k_op_movea_16_aw(void) -{ - AX = MAKE_INT_16(OPER_AW_16()); -} - - -static void m68k_op_movea_16_al(void) -{ - AX = MAKE_INT_16(OPER_AL_16()); -} - - -static void m68k_op_movea_16_pcdi(void) -{ - AX = MAKE_INT_16(OPER_PCDI_16()); -} - - -static void m68k_op_movea_16_pcix(void) -{ - AX = MAKE_INT_16(OPER_PCIX_16()); -} - - -static void m68k_op_movea_16_i(void) -{ - AX = MAKE_INT_16(OPER_I_16()); -} - - -static void m68k_op_movea_32_d(void) -{ - AX = DY; -} - - -static void m68k_op_movea_32_a(void) -{ - AX = AY; -} - - -static void m68k_op_movea_32_ai(void) -{ - AX = OPER_AY_AI_32(); -} - - -static void m68k_op_movea_32_pi(void) -{ - AX = OPER_AY_PI_32(); -} - - -static void m68k_op_movea_32_pd(void) -{ - AX = OPER_AY_PD_32(); -} - - -static void m68k_op_movea_32_di(void) -{ - AX = OPER_AY_DI_32(); -} - - -static void m68k_op_movea_32_ix(void) -{ - AX = OPER_AY_IX_32(); -} - - -static void m68k_op_movea_32_aw(void) -{ - AX = OPER_AW_32(); -} - - -static void m68k_op_movea_32_al(void) -{ - AX = OPER_AL_32(); -} - - -static void m68k_op_movea_32_pcdi(void) -{ - AX = OPER_PCDI_32(); -} - - -static void m68k_op_movea_32_pcix(void) -{ - AX = OPER_PCIX_32(); -} - - -static void m68k_op_movea_32_i(void) -{ - AX = OPER_I_32(); -} - -static void m68k_op_move_16_toc_d(void) -{ - m68ki_set_ccr(DY); -} - - -static void m68k_op_move_16_toc_ai(void) -{ - m68ki_set_ccr(OPER_AY_AI_16()); -} - - -static void m68k_op_move_16_toc_pi(void) -{ - m68ki_set_ccr(OPER_AY_PI_16()); -} - - -static void m68k_op_move_16_toc_pd(void) -{ - m68ki_set_ccr(OPER_AY_PD_16()); -} - - -static void m68k_op_move_16_toc_di(void) -{ - m68ki_set_ccr(OPER_AY_DI_16()); -} - - -static void m68k_op_move_16_toc_ix(void) -{ - m68ki_set_ccr(OPER_AY_IX_16()); -} - - -static void m68k_op_move_16_toc_aw(void) -{ - m68ki_set_ccr(OPER_AW_16()); -} - - -static void m68k_op_move_16_toc_al(void) -{ - m68ki_set_ccr(OPER_AL_16()); -} - - -static void m68k_op_move_16_toc_pcdi(void) -{ - m68ki_set_ccr(OPER_PCDI_16()); -} - - -static void m68k_op_move_16_toc_pcix(void) -{ - m68ki_set_ccr(OPER_PCIX_16()); -} - - -static void m68k_op_move_16_toc_i(void) -{ - m68ki_set_ccr(OPER_I_16()); -} - - -static void m68k_op_move_16_frs_d(void) -{ - DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr(); -} - - -static void m68k_op_move_16_frs_ai(void) -{ - uint ea = EA_AY_AI_16(); - m68ki_write_16(ea, m68ki_get_sr()); -} - - -static void m68k_op_move_16_frs_pi(void) -{ - uint ea = EA_AY_PI_16(); - m68ki_write_16(ea, m68ki_get_sr()); -} - - -static void m68k_op_move_16_frs_pd(void) -{ - uint ea = EA_AY_PD_16(); - m68ki_write_16(ea, m68ki_get_sr()); -} - - -static void m68k_op_move_16_frs_di(void) -{ - uint ea = EA_AY_DI_16(); - m68ki_write_16(ea, m68ki_get_sr()); -} - - -static void m68k_op_move_16_frs_ix(void) -{ - uint ea = EA_AY_IX_16(); - m68ki_write_16(ea, m68ki_get_sr()); -} - - -static void m68k_op_move_16_frs_aw(void) -{ - uint ea = EA_AW_16(); - m68ki_write_16(ea, m68ki_get_sr()); -} - - -static void m68k_op_move_16_frs_al(void) -{ - uint ea = EA_AL_16(); - m68ki_write_16(ea, m68ki_get_sr()); -} - - -static void m68k_op_move_16_tos_d(void) -{ - if(FLAG_S) - { - m68ki_set_sr(DY); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_ai(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_AY_AI_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_pi(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_AY_PI_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_pd(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_AY_PD_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_di(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_AY_DI_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_ix(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_AY_IX_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_aw(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_AW_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_al(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_AL_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_pcdi(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_PCDI_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_pcix(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_PCIX_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_16_tos_i(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_I_16(); - m68ki_set_sr(new_sr); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_32_fru(void) -{ - if(FLAG_S) - { - AY = REG_USP; - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_move_32_tou(void) -{ - if(FLAG_S) - { - REG_USP = AY; - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_movem_16_re_pd(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = AY; - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - ea -= 2; - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[15-i])); - count++; - } - AY = ea; - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_re_ai(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_AI_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i])); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_re_di(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_DI_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i])); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_re_ix(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_IX_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i])); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_re_aw(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AW_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i])); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_re_al(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AL_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i])); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_32_re_pd(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = AY; - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - ea -= 4; - m68ki_write_16(ea+2, REG_DA[15-i] & 0xFFFF ); - m68ki_write_16(ea, (REG_DA[15-i] >> 16) & 0xFFFF ); - count++; - } - AY = ea; - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_re_ai(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_AI_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_32(ea, REG_DA[i]); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_re_di(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_DI_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_32(ea, REG_DA[i]); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_re_ix(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_IX_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_32(ea, REG_DA[i]); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_re_aw(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AW_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_32(ea, REG_DA[i]); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_re_al(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AL_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - m68ki_write_32(ea, REG_DA[i]); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_16_er_pi(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = AY; - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); - ea += 2; - count++; - } - AY = ea; - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_er_pcdi(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCDI_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea))); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_er_pcix(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCIX_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea))); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_er_ai(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_AI_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_er_di(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_DI_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_er_ix(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_IX_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_er_aw(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AW_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_16_er_al(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AL_16(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); - ea += 2; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_W); -} - - -static void m68k_op_movem_32_er_pi(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = AY; - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_32(ea); - ea += 4; - count++; - } - AY = ea; - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_er_pcdi(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCDI_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_pcrel_32(ea); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_er_pcix(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCIX_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_pcrel_32(ea); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_er_ai(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_AI_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_32(ea); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_er_di(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_DI_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_32(ea); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_er_ix(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AY_IX_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_32(ea); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_er_aw(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AW_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_32(ea); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movem_32_er_al(void) -{ - uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_AL_32(); - uint count = 0; - - for(; i < 16; i++) - if(register_list & (1 << i)) - { - REG_DA[i] = m68ki_read_32(ea); - ea += 4; - count++; - } - - USE_CYCLES(count * CYC_MOVEM_L); -} - - -static void m68k_op_movep_16_re(void) -{ - uint ea = EA_AY_DI_16(); - uint src = DX; - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 8)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src)); -} - - -static void m68k_op_movep_32_re(void) -{ - uint ea = EA_AY_DI_32(); - uint src = DX; - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 24)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 16)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 8)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src)); -} - - -static void m68k_op_movep_16_er(void) -{ - uint ea = EA_AY_DI_16(); - uint* r_dst = &DX; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2)); -} - - -static void m68k_op_movep_32_er(void) -{ - uint ea = EA_AY_DI_32(); - - DX = (m68ki_read_8(ea) << 24) + (m68ki_read_8(ea + 2) << 16) - + (m68ki_read_8(ea + 4) << 8) + m68ki_read_8(ea + 6); -} - - -static void m68k_op_moveq_32(void) -{ - uint res = DX = MAKE_INT_8(MASK_OUT_ABOVE_8(REG_IR)); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_d(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(DY); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_ai(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_AI_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_pi(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_PI_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_pd(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_PD_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_di(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_DI_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_ix(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AY_IX_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_aw(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AW_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_al(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_AL_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_pcdi(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_PCDI_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_pcix(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_PCIX_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_muls_16_i(void) -{ - uint* r_dst = &DX; - sint src = MAKE_INT_16(OPER_I_16()); - uint res = MASK_OUT_ABOVE_32( src * MAKE_INT_16(MASK_OUT_ABOVE_16(*r_dst))); - - UseMulsCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_d(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(DY); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_mulu_16_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_16(); - uint res = src * MASK_OUT_ABOVE_16(*r_dst); - - UseMuluCycles(src); - - *r_dst = res; - - FLAG_Z = res; - FLAG_N = NFLAG_32(res); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_nbcd_8_d(void) -{ - uint* r_dst = &DY; - uint dst = *r_dst; - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_di(void) -{ - uint ea = EA_AY_DI_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_aw(void) -{ - uint ea = EA_AW_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_nbcd_8_al(void) -{ - uint ea = EA_AL_8(); - uint dst = m68ki_read_8(ea); - uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); - - if(res != 0x9a) - { - FLAG_V = ~res; /* Undefined V behavior */ - - if((res & 0x0f) == 0xa) - res = (res & 0xf0) + 0x10; - - res = MASK_OUT_ABOVE_8(res); - - FLAG_V &= res; /* Undefined V behavior part II */ - - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); - - FLAG_Z |= res; - FLAG_C = CFLAG_SET; - FLAG_X = XFLAG_SET; - } - else - { - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - FLAG_X = XFLAG_CLEAR; - } - FLAG_N = NFLAG_8(res); /* Undefined N behavior */ -} - - -static void m68k_op_neg_8_d(void) -{ - uint* r_dst = &DY; - uint res = 0 - MASK_OUT_ABOVE_8(*r_dst); - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = *r_dst & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_neg_8_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_di(void) -{ - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_aw(void) -{ - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_8_al(void) -{ - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_8(res); - FLAG_C = FLAG_X = CFLAG_8(res); - FLAG_V = src & res; - FLAG_Z = MASK_OUT_ABOVE_8(res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_neg_16_d(void) -{ - uint* r_dst = &DY; - uint res = 0 - MASK_OUT_ABOVE_16(*r_dst); - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (*r_dst & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_neg_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (src & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_neg_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (src & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_neg_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (src & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_neg_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (src & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_neg_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (src & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_neg_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (src & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_neg_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_16(res); - FLAG_C = FLAG_X = CFLAG_16(res); - FLAG_V = (src & res)>>8; - FLAG_Z = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_neg_32_d(void) -{ - uint* r_dst = &DY; - uint res = 0 - *r_dst; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(*r_dst, 0, res); - FLAG_V = (*r_dst & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_neg_32_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_neg_32_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_neg_32_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_neg_32_di(void) -{ - uint ea = EA_AY_DI_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_neg_32_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_neg_32_aw(void) -{ - uint ea = EA_AW_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_neg_32_al(void) -{ - uint ea = EA_AL_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - src; - - FLAG_N = NFLAG_32(res); - FLAG_C = FLAG_X = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - FLAG_Z = MASK_OUT_ABOVE_32(res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_negx_8_d(void) -{ - uint* r_dst = &DY; - uint res = 0 - MASK_OUT_ABOVE_8(*r_dst) - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = *r_dst & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; -} - - -static void m68k_op_negx_8_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_di(void) -{ - uint ea = EA_AY_DI_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_aw(void) -{ - uint ea = EA_AW_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_8_al(void) -{ - uint ea = EA_AL_8(); - uint src = m68ki_read_8(ea); - uint res = 0 - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = src & res; - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_negx_16_d(void) -{ - uint* r_dst = &DY; - uint res = 0 - MASK_OUT_ABOVE_16(*r_dst) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (*r_dst & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; -} - - -static void m68k_op_negx_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (src & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_negx_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (src & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_negx_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (src & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_negx_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (src & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_negx_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (src & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_negx_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (src & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_negx_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = (src & res)>>8; - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_negx_32_d(void) -{ - uint* r_dst = &DY; - uint res = 0 - MASK_OUT_ABOVE_32(*r_dst) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(*r_dst, 0, res); - FLAG_V = (*r_dst & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - *r_dst = res; -} - - -static void m68k_op_negx_32_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_negx_32_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_negx_32_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_negx_32_di(void) -{ - uint ea = EA_AY_DI_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_negx_32_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_negx_32_aw(void) -{ - uint ea = EA_AW_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_negx_32_al(void) -{ - uint ea = EA_AL_32(); - uint src = m68ki_read_32(ea); - uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, 0, res); - FLAG_V = (src & res)>>24; - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_nop(void) -{ -} - - -static void m68k_op_not_8_d(void) -{ - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_8(~*r_dst); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_di(void) -{ - uint ea = EA_AY_DI_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_aw(void) -{ - uint ea = EA_AW_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_8_al(void) -{ - uint ea = EA_AL_8(); - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_d(void) -{ - uint* r_dst = &DY; - uint res = MASK_OUT_ABOVE_16(~*r_dst); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_aw(void) -{ - uint ea = EA_AW_16(); - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_16_al(void) -{ - uint ea = EA_AL_16(); - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_d(void) -{ - uint* r_dst = &DY; - uint res = *r_dst = MASK_OUT_ABOVE_32(~*r_dst); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_di(void) -{ - uint ea = EA_AY_DI_32(); - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_aw(void) -{ - uint ea = EA_AW_32(); - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_not_32_al(void) -{ - uint ea = EA_AL_32(); - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_d(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= MASK_OUT_ABOVE_8(DY))); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_ai(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_AI_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_pi(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PI_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_pi7(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PI_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_pd(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_PD_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_pd7(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_A7_PD_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_di(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_DI_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_ix(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_AY_IX_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_aw(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_AW_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_al(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_AL_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_pcdi(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCDI_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_pcix(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_PCIX_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_er_i(void) -{ - uint res = MASK_OUT_ABOVE_8((DX |= OPER_I_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_d(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= MASK_OUT_ABOVE_16(DY))); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_ai(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_AI_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_pi(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PI_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_pd(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_PD_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_di(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_DI_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_ix(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_AY_IX_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_aw(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_AW_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_al(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_AL_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_pcdi(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCDI_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_pcix(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_PCIX_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_er_i(void) -{ - uint res = MASK_OUT_ABOVE_16((DX |= OPER_I_16())); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_d(void) -{ - uint res = DX |= DY; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_ai(void) -{ - uint res = DX |= OPER_AY_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_pi(void) -{ - uint res = DX |= OPER_AY_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_pd(void) -{ - uint res = DX |= OPER_AY_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_di(void) -{ - uint res = DX |= OPER_AY_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_ix(void) -{ - uint res = DX |= OPER_AY_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_aw(void) -{ - uint res = DX |= OPER_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_al(void) -{ - uint res = DX |= OPER_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_pcdi(void) -{ - uint res = DX |= OPER_PCDI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_pcix(void) -{ - uint res = DX |= OPER_PCIX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_er_i(void) -{ - uint res = DX |= OPER_I_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_di(void) -{ - uint ea = EA_AY_DI_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_aw(void) -{ - uint ea = EA_AW_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_8_re_al(void) -{ - uint ea = EA_AL_8(); - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_re_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_re_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_re_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_re_di(void) -{ - uint ea = EA_AY_DI_16(); - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_re_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_re_aw(void) -{ - uint ea = EA_AW_16(); - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_16_re_al(void) -{ - uint ea = EA_AL_16(); - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_re_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint res = DX | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_re_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint res = DX | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_re_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint res = DX | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_re_di(void) -{ - uint ea = EA_AY_DI_32(); - uint res = DX | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_re_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint res = DX | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_re_aw(void) -{ - uint ea = EA_AW_32(); - uint res = DX | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_or_32_re_al(void) -{ - uint ea = EA_AL_32(); - uint res = DX | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_d(void) -{ - uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8())); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_ai(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_AI_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_pi(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PI_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_pi7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PI_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_pd(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PD_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_pd7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PD_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_di(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_DI_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_ix(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_IX_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_aw(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AW_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_8_al(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AL_8(); - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); - - m68ki_write_8(ea, res); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16()); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_ai(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_AI_16(); - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_pi(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PI_16(); - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_pd(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PD_16(); - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_di(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_DI_16(); - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_ix(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_IX_16(); - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_aw(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AW_16(); - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_al(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AL_16(); - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_d(void) -{ - uint res = DY |= OPER_I_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_ai(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_AI_32(); - uint res = src | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_pi(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PI_32(); - uint res = src | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_pd(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PD_32(); - uint res = src | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_di(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_DI_32(); - uint res = src | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_ix(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_IX_32(); - uint res = src | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_aw(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AW_32(); - uint res = src | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_32_al(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AL_32(); - uint res = src | m68ki_read_32(ea); - - m68ki_write_32(ea, res); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ori_16_toc(void) -{ - m68ki_set_ccr(m68ki_get_ccr() | OPER_I_16()); -} - - -static void m68k_op_ori_16_tos(void) -{ - if(FLAG_S) - { - uint src = OPER_I_16(); - m68ki_set_sr(m68ki_get_sr() | src); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_pea_32_ai(void) -{ - uint ea = EA_AY_AI_32(); - - m68ki_push_32(ea); -} - - -static void m68k_op_pea_32_di(void) -{ - uint ea = EA_AY_DI_32(); - - m68ki_push_32(ea); -} - - -static void m68k_op_pea_32_ix(void) -{ - uint ea = EA_AY_IX_32(); - - m68ki_push_32(ea); -} - - -static void m68k_op_pea_32_aw(void) -{ - uint ea = EA_AW_32(); - - m68ki_push_32(ea); -} - - -static void m68k_op_pea_32_al(void) -{ - uint ea = EA_AL_32(); - - m68ki_push_32(ea); -} - - -static void m68k_op_pea_32_pcdi(void) -{ - uint ea = EA_PCDI_32(); - - m68ki_push_32(ea); -} - - -static void m68k_op_pea_32_pcix(void) -{ - uint ea = EA_PCIX_32(); - - m68ki_push_32(ea); -} - - -static void m68k_op_reset(void) -{ - if(FLAG_S) - { - m68ki_output_reset() /* auto-disable (see m68kcpu.h) */ - USE_CYCLES(CYC_RESET); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_ror_8_s(void) -{ - uint* r_dst = &DY; - uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint shift = orig_shift & 7; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROR_8(src, shift); - - if(orig_shift != 0) - USE_CYCLES(orig_shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = src << (9-orig_shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = ROR_16(src, shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << (9-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_32_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint64 src = *r_dst; - uint res = ROR_32(src, shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = src << (9-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_8_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift & 7; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROR_8(src, shift); - - if(orig_shift != 0) - { - USE_CYCLES(orig_shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - FLAG_C = src << (8-((shift-1)&7)); - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_8(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift & 15; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = ROR_16(src, shift); - - if(orig_shift != 0) - { - USE_CYCLES(orig_shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - FLAG_C = (src >> ((shift - 1) & 15)) << 8; - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_16(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_32_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift & 31; - uint64 src = *r_dst; - uint res = ROR_32(src, shift); - - if(orig_shift != 0) - { - USE_CYCLES(orig_shift * CYC_SHIFT); - - *r_dst = res; - FLAG_C = (src >> ((shift - 1) & 31)) << 8; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_32(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_16(src, 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_16(src, 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_16(src, 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_16(src, 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_16(src, 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_16(src, 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_ror_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_16(src, 1); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src << 8; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_8_s(void) -{ - uint* r_dst = &DY; - uint orig_shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint shift = orig_shift & 7; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROL_8(src, shift); - - if(orig_shift != 0) - USE_CYCLES(orig_shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_C = src << orig_shift; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = ROL_16(src, shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> (8-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_32_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint64 src = *r_dst; - uint res = ROL_32(src, shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_C = src >> (24-shift); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_8_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift & 7; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROL_8(src, shift); - - if(orig_shift != 0) - { - USE_CYCLES(orig_shift * CYC_SHIFT); - - if(shift != 0) - { - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - FLAG_C = src << shift; - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - FLAG_C = (src & 1)<<8; - FLAG_N = NFLAG_8(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_8(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift & 15; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, shift)); - - if(orig_shift != 0) - { - USE_CYCLES(orig_shift * CYC_SHIFT); - - if(shift != 0) - { - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - FLAG_C = (src << shift) >> 8; - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - FLAG_C = (src & 1)<<8; - FLAG_N = NFLAG_16(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_16(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_32_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift & 31; - uint64 src = *r_dst; - uint res = ROL_32(src, shift); - - if(orig_shift != 0) - { - USE_CYCLES(orig_shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_C = (src >> ((32 - shift) & 0x1f)) << 8; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = CFLAG_CLEAR; - FLAG_N = NFLAG_32(src); - FLAG_Z = src; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rol_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_C = src >> 7; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_8_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res; - res = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_32_s(void) -{ -#if M68K_USE_64_BIT - - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint64 src = *r_dst; - uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - res = ROR_33_64(res, shift); - - FLAG_C = FLAG_X = res >> 24; - res = MASK_OUT_ABOVE_32(res); - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - -#else - - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift))); - uint new_x_flag = src & (1 << (shift - 1)); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_C = FLAG_X = (new_x_flag != 0)<<8; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - -#endif -} - - -static void m68k_op_roxr_8_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - - if(orig_shift != 0) - { - uint shift = orig_shift % 9; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift); - - USE_CYCLES(orig_shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res; - res = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = FLAG_X; - FLAG_N = NFLAG_8(*r_dst); - FLAG_Z = MASK_OUT_ABOVE_8(*r_dst); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - - if(orig_shift != 0) - { - uint shift = orig_shift % 17; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift); - - USE_CYCLES(orig_shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = FLAG_X; - FLAG_N = NFLAG_16(*r_dst); - FLAG_Z = MASK_OUT_ABOVE_16(*r_dst); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_32_r(void) -{ -#if M68K_USE_64_BIT - - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - - if(orig_shift != 0) - { - uint shift = orig_shift % 33; - uint64 src = *r_dst; - uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); - - res = ROR_33_64(res, shift); - - USE_CYCLES(orig_shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res >> 24; - res = MASK_OUT_ABOVE_32(res); - - *r_dst = res; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = FLAG_X; - FLAG_N = NFLAG_32(*r_dst); - FLAG_Z = *r_dst; - FLAG_V = VFLAG_CLEAR; - -#else - - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift % 33; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32((ROR_33(src, shift) & ~(1 << (32 - shift))) | (XFLAG_AS_1() << (32 - shift))); - uint new_x_flag = src & (1 << (shift - 1)); - - if(orig_shift != 0) - USE_CYCLES(orig_shift * CYC_SHIFT); - - if(shift != 0) - { - *r_dst = res; - FLAG_X = (new_x_flag != 0)<<8; - } - else - res = src; - FLAG_C = FLAG_X; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - -#endif -} - - -static void m68k_op_roxr_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxr_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_8_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res; - res = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_s(void) -{ - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_32_s(void) -{ -#if M68K_USE_64_BIT - - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint64 src = *r_dst; - uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - res = ROL_33_64(res, shift); - - FLAG_C = FLAG_X = res >> 24; - res = MASK_OUT_ABOVE_32(res); - - *r_dst = res; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - -#else - - uint* r_dst = &DY; - uint shift = (((REG_IR >> 9) - 1) & 7) + 1; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1))); - uint new_x_flag = src & (1 << (32 - shift)); - - if(shift != 0) - USE_CYCLES(shift * CYC_SHIFT); - - *r_dst = res; - - FLAG_C = FLAG_X = (new_x_flag != 0)<<8; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - -#endif -} - - -static void m68k_op_roxl_8_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - - - if(orig_shift != 0) - { - uint shift = orig_shift % 9; - uint src = MASK_OUT_ABOVE_8(*r_dst); - uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift); - - USE_CYCLES(orig_shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res; - res = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = FLAG_X; - FLAG_N = NFLAG_8(*r_dst); - FLAG_Z = MASK_OUT_ABOVE_8(*r_dst); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_r(void) -{ - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - - if(orig_shift != 0) - { - uint shift = orig_shift % 17; - uint src = MASK_OUT_ABOVE_16(*r_dst); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift); - - USE_CYCLES(orig_shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = FLAG_X; - FLAG_N = NFLAG_16(*r_dst); - FLAG_Z = MASK_OUT_ABOVE_16(*r_dst); - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_32_r(void) -{ -#if M68K_USE_64_BIT - - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - - if(orig_shift != 0) - { - uint shift = orig_shift % 33; - uint64 src = *r_dst; - uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); - - res = ROL_33_64(res, shift); - - USE_CYCLES(orig_shift * CYC_SHIFT); - - FLAG_C = FLAG_X = res >> 24; - res = MASK_OUT_ABOVE_32(res); - - *r_dst = res; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - return; - } - - FLAG_C = FLAG_X; - FLAG_N = NFLAG_32(*r_dst); - FLAG_Z = *r_dst; - FLAG_V = VFLAG_CLEAR; - -#else - - uint* r_dst = &DY; - uint orig_shift = DX & 0x3f; - uint shift = orig_shift % 33; - uint src = *r_dst; - uint res = MASK_OUT_ABOVE_32((ROL_33(src, shift) & ~(1 << (shift - 1))) | (XFLAG_AS_1() << (shift - 1))); - uint new_x_flag = src & (1 << (32 - shift)); - - if(orig_shift != 0) - USE_CYCLES(orig_shift * CYC_SHIFT); - - if(shift != 0) - { - *r_dst = res; - FLAG_X = (new_x_flag != 0)<<8; - } - else - res = src; - FLAG_C = FLAG_X; - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - -#endif -} - - -static void m68k_op_roxl_16_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = m68ki_read_16(ea); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = m68ki_read_16(ea); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = m68ki_read_16(ea); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = m68ki_read_16(ea); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = m68ki_read_16(ea); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_aw(void) -{ - uint ea = EA_AW_16(); - uint src = m68ki_read_16(ea); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_roxl_16_al(void) -{ - uint ea = EA_AL_16(); - uint src = m68ki_read_16(ea); - uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); - - FLAG_C = FLAG_X = res >> 8; - res = MASK_OUT_ABOVE_16(res); - - m68ki_write_16(ea, res); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_rte_32(void) -{ - if(FLAG_S) - { - uint new_sr; - uint new_pc; - - new_sr = m68ki_pull_16(); - new_pc = m68ki_pull_32(); - m68ki_jump(new_pc); - m68ki_set_sr(new_sr); - -#if M68K_EMULATE_ADDRESS_ERROR - CPU_INSTR_MODE = INSTRUCTION_YES; - CPU_RUN_MODE = RUN_MODE_NORMAL; -#endif - - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_rtr_32(void) -{ - m68ki_set_ccr(m68ki_pull_16()); - m68ki_jump(m68ki_pull_32()); -} - - -static void m68k_op_rts_32(void) -{ - m68ki_jump(m68ki_pull_32()); -} - - -static void m68k_op_sbcd_8_rr(void) -{ - uint* r_dst = &DX; - uint src = DY; - uint dst = *r_dst; - uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); - -/* FLAG_V = ~res; */ /* Undefined V behavior */ - FLAG_V = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to assume cleared. */ - - if(res > 9) - res -= 6; - res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); - if(res > 0x99) - { - res += 0xa0; - FLAG_X = FLAG_C = CFLAG_SET; - FLAG_N = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ - } - else - FLAG_N = FLAG_X = FLAG_C = 0; - - res = MASK_OUT_ABOVE_8(res); - -/* FLAG_V &= res; */ /* Undefined V behavior part II */ -/* FLAG_N = NFLAG_8(res); */ /* Undefined N behavior */ - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; -} - - -static void m68k_op_sbcd_8_mm_ax7(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); - -/* FLAG_V = ~res; */ /* Undefined V behavior */ - FLAG_V = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ - - if(res > 9) - res -= 6; - res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); - if(res > 0x99) - { - res += 0xa0; - FLAG_X = FLAG_C = CFLAG_SET; - FLAG_N = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ - } - else - FLAG_N = FLAG_X = FLAG_C = 0; - - res = MASK_OUT_ABOVE_8(res); - -/* FLAG_V &= res; */ /* Undefined V behavior part II */ -/* FLAG_N = NFLAG_8(res); */ /* Undefined N behavior */ - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_sbcd_8_mm_ay7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); - -/* FLAG_V = ~res; */ /* Undefined V behavior */ - FLAG_V = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ - - if(res > 9) - res -= 6; - res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); - if(res > 0x99) - { - res += 0xa0; - FLAG_X = FLAG_C = CFLAG_SET; - FLAG_N = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ - } - else - FLAG_N = FLAG_X = FLAG_C = 0; - - res = MASK_OUT_ABOVE_8(res); - -/* FLAG_V &= res; */ /* Undefined V behavior part II */ -/* FLAG_N = NFLAG_8(res); */ /* Undefined N behavior */ - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_sbcd_8_mm_axy7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); - -/* FLAG_V = ~res; */ /* Undefined V behavior */ - FLAG_V = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ - - if(res > 9) - res -= 6; - res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); - if(res > 0x99) - { - res += 0xa0; - FLAG_X = FLAG_C = CFLAG_SET; - FLAG_N = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ - } - else - FLAG_N = FLAG_X = FLAG_C = 0; - - res = MASK_OUT_ABOVE_8(res); - -/* FLAG_V &= res; */ /* Undefined V behavior part II */ -/* FLAG_N = NFLAG_8(res); */ /* Undefined N behavior */ - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_sbcd_8_mm(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); - -/* FLAG_V = ~res; */ /* Undefined V behavior */ - FLAG_V = VFLAG_CLEAR; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to return zero. */ - - if(res > 9) - res -= 6; - res += HIGH_NIBBLE(dst) - HIGH_NIBBLE(src); - if(res > 0x99) - { - res += 0xa0; - FLAG_X = FLAG_C = CFLAG_SET; - FLAG_N = NFLAG_SET; /* Undefined in Motorola's M68000PM/AD rev.1 and safer to follow carry. */ - } - else - FLAG_N = FLAG_X = FLAG_C = 0; - - res = MASK_OUT_ABOVE_8(res); - -/* FLAG_V &= res; */ /* Undefined V behavior part II */ -/* FLAG_N = NFLAG_8(res); */ /* Undefined N behavior */ - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_st_8_d(void) -{ - DY |= 0xff; -} - - -static void m68k_op_st_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), 0xff); -} - - -static void m68k_op_st_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), 0xff); -} - - -static void m68k_op_st_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), 0xff); -} - - -static void m68k_op_st_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), 0xff); -} - - -static void m68k_op_st_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), 0xff); -} - - -static void m68k_op_st_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), 0xff); -} - - -static void m68k_op_st_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), 0xff); -} - - -static void m68k_op_st_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), 0xff); -} - - -static void m68k_op_st_8_al(void) -{ - m68ki_write_8(EA_AL_8(), 0xff); -} - - -static void m68k_op_sf_8_d(void) -{ - DY &= 0xffffff00; -} - - -static void m68k_op_sf_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), 0); -} - - -static void m68k_op_sf_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), 0); -} - - -static void m68k_op_sf_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), 0); -} - - -static void m68k_op_sf_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), 0); -} - - -static void m68k_op_sf_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), 0); -} - - -static void m68k_op_sf_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), 0); -} - - -static void m68k_op_sf_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), 0); -} - - -static void m68k_op_sf_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), 0); -} - - -static void m68k_op_sf_8_al(void) -{ - m68ki_write_8(EA_AL_8(), 0); -} - - -static void m68k_op_shi_8_d(void) -{ - if(COND_HI()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_sls_8_d(void) -{ - if(COND_LS()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_scc_8_d(void) -{ - if(COND_CC()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_scs_8_d(void) -{ - if(COND_CS()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_sne_8_d(void) -{ - if(COND_NE()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_seq_8_d(void) -{ - if(COND_EQ()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_svc_8_d(void) -{ - if(COND_VC()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_svs_8_d(void) -{ - if(COND_VS()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_spl_8_d(void) -{ - if(COND_PL()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_smi_8_d(void) -{ - if(COND_MI()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_sge_8_d(void) -{ - if(COND_GE()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_slt_8_d(void) -{ - if(COND_LT()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_sgt_8_d(void) -{ - if(COND_GT()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_sle_8_d(void) -{ - if(COND_LE()) - { - DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); - return; - } - DY &= 0xffffff00; -} - - -static void m68k_op_shi_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_shi_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_HI() ? 0xff : 0); -} - - -static void m68k_op_sls_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_sls_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_LS() ? 0xff : 0); -} - - -static void m68k_op_scc_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scc_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_CC() ? 0xff : 0); -} - - -static void m68k_op_scs_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_scs_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_CS() ? 0xff : 0); -} - - -static void m68k_op_sne_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_sne_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_NE() ? 0xff : 0); -} - - -static void m68k_op_seq_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_seq_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_EQ() ? 0xff : 0); -} - - -static void m68k_op_svc_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svc_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_VC() ? 0xff : 0); -} - - -static void m68k_op_svs_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_svs_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_VS() ? 0xff : 0); -} - - -static void m68k_op_spl_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_spl_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_PL() ? 0xff : 0); -} - - -static void m68k_op_smi_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_smi_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_MI() ? 0xff : 0); -} - - -static void m68k_op_sge_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_sge_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_GE() ? 0xff : 0); -} - - -static void m68k_op_slt_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_slt_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_LT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sgt_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_GT() ? 0xff : 0); -} - - -static void m68k_op_sle_8_ai(void) -{ - m68ki_write_8(EA_AY_AI_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_pi(void) -{ - m68ki_write_8(EA_AY_PI_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_pi7(void) -{ - m68ki_write_8(EA_A7_PI_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_pd(void) -{ - m68ki_write_8(EA_AY_PD_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_pd7(void) -{ - m68ki_write_8(EA_A7_PD_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_di(void) -{ - m68ki_write_8(EA_AY_DI_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_ix(void) -{ - m68ki_write_8(EA_AY_IX_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_aw(void) -{ - m68ki_write_8(EA_AW_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_sle_8_al(void) -{ - m68ki_write_8(EA_AL_8(), COND_LE() ? 0xff : 0); -} - - -static void m68k_op_stop(void) -{ - if(FLAG_S) - { - uint new_sr = OPER_I_16(); - CPU_STOPPED |= STOP_LEVEL_STOP; - m68ki_set_sr(new_sr); - SET_CYCLES(m68ki_cpu.cycle_end - 4*MUL); - return; - } - m68ki_exception_privilege_violation(); -} - - -static void m68k_op_sub_8_er_d(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_8(DY); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_pi7(void) -{ - uint* r_dst = &DX; - uint src = OPER_A7_PI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_pd7(void) -{ - uint* r_dst = &DX; - uint src = OPER_A7_PD_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_8_er_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_d(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(DY); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_a(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(AY); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_16_er_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_sub_32_er_d(void) -{ - uint* r_dst = &DX; - uint src = DY; - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_a(void) -{ - uint* r_dst = &DX; - uint src = AY; - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_ai(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_AI_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_pi(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PI_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_pd(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_PD_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_di(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_DI_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_ix(void) -{ - uint* r_dst = &DX; - uint src = OPER_AY_IX_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_aw(void) -{ - uint* r_dst = &DX; - uint src = OPER_AW_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_al(void) -{ - uint* r_dst = &DX; - uint src = OPER_AL_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_pcdi(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCDI_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_pcix(void) -{ - uint* r_dst = &DX; - uint src = OPER_PCIX_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_32_er_i(void) -{ - uint* r_dst = &DX; - uint src = OPER_I_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_sub_8_re_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_di(void) -{ - uint ea = EA_AY_DI_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_aw(void) -{ - uint ea = EA_AW_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_8_re_al(void) -{ - uint ea = EA_AL_8(); - uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_sub_16_re_ai(void) -{ - uint ea = EA_AY_AI_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_sub_16_re_pi(void) -{ - uint ea = EA_AY_PI_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_sub_16_re_pd(void) -{ - uint ea = EA_AY_PD_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_sub_16_re_di(void) -{ - uint ea = EA_AY_DI_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_sub_16_re_ix(void) -{ - uint ea = EA_AY_IX_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_sub_16_re_aw(void) -{ - uint ea = EA_AW_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_sub_16_re_al(void) -{ - uint ea = EA_AL_16(); - uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_sub_32_re_ai(void) -{ - uint ea = EA_AY_AI_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_sub_32_re_pi(void) -{ - uint ea = EA_AY_PI_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_sub_32_re_pd(void) -{ - uint ea = EA_AY_PD_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_sub_32_re_di(void) -{ - uint ea = EA_AY_DI_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_sub_32_re_ix(void) -{ - uint ea = EA_AY_IX_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_sub_32_re_aw(void) -{ - uint ea = EA_AW_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_sub_32_re_al(void) -{ - uint ea = EA_AL_32(); - uint src = DX; - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_suba_16_d(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(DY)); -} - - -static void m68k_op_suba_16_a(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - MAKE_INT_16(AY)); -} - - -static void m68k_op_suba_16_ai(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_AI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_pi(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_PI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_pd(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_PD_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_di(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_DI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_ix(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AY_IX_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_aw(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AW_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_al(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_AL_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_pcdi(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_PCDI_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_pcix(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_PCIX_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_16_i(void) -{ - uint* r_dst = &AX; - uint src = MAKE_INT_16(OPER_I_16()); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_d(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - DY); -} - - -static void m68k_op_suba_32_a(void) -{ - uint* r_dst = &AX; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - AY); -} - - -static void m68k_op_suba_32_ai(void) -{ - uint* r_dst = &AX; - uint src = OPER_AY_AI_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_pi(void) -{ - uint* r_dst = &AX; - uint src = OPER_AY_PI_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_pd(void) -{ - uint* r_dst = &AX; - uint src = OPER_AY_PD_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_di(void) -{ - uint* r_dst = &AX; - uint src = OPER_AY_DI_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_ix(void) -{ - uint* r_dst = &AX; - uint src = OPER_AY_IX_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_aw(void) -{ - uint* r_dst = &AX; - uint src = OPER_AW_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_al(void) -{ - uint* r_dst = &AX; - uint src = OPER_AL_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_pcdi(void) -{ - uint* r_dst = &AX; - uint src = OPER_PCDI_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_pcix(void) -{ - uint* r_dst = &AX; - uint src = OPER_PCIX_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_suba_32_i(void) -{ - uint* r_dst = &AX; - uint src = OPER_I_32(); - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - src); -} - - -static void m68k_op_subi_8_d(void) -{ - uint* r_dst = &DY; - uint src = OPER_I_8(); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_subi_8_ai(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_AI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_pi(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_pi7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_pd(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_pd7(void) -{ - uint src = OPER_I_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_di(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_DI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_ix(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AY_IX_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_aw(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AW_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_8_al(void) -{ - uint src = OPER_I_8(); - uint ea = EA_AL_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subi_16_d(void) -{ - uint* r_dst = &DY; - uint src = OPER_I_16(); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_subi_16_ai(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_AI_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subi_16_pi(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PI_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subi_16_pd(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_PD_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subi_16_di(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_DI_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subi_16_ix(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AY_IX_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subi_16_aw(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AW_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subi_16_al(void) -{ - uint src = OPER_I_16(); - uint ea = EA_AL_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subi_32_d(void) -{ - uint* r_dst = &DY; - uint src = OPER_I_32(); - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_subi_32_ai(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_AI_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subi_32_pi(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PI_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subi_32_pd(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_PD_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subi_32_di(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_DI_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subi_32_ix(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AY_IX_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subi_32_aw(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AW_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subi_32_al(void) -{ - uint src = OPER_I_32(); - uint ea = EA_AL_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_d(void) -{ - uint* r_dst = &DY; - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | FLAG_Z; -} - - -static void m68k_op_subq_8_ai(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_AI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_pi(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_pi7(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_A7_PI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_pd(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_pd7(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_di(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_DI_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_ix(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_IX_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_aw(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AW_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_8_al(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AL_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src; - - FLAG_N = NFLAG_8(res); - FLAG_Z = MASK_OUT_ABOVE_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - m68ki_write_8(ea, FLAG_Z); -} - - -static void m68k_op_subq_16_d(void) -{ - uint* r_dst = &DY; - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | FLAG_Z; -} - - -static void m68k_op_subq_16_a(void) -{ - uint* r_dst = &AY; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1)); -} - - -static void m68k_op_subq_16_ai(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_AI_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subq_16_pi(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PI_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subq_16_pd(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PD_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subq_16_di(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_DI_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subq_16_ix(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_IX_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subq_16_aw(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AW_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subq_16_al(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AL_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src; - - FLAG_N = NFLAG_16(res); - FLAG_Z = MASK_OUT_ABOVE_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - m68ki_write_16(ea, FLAG_Z); -} - - -static void m68k_op_subq_32_d(void) -{ - uint* r_dst = &DY; - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint dst = *r_dst; - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - *r_dst = FLAG_Z; -} - - -static void m68k_op_subq_32_a(void) -{ - uint* r_dst = &AY; - - *r_dst = MASK_OUT_ABOVE_32(*r_dst - ((((REG_IR >> 9) - 1) & 7) + 1)); -} - - -static void m68k_op_subq_32_ai(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_AI_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subq_32_pi(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PI_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subq_32_pd(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_PD_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subq_32_di(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_DI_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subq_32_ix(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AY_IX_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subq_32_aw(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AW_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subq_32_al(void) -{ - uint src = (((REG_IR >> 9) - 1) & 7) + 1; - uint ea = EA_AL_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src; - - FLAG_N = NFLAG_32(res); - FLAG_Z = MASK_OUT_ABOVE_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - m68ki_write_32(ea, FLAG_Z); -} - - -static void m68k_op_subx_8_rr(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_8(DY); - uint dst = MASK_OUT_ABOVE_8(*r_dst); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; -} - - -static void m68k_op_subx_16_rr(void) -{ - uint* r_dst = &DX; - uint src = MASK_OUT_ABOVE_16(DY); - uint dst = MASK_OUT_ABOVE_16(*r_dst); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; -} - - -static void m68k_op_subx_32_rr(void) -{ - uint* r_dst = &DX; - uint src = DY; - uint dst = *r_dst; - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - *r_dst = res; -} - - -static void m68k_op_subx_8_mm_ax7(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_subx_8_mm_ay7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_subx_8_mm_axy7(void) -{ - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_subx_8_mm(void) -{ - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_8(res); - FLAG_X = FLAG_C = CFLAG_8(res); - FLAG_V = VFLAG_SUB_8(src, dst, res); - - res = MASK_OUT_ABOVE_8(res); - FLAG_Z |= res; - - m68ki_write_8(ea, res); -} - - -static void m68k_op_subx_16_mm(void) -{ - uint src = OPER_AY_PD_16(); - uint ea = EA_AX_PD_16(); - uint dst = m68ki_read_16(ea); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_16(res); - FLAG_X = FLAG_C = CFLAG_16(res); - FLAG_V = VFLAG_SUB_16(src, dst, res); - - res = MASK_OUT_ABOVE_16(res); - FLAG_Z |= res; - - m68ki_write_16(ea, res); -} - - -static void m68k_op_subx_32_mm(void) -{ - uint src = OPER_AY_PD_32(); - uint ea = EA_AX_PD_32(); - uint dst = m68ki_read_32(ea); - uint res = dst - src - XFLAG_AS_1(); - - FLAG_N = NFLAG_32(res); - FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); - FLAG_V = VFLAG_SUB_32(src, dst, res); - - res = MASK_OUT_ABOVE_32(res); - FLAG_Z |= res; - - m68ki_write_32(ea, res); -} - - -static void m68k_op_swap_32(void) -{ - uint* r_dst = &DY; - - FLAG_Z = MASK_OUT_ABOVE_32(*r_dst<<16); - *r_dst = (*r_dst>>16) | FLAG_Z; - - FLAG_Z = *r_dst; - FLAG_N = NFLAG_32(*r_dst); - FLAG_C = CFLAG_CLEAR; - FLAG_V = VFLAG_CLEAR; -} - - -static void m68k_op_tas_8_d(void) -{ - uint* r_dst = &DY; - - FLAG_Z = MASK_OUT_ABOVE_8(*r_dst); - FLAG_N = NFLAG_8(*r_dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - *r_dst |= 0x80; -} - - -static void m68k_op_tas_8_ai(void) -{ - uint ea = EA_AY_AI_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_pi(void) -{ - uint ea = EA_AY_PI_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_pi7(void) -{ - uint ea = EA_A7_PI_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_pd(void) -{ - uint ea = EA_AY_PD_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_pd7(void) -{ - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_di(void) -{ - uint ea = EA_AY_DI_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_ix(void) -{ - uint ea = EA_AY_IX_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_aw(void) -{ - uint ea = EA_AW_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_tas_8_al(void) -{ - uint ea = EA_AL_8(); - uint dst = m68ki_read_8(ea); - - FLAG_Z = dst; - FLAG_N = NFLAG_8(dst); - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; - - /* The Genesis/Megadrive games Gargoyles and Ex-Mutants need the TAS writeback - disabled in order to function properly. Some Amiga software may also rely - on this, but only when accessing specific addresses so additional functionality - will be needed. */ - if (m68ki_tas_callback()) m68ki_write_8(ea, dst | 0x80); -} - - -static void m68k_op_trap(void) -{ - /* Trap#n stacks exception frame type 0 */ - m68ki_exception_trapN(EXCEPTION_TRAP_BASE + (REG_IR & 0xf)); /* HJB 990403 */ -} - - -static void m68k_op_trapv(void) -{ - if(COND_VC()) - { - return; - } - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ -} - - -static void m68k_op_tst_8_d(void) -{ - uint res = MASK_OUT_ABOVE_8(DY); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_ai(void) -{ - uint res = OPER_AY_AI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_pi(void) -{ - uint res = OPER_AY_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_pi7(void) -{ - uint res = OPER_A7_PI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_pd(void) -{ - uint res = OPER_AY_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_pd7(void) -{ - uint res = OPER_A7_PD_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_di(void) -{ - uint res = OPER_AY_DI_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_ix(void) -{ - uint res = OPER_AY_IX_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_aw(void) -{ - uint res = OPER_AW_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_8_al(void) -{ - uint res = OPER_AL_8(); - - FLAG_N = NFLAG_8(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_d(void) -{ - uint res = MASK_OUT_ABOVE_16(DY); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_ai(void) -{ - uint res = OPER_AY_AI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_pi(void) -{ - uint res = OPER_AY_PI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_pd(void) -{ - uint res = OPER_AY_PD_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_di(void) -{ - uint res = OPER_AY_DI_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_ix(void) -{ - uint res = OPER_AY_IX_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_aw(void) -{ - uint res = OPER_AW_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_16_al(void) -{ - uint res = OPER_AL_16(); - - FLAG_N = NFLAG_16(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_d(void) -{ - uint res = DY; - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_ai(void) -{ - uint res = OPER_AY_AI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_pi(void) -{ - uint res = OPER_AY_PI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_pd(void) -{ - uint res = OPER_AY_PD_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_di(void) -{ - uint res = OPER_AY_DI_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_ix(void) -{ - uint res = OPER_AY_IX_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_aw(void) -{ - uint res = OPER_AW_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_tst_32_al(void) -{ - uint res = OPER_AL_32(); - - FLAG_N = NFLAG_32(res); - FLAG_Z = res; - FLAG_V = VFLAG_CLEAR; - FLAG_C = CFLAG_CLEAR; -} - - -static void m68k_op_unlk_32_a7(void) -{ - REG_A[7] = m68ki_read_32(REG_A[7]); -} - - -static void m68k_op_unlk_32(void) -{ - uint* r_dst = &AY; - - REG_A[7] = *r_dst; - *r_dst = m68ki_pull_32(); -} - - -/* ======================================================================== */ -/* ========================= OPCODE TABLE BUILDER ========================= */ -/* ======================================================================== */ - -#ifndef BUILD_TABLES - -#include "m68ki_instruction_jump_table.h" - -#else - -/* This is used to generate the opcode handler jump table */ -typedef struct -{ - void (*opcode_handler)(void); /* handler function */ - unsigned int mask; /* mask on opcode */ - unsigned int match; /* what to match after masking */ - unsigned char cycles; /* cycles each cpu type takes */ -} opcode_handler_struct; - -/* opcode handler jump table */ -static void (*m68ki_instruction_jump_table[0x10000])(void); - -/* Opcode handler table */ -static const opcode_handler_struct m68k_opcode_handler_table[] = -{ -/* function mask match cyc */ - {m68k_op_1010 , 0xf000, 0xa000, 4}, - {m68k_op_1111 , 0xf000, 0xf000, 4}, - {m68k_op_moveq_32 , 0xf100, 0x7000, 4}, - {m68k_op_bra_8 , 0xff00, 0x6000, 10}, - {m68k_op_bsr_8 , 0xff00, 0x6100, 18}, - {m68k_op_bhi_8 , 0xff00, 0x6200, 10}, - {m68k_op_bls_8 , 0xff00, 0x6300, 10}, - {m68k_op_bcc_8 , 0xff00, 0x6400, 10}, - {m68k_op_bcs_8 , 0xff00, 0x6500, 10}, - {m68k_op_bne_8 , 0xff00, 0x6600, 10}, - {m68k_op_beq_8 , 0xff00, 0x6700, 10}, - {m68k_op_bvc_8 , 0xff00, 0x6800, 10}, - {m68k_op_bvs_8 , 0xff00, 0x6900, 10}, - {m68k_op_bpl_8 , 0xff00, 0x6a00, 10}, - {m68k_op_bmi_8 , 0xff00, 0x6b00, 10}, - {m68k_op_bge_8 , 0xff00, 0x6c00, 10}, - {m68k_op_blt_8 , 0xff00, 0x6d00, 10}, - {m68k_op_bgt_8 , 0xff00, 0x6e00, 10}, - {m68k_op_ble_8 , 0xff00, 0x6f00, 10}, - {m68k_op_btst_32_r_d , 0xf1f8, 0x0100, 6}, - {m68k_op_movep_16_er , 0xf1f8, 0x0108, 16}, - {m68k_op_btst_8_r_ai , 0xf1f8, 0x0110, 8}, - {m68k_op_btst_8_r_pi , 0xf1f8, 0x0118, 8}, - {m68k_op_btst_8_r_pd , 0xf1f8, 0x0120, 10}, - {m68k_op_btst_8_r_di , 0xf1f8, 0x0128, 12}, - {m68k_op_btst_8_r_ix , 0xf1f8, 0x0130, 14}, - {m68k_op_bchg_32_r_d , 0xf1f8, 0x0140, 8}, - {m68k_op_movep_32_er , 0xf1f8, 0x0148, 24}, - {m68k_op_bchg_8_r_ai , 0xf1f8, 0x0150, 12}, - {m68k_op_bchg_8_r_pi , 0xf1f8, 0x0158, 12}, - {m68k_op_bchg_8_r_pd , 0xf1f8, 0x0160, 14}, - {m68k_op_bchg_8_r_di , 0xf1f8, 0x0168, 16}, - {m68k_op_bchg_8_r_ix , 0xf1f8, 0x0170, 18}, - {m68k_op_bclr_32_r_d , 0xf1f8, 0x0180, 10}, - {m68k_op_movep_16_re , 0xf1f8, 0x0188, 16}, - {m68k_op_bclr_8_r_ai , 0xf1f8, 0x0190, 12}, - {m68k_op_bclr_8_r_pi , 0xf1f8, 0x0198, 12}, - {m68k_op_bclr_8_r_pd , 0xf1f8, 0x01a0, 14}, - {m68k_op_bclr_8_r_di , 0xf1f8, 0x01a8, 16}, - {m68k_op_bclr_8_r_ix , 0xf1f8, 0x01b0, 18}, - {m68k_op_bset_32_r_d , 0xf1f8, 0x01c0, 8}, - {m68k_op_movep_32_re , 0xf1f8, 0x01c8, 24}, - {m68k_op_bset_8_r_ai , 0xf1f8, 0x01d0, 12}, - {m68k_op_bset_8_r_pi , 0xf1f8, 0x01d8, 12}, - {m68k_op_bset_8_r_pd , 0xf1f8, 0x01e0, 14}, - {m68k_op_bset_8_r_di , 0xf1f8, 0x01e8, 16}, - {m68k_op_bset_8_r_ix , 0xf1f8, 0x01f0, 18}, - {m68k_op_move_8_d_d , 0xf1f8, 0x1000, 4}, - {m68k_op_move_8_d_ai , 0xf1f8, 0x1010, 8}, - {m68k_op_move_8_d_pi , 0xf1f8, 0x1018, 8}, - {m68k_op_move_8_d_pd , 0xf1f8, 0x1020, 10}, - {m68k_op_move_8_d_di , 0xf1f8, 0x1028, 12}, - {m68k_op_move_8_d_ix , 0xf1f8, 0x1030, 14}, - {m68k_op_move_8_ai_d , 0xf1f8, 0x1080, 8}, - {m68k_op_move_8_ai_ai , 0xf1f8, 0x1090, 12}, - {m68k_op_move_8_ai_pi , 0xf1f8, 0x1098, 12}, - {m68k_op_move_8_ai_pd , 0xf1f8, 0x10a0, 14}, - {m68k_op_move_8_ai_di , 0xf1f8, 0x10a8, 16}, - {m68k_op_move_8_ai_ix , 0xf1f8, 0x10b0, 18}, - {m68k_op_move_8_pi_d , 0xf1f8, 0x10c0, 8}, - {m68k_op_move_8_pi_ai , 0xf1f8, 0x10d0, 12}, - {m68k_op_move_8_pi_pi , 0xf1f8, 0x10d8, 12}, - {m68k_op_move_8_pi_pd , 0xf1f8, 0x10e0, 14}, - {m68k_op_move_8_pi_di , 0xf1f8, 0x10e8, 16}, - {m68k_op_move_8_pi_ix , 0xf1f8, 0x10f0, 18}, - {m68k_op_move_8_pd_d , 0xf1f8, 0x1100, 8}, - {m68k_op_move_8_pd_ai , 0xf1f8, 0x1110, 12}, - {m68k_op_move_8_pd_pi , 0xf1f8, 0x1118, 12}, - {m68k_op_move_8_pd_pd , 0xf1f8, 0x1120, 14}, - {m68k_op_move_8_pd_di , 0xf1f8, 0x1128, 16}, - {m68k_op_move_8_pd_ix , 0xf1f8, 0x1130, 18}, - {m68k_op_move_8_di_d , 0xf1f8, 0x1140, 12}, - {m68k_op_move_8_di_ai , 0xf1f8, 0x1150, 16}, - {m68k_op_move_8_di_pi , 0xf1f8, 0x1158, 16}, - {m68k_op_move_8_di_pd , 0xf1f8, 0x1160, 18}, - {m68k_op_move_8_di_di , 0xf1f8, 0x1168, 20}, - {m68k_op_move_8_di_ix , 0xf1f8, 0x1170, 22}, - {m68k_op_move_8_ix_d , 0xf1f8, 0x1180, 14}, - {m68k_op_move_8_ix_ai , 0xf1f8, 0x1190, 18}, - {m68k_op_move_8_ix_pi , 0xf1f8, 0x1198, 18}, - {m68k_op_move_8_ix_pd , 0xf1f8, 0x11a0, 20}, - {m68k_op_move_8_ix_di , 0xf1f8, 0x11a8, 22}, - {m68k_op_move_8_ix_ix , 0xf1f8, 0x11b0, 24}, - {m68k_op_move_32_d_d , 0xf1f8, 0x2000, 4}, - {m68k_op_move_32_d_a , 0xf1f8, 0x2008, 4}, - {m68k_op_move_32_d_ai , 0xf1f8, 0x2010, 12}, - {m68k_op_move_32_d_pi , 0xf1f8, 0x2018, 12}, - {m68k_op_move_32_d_pd , 0xf1f8, 0x2020, 14}, - {m68k_op_move_32_d_di , 0xf1f8, 0x2028, 16}, - {m68k_op_move_32_d_ix , 0xf1f8, 0x2030, 18}, - {m68k_op_movea_32_d , 0xf1f8, 0x2040, 4}, - {m68k_op_movea_32_a , 0xf1f8, 0x2048, 4}, - {m68k_op_movea_32_ai , 0xf1f8, 0x2050, 12}, - {m68k_op_movea_32_pi , 0xf1f8, 0x2058, 12}, - {m68k_op_movea_32_pd , 0xf1f8, 0x2060, 14}, - {m68k_op_movea_32_di , 0xf1f8, 0x2068, 16}, - {m68k_op_movea_32_ix , 0xf1f8, 0x2070, 18}, - {m68k_op_move_32_ai_d , 0xf1f8, 0x2080, 12}, - {m68k_op_move_32_ai_a , 0xf1f8, 0x2088, 12}, - {m68k_op_move_32_ai_ai , 0xf1f8, 0x2090, 20}, - {m68k_op_move_32_ai_pi , 0xf1f8, 0x2098, 20}, - {m68k_op_move_32_ai_pd , 0xf1f8, 0x20a0, 22}, - {m68k_op_move_32_ai_di , 0xf1f8, 0x20a8, 24}, - {m68k_op_move_32_ai_ix , 0xf1f8, 0x20b0, 26}, - {m68k_op_move_32_pi_d , 0xf1f8, 0x20c0, 12}, - {m68k_op_move_32_pi_a , 0xf1f8, 0x20c8, 12}, - {m68k_op_move_32_pi_ai , 0xf1f8, 0x20d0, 20}, - {m68k_op_move_32_pi_pi , 0xf1f8, 0x20d8, 20}, - {m68k_op_move_32_pi_pd , 0xf1f8, 0x20e0, 22}, - {m68k_op_move_32_pi_di , 0xf1f8, 0x20e8, 24}, - {m68k_op_move_32_pi_ix , 0xf1f8, 0x20f0, 26}, - {m68k_op_move_32_pd_d , 0xf1f8, 0x2100, 12}, - {m68k_op_move_32_pd_a , 0xf1f8, 0x2108, 12}, - {m68k_op_move_32_pd_ai , 0xf1f8, 0x2110, 20}, - {m68k_op_move_32_pd_pi , 0xf1f8, 0x2118, 20}, - {m68k_op_move_32_pd_pd , 0xf1f8, 0x2120, 22}, - {m68k_op_move_32_pd_di , 0xf1f8, 0x2128, 24}, - {m68k_op_move_32_pd_ix , 0xf1f8, 0x2130, 26}, - {m68k_op_move_32_di_d , 0xf1f8, 0x2140, 16}, - {m68k_op_move_32_di_a , 0xf1f8, 0x2148, 16}, - {m68k_op_move_32_di_ai , 0xf1f8, 0x2150, 24}, - {m68k_op_move_32_di_pi , 0xf1f8, 0x2158, 24}, - {m68k_op_move_32_di_pd , 0xf1f8, 0x2160, 26}, - {m68k_op_move_32_di_di , 0xf1f8, 0x2168, 28}, - {m68k_op_move_32_di_ix , 0xf1f8, 0x2170, 30}, - {m68k_op_move_32_ix_d , 0xf1f8, 0x2180, 18}, - {m68k_op_move_32_ix_a , 0xf1f8, 0x2188, 18}, - {m68k_op_move_32_ix_ai , 0xf1f8, 0x2190, 26}, - {m68k_op_move_32_ix_pi , 0xf1f8, 0x2198, 26}, - {m68k_op_move_32_ix_pd , 0xf1f8, 0x21a0, 28}, - {m68k_op_move_32_ix_di , 0xf1f8, 0x21a8, 30}, - {m68k_op_move_32_ix_ix , 0xf1f8, 0x21b0, 32}, - {m68k_op_move_16_d_d , 0xf1f8, 0x3000, 4}, - {m68k_op_move_16_d_a , 0xf1f8, 0x3008, 4}, - {m68k_op_move_16_d_ai , 0xf1f8, 0x3010, 8}, - {m68k_op_move_16_d_pi , 0xf1f8, 0x3018, 8}, - {m68k_op_move_16_d_pd , 0xf1f8, 0x3020, 10}, - {m68k_op_move_16_d_di , 0xf1f8, 0x3028, 12}, - {m68k_op_move_16_d_ix , 0xf1f8, 0x3030, 14}, - {m68k_op_movea_16_d , 0xf1f8, 0x3040, 4}, - {m68k_op_movea_16_a , 0xf1f8, 0x3048, 4}, - {m68k_op_movea_16_ai , 0xf1f8, 0x3050, 8}, - {m68k_op_movea_16_pi , 0xf1f8, 0x3058, 8}, - {m68k_op_movea_16_pd , 0xf1f8, 0x3060, 10}, - {m68k_op_movea_16_di , 0xf1f8, 0x3068, 12}, - {m68k_op_movea_16_ix , 0xf1f8, 0x3070, 14}, - {m68k_op_move_16_ai_d , 0xf1f8, 0x3080, 8}, - {m68k_op_move_16_ai_a , 0xf1f8, 0x3088, 8}, - {m68k_op_move_16_ai_ai , 0xf1f8, 0x3090, 12}, - {m68k_op_move_16_ai_pi , 0xf1f8, 0x3098, 12}, - {m68k_op_move_16_ai_pd , 0xf1f8, 0x30a0, 14}, - {m68k_op_move_16_ai_di , 0xf1f8, 0x30a8, 16}, - {m68k_op_move_16_ai_ix , 0xf1f8, 0x30b0, 18}, - {m68k_op_move_16_pi_d , 0xf1f8, 0x30c0, 8}, - {m68k_op_move_16_pi_a , 0xf1f8, 0x30c8, 8}, - {m68k_op_move_16_pi_ai , 0xf1f8, 0x30d0, 12}, - {m68k_op_move_16_pi_pi , 0xf1f8, 0x30d8, 12}, - {m68k_op_move_16_pi_pd , 0xf1f8, 0x30e0, 14}, - {m68k_op_move_16_pi_di , 0xf1f8, 0x30e8, 16}, - {m68k_op_move_16_pi_ix , 0xf1f8, 0x30f0, 18}, - {m68k_op_move_16_pd_d , 0xf1f8, 0x3100, 8}, - {m68k_op_move_16_pd_a , 0xf1f8, 0x3108, 8}, - {m68k_op_move_16_pd_ai , 0xf1f8, 0x3110, 12}, - {m68k_op_move_16_pd_pi , 0xf1f8, 0x3118, 12}, - {m68k_op_move_16_pd_pd , 0xf1f8, 0x3120, 14}, - {m68k_op_move_16_pd_di , 0xf1f8, 0x3128, 16}, - {m68k_op_move_16_pd_ix , 0xf1f8, 0x3130, 18}, - {m68k_op_move_16_di_d , 0xf1f8, 0x3140, 12}, - {m68k_op_move_16_di_a , 0xf1f8, 0x3148, 12}, - {m68k_op_move_16_di_ai , 0xf1f8, 0x3150, 16}, - {m68k_op_move_16_di_pi , 0xf1f8, 0x3158, 16}, - {m68k_op_move_16_di_pd , 0xf1f8, 0x3160, 18}, - {m68k_op_move_16_di_di , 0xf1f8, 0x3168, 20}, - {m68k_op_move_16_di_ix , 0xf1f8, 0x3170, 22}, - {m68k_op_move_16_ix_d , 0xf1f8, 0x3180, 14}, - {m68k_op_move_16_ix_a , 0xf1f8, 0x3188, 14}, - {m68k_op_move_16_ix_ai , 0xf1f8, 0x3190, 18}, - {m68k_op_move_16_ix_pi , 0xf1f8, 0x3198, 18}, - {m68k_op_move_16_ix_pd , 0xf1f8, 0x31a0, 20}, - {m68k_op_move_16_ix_di , 0xf1f8, 0x31a8, 22}, - {m68k_op_move_16_ix_ix , 0xf1f8, 0x31b0, 24}, - {m68k_op_chk_16_d , 0xf1f8, 0x4180, 10}, - {m68k_op_chk_16_ai , 0xf1f8, 0x4190, 14}, - {m68k_op_chk_16_pi , 0xf1f8, 0x4198, 14}, - {m68k_op_chk_16_pd , 0xf1f8, 0x41a0, 16}, - {m68k_op_chk_16_di , 0xf1f8, 0x41a8, 18}, - {m68k_op_chk_16_ix , 0xf1f8, 0x41b0, 20}, - {m68k_op_lea_32_ai , 0xf1f8, 0x41d0, 4}, - {m68k_op_lea_32_di , 0xf1f8, 0x41e8, 8}, - {m68k_op_lea_32_ix , 0xf1f8, 0x41f0, 12}, - {m68k_op_addq_8_d , 0xf1f8, 0x5000, 4}, - {m68k_op_addq_8_ai , 0xf1f8, 0x5010, 12}, - {m68k_op_addq_8_pi , 0xf1f8, 0x5018, 12}, - {m68k_op_addq_8_pd , 0xf1f8, 0x5020, 14}, - {m68k_op_addq_8_di , 0xf1f8, 0x5028, 16}, - {m68k_op_addq_8_ix , 0xf1f8, 0x5030, 18}, - {m68k_op_addq_16_d , 0xf1f8, 0x5040, 4}, - {m68k_op_addq_16_a , 0xf1f8, 0x5048, 4}, - {m68k_op_addq_16_ai , 0xf1f8, 0x5050, 12}, - {m68k_op_addq_16_pi , 0xf1f8, 0x5058, 12}, - {m68k_op_addq_16_pd , 0xf1f8, 0x5060, 14}, - {m68k_op_addq_16_di , 0xf1f8, 0x5068, 16}, - {m68k_op_addq_16_ix , 0xf1f8, 0x5070, 18}, - {m68k_op_addq_32_d , 0xf1f8, 0x5080, 8}, - {m68k_op_addq_32_a , 0xf1f8, 0x5088, 8}, - {m68k_op_addq_32_ai , 0xf1f8, 0x5090, 20}, - {m68k_op_addq_32_pi , 0xf1f8, 0x5098, 20}, - {m68k_op_addq_32_pd , 0xf1f8, 0x50a0, 22}, - {m68k_op_addq_32_di , 0xf1f8, 0x50a8, 24}, - {m68k_op_addq_32_ix , 0xf1f8, 0x50b0, 26}, - {m68k_op_subq_8_d , 0xf1f8, 0x5100, 4}, - {m68k_op_subq_8_ai , 0xf1f8, 0x5110, 12}, - {m68k_op_subq_8_pi , 0xf1f8, 0x5118, 12}, - {m68k_op_subq_8_pd , 0xf1f8, 0x5120, 14}, - {m68k_op_subq_8_di , 0xf1f8, 0x5128, 16}, - {m68k_op_subq_8_ix , 0xf1f8, 0x5130, 18}, - {m68k_op_subq_16_d , 0xf1f8, 0x5140, 4}, - {m68k_op_subq_16_a , 0xf1f8, 0x5148, 8}, - {m68k_op_subq_16_ai , 0xf1f8, 0x5150, 12}, - {m68k_op_subq_16_pi , 0xf1f8, 0x5158, 12}, - {m68k_op_subq_16_pd , 0xf1f8, 0x5160, 14}, - {m68k_op_subq_16_di , 0xf1f8, 0x5168, 16}, - {m68k_op_subq_16_ix , 0xf1f8, 0x5170, 18}, - {m68k_op_subq_32_d , 0xf1f8, 0x5180, 8}, - {m68k_op_subq_32_a , 0xf1f8, 0x5188, 8}, - {m68k_op_subq_32_ai , 0xf1f8, 0x5190, 20}, - {m68k_op_subq_32_pi , 0xf1f8, 0x5198, 20}, - {m68k_op_subq_32_pd , 0xf1f8, 0x51a0, 22}, - {m68k_op_subq_32_di , 0xf1f8, 0x51a8, 24}, - {m68k_op_subq_32_ix , 0xf1f8, 0x51b0, 26}, - {m68k_op_or_8_er_d , 0xf1f8, 0x8000, 4}, - {m68k_op_or_8_er_ai , 0xf1f8, 0x8010, 8}, - {m68k_op_or_8_er_pi , 0xf1f8, 0x8018, 8}, - {m68k_op_or_8_er_pd , 0xf1f8, 0x8020, 10}, - {m68k_op_or_8_er_di , 0xf1f8, 0x8028, 12}, - {m68k_op_or_8_er_ix , 0xf1f8, 0x8030, 14}, - {m68k_op_or_16_er_d , 0xf1f8, 0x8040, 4}, - {m68k_op_or_16_er_ai , 0xf1f8, 0x8050, 8}, - {m68k_op_or_16_er_pi , 0xf1f8, 0x8058, 8}, - {m68k_op_or_16_er_pd , 0xf1f8, 0x8060, 10}, - {m68k_op_or_16_er_di , 0xf1f8, 0x8068, 12}, - {m68k_op_or_16_er_ix , 0xf1f8, 0x8070, 14}, - {m68k_op_or_32_er_d , 0xf1f8, 0x8080, 8}, - {m68k_op_or_32_er_ai , 0xf1f8, 0x8090, 14}, - {m68k_op_or_32_er_pi , 0xf1f8, 0x8098, 14}, - {m68k_op_or_32_er_pd , 0xf1f8, 0x80a0, 16}, - {m68k_op_or_32_er_di , 0xf1f8, 0x80a8, 18}, - {m68k_op_or_32_er_ix , 0xf1f8, 0x80b0, 20}, - {m68k_op_divu_16_d , 0xf1f8, 0x80c0, 0}, - {m68k_op_divu_16_ai , 0xf1f8, 0x80d0, 4}, - {m68k_op_divu_16_pi , 0xf1f8, 0x80d8, 4}, - {m68k_op_divu_16_pd , 0xf1f8, 0x80e0, 6}, - {m68k_op_divu_16_di , 0xf1f8, 0x80e8, 8}, - {m68k_op_divu_16_ix , 0xf1f8, 0x80f0, 10}, - {m68k_op_sbcd_8_rr , 0xf1f8, 0x8100, 6}, - {m68k_op_sbcd_8_mm , 0xf1f8, 0x8108, 18}, - {m68k_op_or_8_re_ai , 0xf1f8, 0x8110, 12}, - {m68k_op_or_8_re_pi , 0xf1f8, 0x8118, 12}, - {m68k_op_or_8_re_pd , 0xf1f8, 0x8120, 14}, - {m68k_op_or_8_re_di , 0xf1f8, 0x8128, 16}, - {m68k_op_or_8_re_ix , 0xf1f8, 0x8130, 18}, - {m68k_op_or_16_re_ai , 0xf1f8, 0x8150, 12}, - {m68k_op_or_16_re_pi , 0xf1f8, 0x8158, 12}, - {m68k_op_or_16_re_pd , 0xf1f8, 0x8160, 14}, - {m68k_op_or_16_re_di , 0xf1f8, 0x8168, 16}, - {m68k_op_or_16_re_ix , 0xf1f8, 0x8170, 18}, - {m68k_op_or_32_re_ai , 0xf1f8, 0x8190, 20}, - {m68k_op_or_32_re_pi , 0xf1f8, 0x8198, 20}, - {m68k_op_or_32_re_pd , 0xf1f8, 0x81a0, 22}, - {m68k_op_or_32_re_di , 0xf1f8, 0x81a8, 24}, - {m68k_op_or_32_re_ix , 0xf1f8, 0x81b0, 26}, - {m68k_op_divs_16_d , 0xf1f8, 0x81c0, 0}, - {m68k_op_divs_16_ai , 0xf1f8, 0x81d0, 4}, - {m68k_op_divs_16_pi , 0xf1f8, 0x81d8, 4}, - {m68k_op_divs_16_pd , 0xf1f8, 0x81e0, 6}, - {m68k_op_divs_16_di , 0xf1f8, 0x81e8, 8}, - {m68k_op_divs_16_ix , 0xf1f8, 0x81f0, 10}, - {m68k_op_sub_8_er_d , 0xf1f8, 0x9000, 4}, - {m68k_op_sub_8_er_ai , 0xf1f8, 0x9010, 8}, - {m68k_op_sub_8_er_pi , 0xf1f8, 0x9018, 8}, - {m68k_op_sub_8_er_pd , 0xf1f8, 0x9020, 10}, - {m68k_op_sub_8_er_di , 0xf1f8, 0x9028, 12}, - {m68k_op_sub_8_er_ix , 0xf1f8, 0x9030, 14}, - {m68k_op_sub_16_er_d , 0xf1f8, 0x9040, 4}, - {m68k_op_sub_16_er_a , 0xf1f8, 0x9048, 4}, - {m68k_op_sub_16_er_ai , 0xf1f8, 0x9050, 8}, - {m68k_op_sub_16_er_pi , 0xf1f8, 0x9058, 8}, - {m68k_op_sub_16_er_pd , 0xf1f8, 0x9060, 10}, - {m68k_op_sub_16_er_di , 0xf1f8, 0x9068, 12}, - {m68k_op_sub_16_er_ix , 0xf1f8, 0x9070, 14}, - {m68k_op_sub_32_er_d , 0xf1f8, 0x9080, 8}, - {m68k_op_sub_32_er_a , 0xf1f8, 0x9088, 8}, - {m68k_op_sub_32_er_ai , 0xf1f8, 0x9090, 14}, - {m68k_op_sub_32_er_pi , 0xf1f8, 0x9098, 14}, - {m68k_op_sub_32_er_pd , 0xf1f8, 0x90a0, 16}, - {m68k_op_sub_32_er_di , 0xf1f8, 0x90a8, 18}, - {m68k_op_sub_32_er_ix , 0xf1f8, 0x90b0, 20}, - {m68k_op_suba_16_d , 0xf1f8, 0x90c0, 8}, - {m68k_op_suba_16_a , 0xf1f8, 0x90c8, 8}, - {m68k_op_suba_16_ai , 0xf1f8, 0x90d0, 12}, - {m68k_op_suba_16_pi , 0xf1f8, 0x90d8, 12}, - {m68k_op_suba_16_pd , 0xf1f8, 0x90e0, 14}, - {m68k_op_suba_16_di , 0xf1f8, 0x90e8, 16}, - {m68k_op_suba_16_ix , 0xf1f8, 0x90f0, 18}, - {m68k_op_subx_8_rr , 0xf1f8, 0x9100, 4}, - {m68k_op_subx_8_mm , 0xf1f8, 0x9108, 18}, - {m68k_op_sub_8_re_ai , 0xf1f8, 0x9110, 12}, - {m68k_op_sub_8_re_pi , 0xf1f8, 0x9118, 12}, - {m68k_op_sub_8_re_pd , 0xf1f8, 0x9120, 14}, - {m68k_op_sub_8_re_di , 0xf1f8, 0x9128, 16}, - {m68k_op_sub_8_re_ix , 0xf1f8, 0x9130, 18}, - {m68k_op_subx_16_rr , 0xf1f8, 0x9140, 4}, - {m68k_op_subx_16_mm , 0xf1f8, 0x9148, 18}, - {m68k_op_sub_16_re_ai , 0xf1f8, 0x9150, 12}, - {m68k_op_sub_16_re_pi , 0xf1f8, 0x9158, 12}, - {m68k_op_sub_16_re_pd , 0xf1f8, 0x9160, 14}, - {m68k_op_sub_16_re_di , 0xf1f8, 0x9168, 16}, - {m68k_op_sub_16_re_ix , 0xf1f8, 0x9170, 18}, - {m68k_op_subx_32_rr , 0xf1f8, 0x9180, 8}, - {m68k_op_subx_32_mm , 0xf1f8, 0x9188, 30}, - {m68k_op_sub_32_re_ai , 0xf1f8, 0x9190, 20}, - {m68k_op_sub_32_re_pi , 0xf1f8, 0x9198, 20}, - {m68k_op_sub_32_re_pd , 0xf1f8, 0x91a0, 22}, - {m68k_op_sub_32_re_di , 0xf1f8, 0x91a8, 24}, - {m68k_op_sub_32_re_ix , 0xf1f8, 0x91b0, 26}, - {m68k_op_suba_32_d , 0xf1f8, 0x91c0, 8}, - {m68k_op_suba_32_a , 0xf1f8, 0x91c8, 8}, - {m68k_op_suba_32_ai , 0xf1f8, 0x91d0, 14}, - {m68k_op_suba_32_pi , 0xf1f8, 0x91d8, 14}, - {m68k_op_suba_32_pd , 0xf1f8, 0x91e0, 16}, - {m68k_op_suba_32_di , 0xf1f8, 0x91e8, 18}, - {m68k_op_suba_32_ix , 0xf1f8, 0x91f0, 20}, - {m68k_op_cmp_8_d , 0xf1f8, 0xb000, 4}, - {m68k_op_cmp_8_ai , 0xf1f8, 0xb010, 8}, - {m68k_op_cmp_8_pi , 0xf1f8, 0xb018, 8}, - {m68k_op_cmp_8_pd , 0xf1f8, 0xb020, 10}, - {m68k_op_cmp_8_di , 0xf1f8, 0xb028, 12}, - {m68k_op_cmp_8_ix , 0xf1f8, 0xb030, 14}, - {m68k_op_cmp_16_d , 0xf1f8, 0xb040, 4}, - {m68k_op_cmp_16_a , 0xf1f8, 0xb048, 4}, - {m68k_op_cmp_16_ai , 0xf1f8, 0xb050, 8}, - {m68k_op_cmp_16_pi , 0xf1f8, 0xb058, 8}, - {m68k_op_cmp_16_pd , 0xf1f8, 0xb060, 10}, - {m68k_op_cmp_16_di , 0xf1f8, 0xb068, 12}, - {m68k_op_cmp_16_ix , 0xf1f8, 0xb070, 14}, - {m68k_op_cmp_32_d , 0xf1f8, 0xb080, 6}, - {m68k_op_cmp_32_a , 0xf1f8, 0xb088, 6}, - {m68k_op_cmp_32_ai , 0xf1f8, 0xb090, 14}, - {m68k_op_cmp_32_pi , 0xf1f8, 0xb098, 14}, - {m68k_op_cmp_32_pd , 0xf1f8, 0xb0a0, 16}, - {m68k_op_cmp_32_di , 0xf1f8, 0xb0a8, 18}, - {m68k_op_cmp_32_ix , 0xf1f8, 0xb0b0, 20}, - {m68k_op_cmpa_16_d , 0xf1f8, 0xb0c0, 6}, - {m68k_op_cmpa_16_a , 0xf1f8, 0xb0c8, 6}, - {m68k_op_cmpa_16_ai , 0xf1f8, 0xb0d0, 10}, - {m68k_op_cmpa_16_pi , 0xf1f8, 0xb0d8, 10}, - {m68k_op_cmpa_16_pd , 0xf1f8, 0xb0e0, 12}, - {m68k_op_cmpa_16_di , 0xf1f8, 0xb0e8, 14}, - {m68k_op_cmpa_16_ix , 0xf1f8, 0xb0f0, 16}, - {m68k_op_eor_8_d , 0xf1f8, 0xb100, 4}, - {m68k_op_cmpm_8 , 0xf1f8, 0xb108, 12}, - {m68k_op_eor_8_ai , 0xf1f8, 0xb110, 12}, - {m68k_op_eor_8_pi , 0xf1f8, 0xb118, 12}, - {m68k_op_eor_8_pd , 0xf1f8, 0xb120, 14}, - {m68k_op_eor_8_di , 0xf1f8, 0xb128, 16}, - {m68k_op_eor_8_ix , 0xf1f8, 0xb130, 18}, - {m68k_op_eor_16_d , 0xf1f8, 0xb140, 4}, - {m68k_op_cmpm_16 , 0xf1f8, 0xb148, 12}, - {m68k_op_eor_16_ai , 0xf1f8, 0xb150, 12}, - {m68k_op_eor_16_pi , 0xf1f8, 0xb158, 12}, - {m68k_op_eor_16_pd , 0xf1f8, 0xb160, 14}, - {m68k_op_eor_16_di , 0xf1f8, 0xb168, 16}, - {m68k_op_eor_16_ix , 0xf1f8, 0xb170, 18}, - {m68k_op_eor_32_d , 0xf1f8, 0xb180, 8}, - {m68k_op_cmpm_32 , 0xf1f8, 0xb188, 20}, - {m68k_op_eor_32_ai , 0xf1f8, 0xb190, 20}, - {m68k_op_eor_32_pi , 0xf1f8, 0xb198, 20}, - {m68k_op_eor_32_pd , 0xf1f8, 0xb1a0, 22}, - {m68k_op_eor_32_di , 0xf1f8, 0xb1a8, 24}, - {m68k_op_eor_32_ix , 0xf1f8, 0xb1b0, 26}, - {m68k_op_cmpa_32_d , 0xf1f8, 0xb1c0, 6}, - {m68k_op_cmpa_32_a , 0xf1f8, 0xb1c8, 6}, - {m68k_op_cmpa_32_ai , 0xf1f8, 0xb1d0, 14}, - {m68k_op_cmpa_32_pi , 0xf1f8, 0xb1d8, 14}, - {m68k_op_cmpa_32_pd , 0xf1f8, 0xb1e0, 16}, - {m68k_op_cmpa_32_di , 0xf1f8, 0xb1e8, 18}, - {m68k_op_cmpa_32_ix , 0xf1f8, 0xb1f0, 20}, - {m68k_op_and_8_er_d , 0xf1f8, 0xc000, 4}, - {m68k_op_and_8_er_ai , 0xf1f8, 0xc010, 8}, - {m68k_op_and_8_er_pi , 0xf1f8, 0xc018, 8}, - {m68k_op_and_8_er_pd , 0xf1f8, 0xc020, 10}, - {m68k_op_and_8_er_di , 0xf1f8, 0xc028, 12}, - {m68k_op_and_8_er_ix , 0xf1f8, 0xc030, 14}, - {m68k_op_and_16_er_d , 0xf1f8, 0xc040, 4}, - {m68k_op_and_16_er_ai , 0xf1f8, 0xc050, 8}, - {m68k_op_and_16_er_pi , 0xf1f8, 0xc058, 8}, - {m68k_op_and_16_er_pd , 0xf1f8, 0xc060, 10}, - {m68k_op_and_16_er_di , 0xf1f8, 0xc068, 12}, - {m68k_op_and_16_er_ix , 0xf1f8, 0xc070, 14}, - {m68k_op_and_32_er_d , 0xf1f8, 0xc080, 8}, - {m68k_op_and_32_er_ai , 0xf1f8, 0xc090, 14}, - {m68k_op_and_32_er_pi , 0xf1f8, 0xc098, 14}, - {m68k_op_and_32_er_pd , 0xf1f8, 0xc0a0, 16}, - {m68k_op_and_32_er_di , 0xf1f8, 0xc0a8, 18}, - {m68k_op_and_32_er_ix , 0xf1f8, 0xc0b0, 20}, - {m68k_op_mulu_16_d , 0xf1f8, 0xc0c0, 0}, - {m68k_op_mulu_16_ai , 0xf1f8, 0xc0d0, 4}, - {m68k_op_mulu_16_pi , 0xf1f8, 0xc0d8, 4}, - {m68k_op_mulu_16_pd , 0xf1f8, 0xc0e0, 6}, - {m68k_op_mulu_16_di , 0xf1f8, 0xc0e8, 8}, - {m68k_op_mulu_16_ix , 0xf1f8, 0xc0f0, 10}, - {m68k_op_abcd_8_rr , 0xf1f8, 0xc100, 6}, - {m68k_op_abcd_8_mm , 0xf1f8, 0xc108, 18}, - {m68k_op_and_8_re_ai , 0xf1f8, 0xc110, 12}, - {m68k_op_and_8_re_pi , 0xf1f8, 0xc118, 12}, - {m68k_op_and_8_re_pd , 0xf1f8, 0xc120, 14}, - {m68k_op_and_8_re_di , 0xf1f8, 0xc128, 16}, - {m68k_op_and_8_re_ix , 0xf1f8, 0xc130, 18}, - {m68k_op_exg_32_dd , 0xf1f8, 0xc140, 6}, - {m68k_op_exg_32_aa , 0xf1f8, 0xc148, 6}, - {m68k_op_and_16_re_ai , 0xf1f8, 0xc150, 12}, - {m68k_op_and_16_re_pi , 0xf1f8, 0xc158, 12}, - {m68k_op_and_16_re_pd , 0xf1f8, 0xc160, 14}, - {m68k_op_and_16_re_di , 0xf1f8, 0xc168, 16}, - {m68k_op_and_16_re_ix , 0xf1f8, 0xc170, 18}, - {m68k_op_exg_32_da , 0xf1f8, 0xc188, 6}, - {m68k_op_and_32_re_ai , 0xf1f8, 0xc190, 20}, - {m68k_op_and_32_re_pi , 0xf1f8, 0xc198, 20}, - {m68k_op_and_32_re_pd , 0xf1f8, 0xc1a0, 22}, - {m68k_op_and_32_re_di , 0xf1f8, 0xc1a8, 24}, - {m68k_op_and_32_re_ix , 0xf1f8, 0xc1b0, 26}, - {m68k_op_muls_16_d , 0xf1f8, 0xc1c0, 0}, - {m68k_op_muls_16_ai , 0xf1f8, 0xc1d0, 4}, - {m68k_op_muls_16_pi , 0xf1f8, 0xc1d8, 4}, - {m68k_op_muls_16_pd , 0xf1f8, 0xc1e0, 6}, - {m68k_op_muls_16_di , 0xf1f8, 0xc1e8, 8}, - {m68k_op_muls_16_ix , 0xf1f8, 0xc1f0, 10}, - {m68k_op_add_8_er_d , 0xf1f8, 0xd000, 4}, - {m68k_op_add_8_er_ai , 0xf1f8, 0xd010, 8}, - {m68k_op_add_8_er_pi , 0xf1f8, 0xd018, 8}, - {m68k_op_add_8_er_pd , 0xf1f8, 0xd020, 10}, - {m68k_op_add_8_er_di , 0xf1f8, 0xd028, 12}, - {m68k_op_add_8_er_ix , 0xf1f8, 0xd030, 14}, - {m68k_op_add_16_er_d , 0xf1f8, 0xd040, 4}, - {m68k_op_add_16_er_a , 0xf1f8, 0xd048, 4}, - {m68k_op_add_16_er_ai , 0xf1f8, 0xd050, 8}, - {m68k_op_add_16_er_pi , 0xf1f8, 0xd058, 8}, - {m68k_op_add_16_er_pd , 0xf1f8, 0xd060, 10}, - {m68k_op_add_16_er_di , 0xf1f8, 0xd068, 12}, - {m68k_op_add_16_er_ix , 0xf1f8, 0xd070, 14}, - {m68k_op_add_32_er_d , 0xf1f8, 0xd080, 8}, - {m68k_op_add_32_er_a , 0xf1f8, 0xd088, 8}, - {m68k_op_add_32_er_ai , 0xf1f8, 0xd090, 14}, - {m68k_op_add_32_er_pi , 0xf1f8, 0xd098, 14}, - {m68k_op_add_32_er_pd , 0xf1f8, 0xd0a0, 16}, - {m68k_op_add_32_er_di , 0xf1f8, 0xd0a8, 18}, - {m68k_op_add_32_er_ix , 0xf1f8, 0xd0b0, 20}, - {m68k_op_adda_16_d , 0xf1f8, 0xd0c0, 8}, - {m68k_op_adda_16_a , 0xf1f8, 0xd0c8, 8}, - {m68k_op_adda_16_ai , 0xf1f8, 0xd0d0, 12}, - {m68k_op_adda_16_pi , 0xf1f8, 0xd0d8, 12}, - {m68k_op_adda_16_pd , 0xf1f8, 0xd0e0, 14}, - {m68k_op_adda_16_di , 0xf1f8, 0xd0e8, 16}, - {m68k_op_adda_16_ix , 0xf1f8, 0xd0f0, 18}, - {m68k_op_addx_8_rr , 0xf1f8, 0xd100, 4}, - {m68k_op_addx_8_mm , 0xf1f8, 0xd108, 18}, - {m68k_op_add_8_re_ai , 0xf1f8, 0xd110, 12}, - {m68k_op_add_8_re_pi , 0xf1f8, 0xd118, 12}, - {m68k_op_add_8_re_pd , 0xf1f8, 0xd120, 14}, - {m68k_op_add_8_re_di , 0xf1f8, 0xd128, 16}, - {m68k_op_add_8_re_ix , 0xf1f8, 0xd130, 18}, - {m68k_op_addx_16_rr , 0xf1f8, 0xd140, 4}, - {m68k_op_addx_16_mm , 0xf1f8, 0xd148, 18}, - {m68k_op_add_16_re_ai , 0xf1f8, 0xd150, 12}, - {m68k_op_add_16_re_pi , 0xf1f8, 0xd158, 12}, - {m68k_op_add_16_re_pd , 0xf1f8, 0xd160, 14}, - {m68k_op_add_16_re_di , 0xf1f8, 0xd168, 16}, - {m68k_op_add_16_re_ix , 0xf1f8, 0xd170, 18}, - {m68k_op_addx_32_rr , 0xf1f8, 0xd180, 8}, - {m68k_op_addx_32_mm , 0xf1f8, 0xd188, 30}, - {m68k_op_add_32_re_ai , 0xf1f8, 0xd190, 20}, - {m68k_op_add_32_re_pi , 0xf1f8, 0xd198, 20}, - {m68k_op_add_32_re_pd , 0xf1f8, 0xd1a0, 22}, - {m68k_op_add_32_re_di , 0xf1f8, 0xd1a8, 24}, - {m68k_op_add_32_re_ix , 0xf1f8, 0xd1b0, 26}, - {m68k_op_adda_32_d , 0xf1f8, 0xd1c0, 8}, - {m68k_op_adda_32_a , 0xf1f8, 0xd1c8, 8}, - {m68k_op_adda_32_ai , 0xf1f8, 0xd1d0, 14}, - {m68k_op_adda_32_pi , 0xf1f8, 0xd1d8, 14}, - {m68k_op_adda_32_pd , 0xf1f8, 0xd1e0, 16}, - {m68k_op_adda_32_di , 0xf1f8, 0xd1e8, 18}, - {m68k_op_adda_32_ix , 0xf1f8, 0xd1f0, 20}, - {m68k_op_asr_8_s , 0xf1f8, 0xe000, 6}, - {m68k_op_lsr_8_s , 0xf1f8, 0xe008, 6}, - {m68k_op_roxr_8_s , 0xf1f8, 0xe010, 6}, - {m68k_op_ror_8_s , 0xf1f8, 0xe018, 6}, - {m68k_op_asr_8_r , 0xf1f8, 0xe020, 6}, - {m68k_op_lsr_8_r , 0xf1f8, 0xe028, 6}, - {m68k_op_roxr_8_r , 0xf1f8, 0xe030, 6}, - {m68k_op_ror_8_r , 0xf1f8, 0xe038, 6}, - {m68k_op_asr_16_s , 0xf1f8, 0xe040, 6}, - {m68k_op_lsr_16_s , 0xf1f8, 0xe048, 6}, - {m68k_op_roxr_16_s , 0xf1f8, 0xe050, 6}, - {m68k_op_ror_16_s , 0xf1f8, 0xe058, 6}, - {m68k_op_asr_16_r , 0xf1f8, 0xe060, 6}, - {m68k_op_lsr_16_r , 0xf1f8, 0xe068, 6}, - {m68k_op_roxr_16_r , 0xf1f8, 0xe070, 6}, - {m68k_op_ror_16_r , 0xf1f8, 0xe078, 6}, - {m68k_op_asr_32_s , 0xf1f8, 0xe080, 8}, - {m68k_op_lsr_32_s , 0xf1f8, 0xe088, 8}, - {m68k_op_roxr_32_s , 0xf1f8, 0xe090, 8}, - {m68k_op_ror_32_s , 0xf1f8, 0xe098, 8}, - {m68k_op_asr_32_r , 0xf1f8, 0xe0a0, 8}, - {m68k_op_lsr_32_r , 0xf1f8, 0xe0a8, 8}, - {m68k_op_roxr_32_r , 0xf1f8, 0xe0b0, 8}, - {m68k_op_ror_32_r , 0xf1f8, 0xe0b8, 8}, - {m68k_op_asl_8_s , 0xf1f8, 0xe100, 6}, - {m68k_op_lsl_8_s , 0xf1f8, 0xe108, 6}, - {m68k_op_roxl_8_s , 0xf1f8, 0xe110, 6}, - {m68k_op_rol_8_s , 0xf1f8, 0xe118, 6}, - {m68k_op_asl_8_r , 0xf1f8, 0xe120, 6}, - {m68k_op_lsl_8_r , 0xf1f8, 0xe128, 6}, - {m68k_op_roxl_8_r , 0xf1f8, 0xe130, 6}, - {m68k_op_rol_8_r , 0xf1f8, 0xe138, 6}, - {m68k_op_asl_16_s , 0xf1f8, 0xe140, 6}, - {m68k_op_lsl_16_s , 0xf1f8, 0xe148, 6}, - {m68k_op_roxl_16_s , 0xf1f8, 0xe150, 6}, - {m68k_op_rol_16_s , 0xf1f8, 0xe158, 6}, - {m68k_op_asl_16_r , 0xf1f8, 0xe160, 6}, - {m68k_op_lsl_16_r , 0xf1f8, 0xe168, 6}, - {m68k_op_roxl_16_r , 0xf1f8, 0xe170, 6}, - {m68k_op_rol_16_r , 0xf1f8, 0xe178, 6}, - {m68k_op_asl_32_s , 0xf1f8, 0xe180, 8}, - {m68k_op_lsl_32_s , 0xf1f8, 0xe188, 8}, - {m68k_op_roxl_32_s , 0xf1f8, 0xe190, 8}, - {m68k_op_rol_32_s , 0xf1f8, 0xe198, 8}, - {m68k_op_asl_32_r , 0xf1f8, 0xe1a0, 8}, - {m68k_op_lsl_32_r , 0xf1f8, 0xe1a8, 8}, - {m68k_op_roxl_32_r , 0xf1f8, 0xe1b0, 8}, - {m68k_op_rol_32_r , 0xf1f8, 0xe1b8, 8}, - {m68k_op_trap , 0xfff0, 0x4e40, 4}, - {m68k_op_btst_8_r_pi7 , 0xf1ff, 0x011f, 8}, - {m68k_op_btst_8_r_pd7 , 0xf1ff, 0x0127, 10}, - {m68k_op_btst_8_r_aw , 0xf1ff, 0x0138, 12}, - {m68k_op_btst_8_r_al , 0xf1ff, 0x0139, 16}, - {m68k_op_btst_8_r_pcdi , 0xf1ff, 0x013a, 12}, - {m68k_op_btst_8_r_pcix , 0xf1ff, 0x013b, 14}, - {m68k_op_btst_8_r_i , 0xf1ff, 0x013c, 8}, - {m68k_op_bchg_8_r_pi7 , 0xf1ff, 0x015f, 12}, - {m68k_op_bchg_8_r_pd7 , 0xf1ff, 0x0167, 14}, - {m68k_op_bchg_8_r_aw , 0xf1ff, 0x0178, 16}, - {m68k_op_bchg_8_r_al , 0xf1ff, 0x0179, 20}, - {m68k_op_bclr_8_r_pi7 , 0xf1ff, 0x019f, 12}, - {m68k_op_bclr_8_r_pd7 , 0xf1ff, 0x01a7, 14}, - {m68k_op_bclr_8_r_aw , 0xf1ff, 0x01b8, 16}, - {m68k_op_bclr_8_r_al , 0xf1ff, 0x01b9, 20}, - {m68k_op_bset_8_r_pi7 , 0xf1ff, 0x01df, 12}, - {m68k_op_bset_8_r_pd7 , 0xf1ff, 0x01e7, 14}, - {m68k_op_bset_8_r_aw , 0xf1ff, 0x01f8, 16}, - {m68k_op_bset_8_r_al , 0xf1ff, 0x01f9, 20}, - {m68k_op_move_8_d_pi7 , 0xf1ff, 0x101f, 8}, - {m68k_op_move_8_d_pd7 , 0xf1ff, 0x1027, 10}, - {m68k_op_move_8_d_aw , 0xf1ff, 0x1038, 12}, - {m68k_op_move_8_d_al , 0xf1ff, 0x1039, 16}, - {m68k_op_move_8_d_pcdi , 0xf1ff, 0x103a, 12}, - {m68k_op_move_8_d_pcix , 0xf1ff, 0x103b, 14}, - {m68k_op_move_8_d_i , 0xf1ff, 0x103c, 8}, - {m68k_op_move_8_ai_pi7 , 0xf1ff, 0x109f, 12}, - {m68k_op_move_8_ai_pd7 , 0xf1ff, 0x10a7, 14}, - {m68k_op_move_8_ai_aw , 0xf1ff, 0x10b8, 16}, - {m68k_op_move_8_ai_al , 0xf1ff, 0x10b9, 20}, - {m68k_op_move_8_ai_pcdi , 0xf1ff, 0x10ba, 16}, - {m68k_op_move_8_ai_pcix , 0xf1ff, 0x10bb, 18}, - {m68k_op_move_8_ai_i , 0xf1ff, 0x10bc, 12}, - {m68k_op_move_8_pi_pi7 , 0xf1ff, 0x10df, 12}, - {m68k_op_move_8_pi_pd7 , 0xf1ff, 0x10e7, 14}, - {m68k_op_move_8_pi_aw , 0xf1ff, 0x10f8, 16}, - {m68k_op_move_8_pi_al , 0xf1ff, 0x10f9, 20}, - {m68k_op_move_8_pi_pcdi , 0xf1ff, 0x10fa, 16}, - {m68k_op_move_8_pi_pcix , 0xf1ff, 0x10fb, 18}, - {m68k_op_move_8_pi_i , 0xf1ff, 0x10fc, 12}, - {m68k_op_move_8_pd_pi7 , 0xf1ff, 0x111f, 12}, - {m68k_op_move_8_pd_pd7 , 0xf1ff, 0x1127, 14}, - {m68k_op_move_8_pd_aw , 0xf1ff, 0x1138, 16}, - {m68k_op_move_8_pd_al , 0xf1ff, 0x1139, 20}, - {m68k_op_move_8_pd_pcdi , 0xf1ff, 0x113a, 16}, - {m68k_op_move_8_pd_pcix , 0xf1ff, 0x113b, 18}, - {m68k_op_move_8_pd_i , 0xf1ff, 0x113c, 12}, - {m68k_op_move_8_di_pi7 , 0xf1ff, 0x115f, 16}, - {m68k_op_move_8_di_pd7 , 0xf1ff, 0x1167, 18}, - {m68k_op_move_8_di_aw , 0xf1ff, 0x1178, 20}, - {m68k_op_move_8_di_al , 0xf1ff, 0x1179, 24}, - {m68k_op_move_8_di_pcdi , 0xf1ff, 0x117a, 20}, - {m68k_op_move_8_di_pcix , 0xf1ff, 0x117b, 22}, - {m68k_op_move_8_di_i , 0xf1ff, 0x117c, 16}, - {m68k_op_move_8_ix_pi7 , 0xf1ff, 0x119f, 18}, - {m68k_op_move_8_ix_pd7 , 0xf1ff, 0x11a7, 20}, - {m68k_op_move_8_ix_aw , 0xf1ff, 0x11b8, 22}, - {m68k_op_move_8_ix_al , 0xf1ff, 0x11b9, 26}, - {m68k_op_move_8_ix_pcdi , 0xf1ff, 0x11ba, 22}, - {m68k_op_move_8_ix_pcix , 0xf1ff, 0x11bb, 24}, - {m68k_op_move_8_ix_i , 0xf1ff, 0x11bc, 18}, - {m68k_op_move_32_d_aw , 0xf1ff, 0x2038, 16}, - {m68k_op_move_32_d_al , 0xf1ff, 0x2039, 20}, - {m68k_op_move_32_d_pcdi , 0xf1ff, 0x203a, 16}, - {m68k_op_move_32_d_pcix , 0xf1ff, 0x203b, 18}, - {m68k_op_move_32_d_i , 0xf1ff, 0x203c, 12}, - {m68k_op_movea_32_aw , 0xf1ff, 0x2078, 16}, - {m68k_op_movea_32_al , 0xf1ff, 0x2079, 20}, - {m68k_op_movea_32_pcdi , 0xf1ff, 0x207a, 16}, - {m68k_op_movea_32_pcix , 0xf1ff, 0x207b, 18}, - {m68k_op_movea_32_i , 0xf1ff, 0x207c, 12}, - {m68k_op_move_32_ai_aw , 0xf1ff, 0x20b8, 24}, - {m68k_op_move_32_ai_al , 0xf1ff, 0x20b9, 28}, - {m68k_op_move_32_ai_pcdi , 0xf1ff, 0x20ba, 24}, - {m68k_op_move_32_ai_pcix , 0xf1ff, 0x20bb, 26}, - {m68k_op_move_32_ai_i , 0xf1ff, 0x20bc, 20}, - {m68k_op_move_32_pi_aw , 0xf1ff, 0x20f8, 24}, - {m68k_op_move_32_pi_al , 0xf1ff, 0x20f9, 28}, - {m68k_op_move_32_pi_pcdi , 0xf1ff, 0x20fa, 24}, - {m68k_op_move_32_pi_pcix , 0xf1ff, 0x20fb, 26}, - {m68k_op_move_32_pi_i , 0xf1ff, 0x20fc, 20}, - {m68k_op_move_32_pd_aw , 0xf1ff, 0x2138, 24}, - {m68k_op_move_32_pd_al , 0xf1ff, 0x2139, 28}, - {m68k_op_move_32_pd_pcdi , 0xf1ff, 0x213a, 24}, - {m68k_op_move_32_pd_pcix , 0xf1ff, 0x213b, 26}, - {m68k_op_move_32_pd_i , 0xf1ff, 0x213c, 20}, - {m68k_op_move_32_di_aw , 0xf1ff, 0x2178, 28}, - {m68k_op_move_32_di_al , 0xf1ff, 0x2179, 32}, - {m68k_op_move_32_di_pcdi , 0xf1ff, 0x217a, 28}, - {m68k_op_move_32_di_pcix , 0xf1ff, 0x217b, 30}, - {m68k_op_move_32_di_i , 0xf1ff, 0x217c, 24}, - {m68k_op_move_32_ix_aw , 0xf1ff, 0x21b8, 30}, - {m68k_op_move_32_ix_al , 0xf1ff, 0x21b9, 34}, - {m68k_op_move_32_ix_pcdi , 0xf1ff, 0x21ba, 30}, - {m68k_op_move_32_ix_pcix , 0xf1ff, 0x21bb, 32}, - {m68k_op_move_32_ix_i , 0xf1ff, 0x21bc, 26}, - {m68k_op_move_16_d_aw , 0xf1ff, 0x3038, 12}, - {m68k_op_move_16_d_al , 0xf1ff, 0x3039, 16}, - {m68k_op_move_16_d_pcdi , 0xf1ff, 0x303a, 12}, - {m68k_op_move_16_d_pcix , 0xf1ff, 0x303b, 14}, - {m68k_op_move_16_d_i , 0xf1ff, 0x303c, 8}, - {m68k_op_movea_16_aw , 0xf1ff, 0x3078, 12}, - {m68k_op_movea_16_al , 0xf1ff, 0x3079, 16}, - {m68k_op_movea_16_pcdi , 0xf1ff, 0x307a, 12}, - {m68k_op_movea_16_pcix , 0xf1ff, 0x307b, 14}, - {m68k_op_movea_16_i , 0xf1ff, 0x307c, 8}, - {m68k_op_move_16_ai_aw , 0xf1ff, 0x30b8, 16}, - {m68k_op_move_16_ai_al , 0xf1ff, 0x30b9, 20}, - {m68k_op_move_16_ai_pcdi , 0xf1ff, 0x30ba, 16}, - {m68k_op_move_16_ai_pcix , 0xf1ff, 0x30bb, 18}, - {m68k_op_move_16_ai_i , 0xf1ff, 0x30bc, 12}, - {m68k_op_move_16_pi_aw , 0xf1ff, 0x30f8, 16}, - {m68k_op_move_16_pi_al , 0xf1ff, 0x30f9, 20}, - {m68k_op_move_16_pi_pcdi , 0xf1ff, 0x30fa, 16}, - {m68k_op_move_16_pi_pcix , 0xf1ff, 0x30fb, 18}, - {m68k_op_move_16_pi_i , 0xf1ff, 0x30fc, 12}, - {m68k_op_move_16_pd_aw , 0xf1ff, 0x3138, 16}, - {m68k_op_move_16_pd_al , 0xf1ff, 0x3139, 20}, - {m68k_op_move_16_pd_pcdi , 0xf1ff, 0x313a, 16}, - {m68k_op_move_16_pd_pcix , 0xf1ff, 0x313b, 18}, - {m68k_op_move_16_pd_i , 0xf1ff, 0x313c, 12}, - {m68k_op_move_16_di_aw , 0xf1ff, 0x3178, 20}, - {m68k_op_move_16_di_al , 0xf1ff, 0x3179, 24}, - {m68k_op_move_16_di_pcdi , 0xf1ff, 0x317a, 20}, - {m68k_op_move_16_di_pcix , 0xf1ff, 0x317b, 22}, - {m68k_op_move_16_di_i , 0xf1ff, 0x317c, 16}, - {m68k_op_move_16_ix_aw , 0xf1ff, 0x31b8, 22}, - {m68k_op_move_16_ix_al , 0xf1ff, 0x31b9, 26}, - {m68k_op_move_16_ix_pcdi , 0xf1ff, 0x31ba, 22}, - {m68k_op_move_16_ix_pcix , 0xf1ff, 0x31bb, 24}, - {m68k_op_move_16_ix_i , 0xf1ff, 0x31bc, 18}, - {m68k_op_chk_16_aw , 0xf1ff, 0x41b8, 18}, - {m68k_op_chk_16_al , 0xf1ff, 0x41b9, 22}, - {m68k_op_chk_16_pcdi , 0xf1ff, 0x41ba, 18}, - {m68k_op_chk_16_pcix , 0xf1ff, 0x41bb, 20}, - {m68k_op_chk_16_i , 0xf1ff, 0x41bc, 14}, - {m68k_op_lea_32_aw , 0xf1ff, 0x41f8, 8}, - {m68k_op_lea_32_al , 0xf1ff, 0x41f9, 12}, - {m68k_op_lea_32_pcdi , 0xf1ff, 0x41fa, 8}, - {m68k_op_lea_32_pcix , 0xf1ff, 0x41fb, 12}, - {m68k_op_addq_8_pi7 , 0xf1ff, 0x501f, 12}, - {m68k_op_addq_8_pd7 , 0xf1ff, 0x5027, 14}, - {m68k_op_addq_8_aw , 0xf1ff, 0x5038, 16}, - {m68k_op_addq_8_al , 0xf1ff, 0x5039, 20}, - {m68k_op_addq_16_aw , 0xf1ff, 0x5078, 16}, - {m68k_op_addq_16_al , 0xf1ff, 0x5079, 20}, - {m68k_op_addq_32_aw , 0xf1ff, 0x50b8, 24}, - {m68k_op_addq_32_al , 0xf1ff, 0x50b9, 28}, - {m68k_op_subq_8_pi7 , 0xf1ff, 0x511f, 12}, - {m68k_op_subq_8_pd7 , 0xf1ff, 0x5127, 14}, - {m68k_op_subq_8_aw , 0xf1ff, 0x5138, 16}, - {m68k_op_subq_8_al , 0xf1ff, 0x5139, 20}, - {m68k_op_subq_16_aw , 0xf1ff, 0x5178, 16}, - {m68k_op_subq_16_al , 0xf1ff, 0x5179, 20}, - {m68k_op_subq_32_aw , 0xf1ff, 0x51b8, 24}, - {m68k_op_subq_32_al , 0xf1ff, 0x51b9, 28}, - {m68k_op_or_8_er_pi7 , 0xf1ff, 0x801f, 8}, - {m68k_op_or_8_er_pd7 , 0xf1ff, 0x8027, 10}, - {m68k_op_or_8_er_aw , 0xf1ff, 0x8038, 12}, - {m68k_op_or_8_er_al , 0xf1ff, 0x8039, 16}, - {m68k_op_or_8_er_pcdi , 0xf1ff, 0x803a, 12}, - {m68k_op_or_8_er_pcix , 0xf1ff, 0x803b, 14}, - {m68k_op_or_8_er_i , 0xf1ff, 0x803c, 8}, - {m68k_op_or_16_er_aw , 0xf1ff, 0x8078, 12}, - {m68k_op_or_16_er_al , 0xf1ff, 0x8079, 16}, - {m68k_op_or_16_er_pcdi , 0xf1ff, 0x807a, 12}, - {m68k_op_or_16_er_pcix , 0xf1ff, 0x807b, 14}, - {m68k_op_or_16_er_i , 0xf1ff, 0x807c, 8}, - {m68k_op_or_32_er_aw , 0xf1ff, 0x80b8, 18}, - {m68k_op_or_32_er_al , 0xf1ff, 0x80b9, 22}, - {m68k_op_or_32_er_pcdi , 0xf1ff, 0x80ba, 18}, - {m68k_op_or_32_er_pcix , 0xf1ff, 0x80bb, 20}, - {m68k_op_or_32_er_i , 0xf1ff, 0x80bc, 16}, - {m68k_op_divu_16_aw , 0xf1ff, 0x80f8, 8}, - {m68k_op_divu_16_al , 0xf1ff, 0x80f9, 12}, - {m68k_op_divu_16_pcdi , 0xf1ff, 0x80fa, 8}, - {m68k_op_divu_16_pcix , 0xf1ff, 0x80fb, 10}, - {m68k_op_divu_16_i , 0xf1ff, 0x80fc, 4}, - {m68k_op_sbcd_8_mm_ay7 , 0xf1ff, 0x810f, 18}, - {m68k_op_or_8_re_pi7 , 0xf1ff, 0x811f, 12}, - {m68k_op_or_8_re_pd7 , 0xf1ff, 0x8127, 14}, - {m68k_op_or_8_re_aw , 0xf1ff, 0x8138, 16}, - {m68k_op_or_8_re_al , 0xf1ff, 0x8139, 20}, - {m68k_op_or_16_re_aw , 0xf1ff, 0x8178, 16}, - {m68k_op_or_16_re_al , 0xf1ff, 0x8179, 20}, - {m68k_op_or_32_re_aw , 0xf1ff, 0x81b8, 24}, - {m68k_op_or_32_re_al , 0xf1ff, 0x81b9, 28}, - {m68k_op_divs_16_aw , 0xf1ff, 0x81f8, 8}, - {m68k_op_divs_16_al , 0xf1ff, 0x81f9, 12}, - {m68k_op_divs_16_pcdi , 0xf1ff, 0x81fa, 8}, - {m68k_op_divs_16_pcix , 0xf1ff, 0x81fb, 10}, - {m68k_op_divs_16_i , 0xf1ff, 0x81fc, 4}, - {m68k_op_sub_8_er_pi7 , 0xf1ff, 0x901f, 8}, - {m68k_op_sub_8_er_pd7 , 0xf1ff, 0x9027, 10}, - {m68k_op_sub_8_er_aw , 0xf1ff, 0x9038, 12}, - {m68k_op_sub_8_er_al , 0xf1ff, 0x9039, 16}, - {m68k_op_sub_8_er_pcdi , 0xf1ff, 0x903a, 12}, - {m68k_op_sub_8_er_pcix , 0xf1ff, 0x903b, 14}, - {m68k_op_sub_8_er_i , 0xf1ff, 0x903c, 8}, - {m68k_op_sub_16_er_aw , 0xf1ff, 0x9078, 12}, - {m68k_op_sub_16_er_al , 0xf1ff, 0x9079, 16}, - {m68k_op_sub_16_er_pcdi , 0xf1ff, 0x907a, 12}, - {m68k_op_sub_16_er_pcix , 0xf1ff, 0x907b, 14}, - {m68k_op_sub_16_er_i , 0xf1ff, 0x907c, 8}, - {m68k_op_sub_32_er_aw , 0xf1ff, 0x90b8, 18}, - {m68k_op_sub_32_er_al , 0xf1ff, 0x90b9, 22}, - {m68k_op_sub_32_er_pcdi , 0xf1ff, 0x90ba, 18}, - {m68k_op_sub_32_er_pcix , 0xf1ff, 0x90bb, 20}, - {m68k_op_sub_32_er_i , 0xf1ff, 0x90bc, 16}, - {m68k_op_suba_16_aw , 0xf1ff, 0x90f8, 16}, - {m68k_op_suba_16_al , 0xf1ff, 0x90f9, 20}, - {m68k_op_suba_16_pcdi , 0xf1ff, 0x90fa, 16}, - {m68k_op_suba_16_pcix , 0xf1ff, 0x90fb, 18}, - {m68k_op_suba_16_i , 0xf1ff, 0x90fc, 12}, - {m68k_op_subx_8_mm_ay7 , 0xf1ff, 0x910f, 18}, - {m68k_op_sub_8_re_pi7 , 0xf1ff, 0x911f, 12}, - {m68k_op_sub_8_re_pd7 , 0xf1ff, 0x9127, 14}, - {m68k_op_sub_8_re_aw , 0xf1ff, 0x9138, 16}, - {m68k_op_sub_8_re_al , 0xf1ff, 0x9139, 20}, - {m68k_op_sub_16_re_aw , 0xf1ff, 0x9178, 16}, - {m68k_op_sub_16_re_al , 0xf1ff, 0x9179, 20}, - {m68k_op_sub_32_re_aw , 0xf1ff, 0x91b8, 24}, - {m68k_op_sub_32_re_al , 0xf1ff, 0x91b9, 28}, - {m68k_op_suba_32_aw , 0xf1ff, 0x91f8, 18}, - {m68k_op_suba_32_al , 0xf1ff, 0x91f9, 22}, - {m68k_op_suba_32_pcdi , 0xf1ff, 0x91fa, 18}, - {m68k_op_suba_32_pcix , 0xf1ff, 0x91fb, 20}, - {m68k_op_suba_32_i , 0xf1ff, 0x91fc, 16}, - {m68k_op_cmp_8_pi7 , 0xf1ff, 0xb01f, 8}, - {m68k_op_cmp_8_pd7 , 0xf1ff, 0xb027, 10}, - {m68k_op_cmp_8_aw , 0xf1ff, 0xb038, 12}, - {m68k_op_cmp_8_al , 0xf1ff, 0xb039, 16}, - {m68k_op_cmp_8_pcdi , 0xf1ff, 0xb03a, 12}, - {m68k_op_cmp_8_pcix , 0xf1ff, 0xb03b, 14}, - {m68k_op_cmp_8_i , 0xf1ff, 0xb03c, 8}, - {m68k_op_cmp_16_aw , 0xf1ff, 0xb078, 12}, - {m68k_op_cmp_16_al , 0xf1ff, 0xb079, 16}, - {m68k_op_cmp_16_pcdi , 0xf1ff, 0xb07a, 12}, - {m68k_op_cmp_16_pcix , 0xf1ff, 0xb07b, 14}, - {m68k_op_cmp_16_i , 0xf1ff, 0xb07c, 8}, - {m68k_op_cmp_32_aw , 0xf1ff, 0xb0b8, 18}, - {m68k_op_cmp_32_al , 0xf1ff, 0xb0b9, 22}, - {m68k_op_cmp_32_pcdi , 0xf1ff, 0xb0ba, 18}, - {m68k_op_cmp_32_pcix , 0xf1ff, 0xb0bb, 20}, - {m68k_op_cmp_32_i , 0xf1ff, 0xb0bc, 14}, - {m68k_op_cmpa_16_aw , 0xf1ff, 0xb0f8, 14}, - {m68k_op_cmpa_16_al , 0xf1ff, 0xb0f9, 18}, - {m68k_op_cmpa_16_pcdi , 0xf1ff, 0xb0fa, 14}, - {m68k_op_cmpa_16_pcix , 0xf1ff, 0xb0fb, 16}, - {m68k_op_cmpa_16_i , 0xf1ff, 0xb0fc, 10}, - {m68k_op_cmpm_8_ay7 , 0xf1ff, 0xb10f, 12}, - {m68k_op_eor_8_pi7 , 0xf1ff, 0xb11f, 12}, - {m68k_op_eor_8_pd7 , 0xf1ff, 0xb127, 14}, - {m68k_op_eor_8_aw , 0xf1ff, 0xb138, 16}, - {m68k_op_eor_8_al , 0xf1ff, 0xb139, 20}, - {m68k_op_eor_16_aw , 0xf1ff, 0xb178, 16}, - {m68k_op_eor_16_al , 0xf1ff, 0xb179, 20}, - {m68k_op_eor_32_aw , 0xf1ff, 0xb1b8, 24}, - {m68k_op_eor_32_al , 0xf1ff, 0xb1b9, 28}, - {m68k_op_cmpa_32_aw , 0xf1ff, 0xb1f8, 18}, - {m68k_op_cmpa_32_al , 0xf1ff, 0xb1f9, 22}, - {m68k_op_cmpa_32_pcdi , 0xf1ff, 0xb1fa, 18}, - {m68k_op_cmpa_32_pcix , 0xf1ff, 0xb1fb, 20}, - {m68k_op_cmpa_32_i , 0xf1ff, 0xb1fc, 14}, - {m68k_op_and_8_er_pi7 , 0xf1ff, 0xc01f, 8}, - {m68k_op_and_8_er_pd7 , 0xf1ff, 0xc027, 10}, - {m68k_op_and_8_er_aw , 0xf1ff, 0xc038, 12}, - {m68k_op_and_8_er_al , 0xf1ff, 0xc039, 16}, - {m68k_op_and_8_er_pcdi , 0xf1ff, 0xc03a, 12}, - {m68k_op_and_8_er_pcix , 0xf1ff, 0xc03b, 14}, - {m68k_op_and_8_er_i , 0xf1ff, 0xc03c, 8}, - {m68k_op_and_16_er_aw , 0xf1ff, 0xc078, 12}, - {m68k_op_and_16_er_al , 0xf1ff, 0xc079, 16}, - {m68k_op_and_16_er_pcdi , 0xf1ff, 0xc07a, 12}, - {m68k_op_and_16_er_pcix , 0xf1ff, 0xc07b, 14}, - {m68k_op_and_16_er_i , 0xf1ff, 0xc07c, 8}, - {m68k_op_and_32_er_aw , 0xf1ff, 0xc0b8, 18}, - {m68k_op_and_32_er_al , 0xf1ff, 0xc0b9, 22}, - {m68k_op_and_32_er_pcdi , 0xf1ff, 0xc0ba, 18}, - {m68k_op_and_32_er_pcix , 0xf1ff, 0xc0bb, 20}, - {m68k_op_and_32_er_i , 0xf1ff, 0xc0bc, 16}, - {m68k_op_mulu_16_aw , 0xf1ff, 0xc0f8, 8}, - {m68k_op_mulu_16_al , 0xf1ff, 0xc0f9, 12}, - {m68k_op_mulu_16_pcdi , 0xf1ff, 0xc0fa, 8}, - {m68k_op_mulu_16_pcix , 0xf1ff, 0xc0fb, 10}, - {m68k_op_mulu_16_i , 0xf1ff, 0xc0fc, 4}, - {m68k_op_abcd_8_mm_ay7 , 0xf1ff, 0xc10f, 18}, - {m68k_op_and_8_re_pi7 , 0xf1ff, 0xc11f, 12}, - {m68k_op_and_8_re_pd7 , 0xf1ff, 0xc127, 14}, - {m68k_op_and_8_re_aw , 0xf1ff, 0xc138, 16}, - {m68k_op_and_8_re_al , 0xf1ff, 0xc139, 20}, - {m68k_op_and_16_re_aw , 0xf1ff, 0xc178, 16}, - {m68k_op_and_16_re_al , 0xf1ff, 0xc179, 20}, - {m68k_op_and_32_re_aw , 0xf1ff, 0xc1b8, 24}, - {m68k_op_and_32_re_al , 0xf1ff, 0xc1b9, 28}, - {m68k_op_muls_16_aw , 0xf1ff, 0xc1f8, 8}, - {m68k_op_muls_16_al , 0xf1ff, 0xc1f9, 12}, - {m68k_op_muls_16_pcdi , 0xf1ff, 0xc1fa, 8}, - {m68k_op_muls_16_pcix , 0xf1ff, 0xc1fb, 10}, - {m68k_op_muls_16_i , 0xf1ff, 0xc1fc, 4}, - {m68k_op_add_8_er_pi7 , 0xf1ff, 0xd01f, 8}, - {m68k_op_add_8_er_pd7 , 0xf1ff, 0xd027, 10}, - {m68k_op_add_8_er_aw , 0xf1ff, 0xd038, 12}, - {m68k_op_add_8_er_al , 0xf1ff, 0xd039, 16}, - {m68k_op_add_8_er_pcdi , 0xf1ff, 0xd03a, 12}, - {m68k_op_add_8_er_pcix , 0xf1ff, 0xd03b, 14}, - {m68k_op_add_8_er_i , 0xf1ff, 0xd03c, 8}, - {m68k_op_add_16_er_aw , 0xf1ff, 0xd078, 12}, - {m68k_op_add_16_er_al , 0xf1ff, 0xd079, 16}, - {m68k_op_add_16_er_pcdi , 0xf1ff, 0xd07a, 12}, - {m68k_op_add_16_er_pcix , 0xf1ff, 0xd07b, 14}, - {m68k_op_add_16_er_i , 0xf1ff, 0xd07c, 8}, - {m68k_op_add_32_er_aw , 0xf1ff, 0xd0b8, 18}, - {m68k_op_add_32_er_al , 0xf1ff, 0xd0b9, 22}, - {m68k_op_add_32_er_pcdi , 0xf1ff, 0xd0ba, 18}, - {m68k_op_add_32_er_pcix , 0xf1ff, 0xd0bb, 20}, - {m68k_op_add_32_er_i , 0xf1ff, 0xd0bc, 16}, - {m68k_op_adda_16_aw , 0xf1ff, 0xd0f8, 16}, - {m68k_op_adda_16_al , 0xf1ff, 0xd0f9, 20}, - {m68k_op_adda_16_pcdi , 0xf1ff, 0xd0fa, 16}, - {m68k_op_adda_16_pcix , 0xf1ff, 0xd0fb, 18}, - {m68k_op_adda_16_i , 0xf1ff, 0xd0fc, 12}, - {m68k_op_addx_8_mm_ay7 , 0xf1ff, 0xd10f, 18}, - {m68k_op_add_8_re_pi7 , 0xf1ff, 0xd11f, 12}, - {m68k_op_add_8_re_pd7 , 0xf1ff, 0xd127, 14}, - {m68k_op_add_8_re_aw , 0xf1ff, 0xd138, 16}, - {m68k_op_add_8_re_al , 0xf1ff, 0xd139, 20}, - {m68k_op_add_16_re_aw , 0xf1ff, 0xd178, 16}, - {m68k_op_add_16_re_al , 0xf1ff, 0xd179, 20}, - {m68k_op_add_32_re_aw , 0xf1ff, 0xd1b8, 24}, - {m68k_op_add_32_re_al , 0xf1ff, 0xd1b9, 28}, - {m68k_op_adda_32_aw , 0xf1ff, 0xd1f8, 18}, - {m68k_op_adda_32_al , 0xf1ff, 0xd1f9, 22}, - {m68k_op_adda_32_pcdi , 0xf1ff, 0xd1fa, 18}, - {m68k_op_adda_32_pcix , 0xf1ff, 0xd1fb, 20}, - {m68k_op_adda_32_i , 0xf1ff, 0xd1fc, 16}, - {m68k_op_ori_8_d , 0xfff8, 0x0000, 8}, - {m68k_op_ori_8_ai , 0xfff8, 0x0010, 16}, - {m68k_op_ori_8_pi , 0xfff8, 0x0018, 16}, - {m68k_op_ori_8_pd , 0xfff8, 0x0020, 18}, - {m68k_op_ori_8_di , 0xfff8, 0x0028, 20}, - {m68k_op_ori_8_ix , 0xfff8, 0x0030, 22}, - {m68k_op_ori_16_d , 0xfff8, 0x0040, 8}, - {m68k_op_ori_16_ai , 0xfff8, 0x0050, 16}, - {m68k_op_ori_16_pi , 0xfff8, 0x0058, 16}, - {m68k_op_ori_16_pd , 0xfff8, 0x0060, 18}, - {m68k_op_ori_16_di , 0xfff8, 0x0068, 20}, - {m68k_op_ori_16_ix , 0xfff8, 0x0070, 22}, - {m68k_op_ori_32_d , 0xfff8, 0x0080, 16}, - {m68k_op_ori_32_ai , 0xfff8, 0x0090, 28}, - {m68k_op_ori_32_pi , 0xfff8, 0x0098, 28}, - {m68k_op_ori_32_pd , 0xfff8, 0x00a0, 30}, - {m68k_op_ori_32_di , 0xfff8, 0x00a8, 32}, - {m68k_op_ori_32_ix , 0xfff8, 0x00b0, 34}, - {m68k_op_andi_8_d , 0xfff8, 0x0200, 8}, - {m68k_op_andi_8_ai , 0xfff8, 0x0210, 16}, - {m68k_op_andi_8_pi , 0xfff8, 0x0218, 16}, - {m68k_op_andi_8_pd , 0xfff8, 0x0220, 18}, - {m68k_op_andi_8_di , 0xfff8, 0x0228, 20}, - {m68k_op_andi_8_ix , 0xfff8, 0x0230, 22}, - {m68k_op_andi_16_d , 0xfff8, 0x0240, 8}, - {m68k_op_andi_16_ai , 0xfff8, 0x0250, 16}, - {m68k_op_andi_16_pi , 0xfff8, 0x0258, 16}, - {m68k_op_andi_16_pd , 0xfff8, 0x0260, 18}, - {m68k_op_andi_16_di , 0xfff8, 0x0268, 20}, - {m68k_op_andi_16_ix , 0xfff8, 0x0270, 22}, - {m68k_op_andi_32_d , 0xfff8, 0x0280, 14}, - {m68k_op_andi_32_ai , 0xfff8, 0x0290, 28}, - {m68k_op_andi_32_pi , 0xfff8, 0x0298, 28}, - {m68k_op_andi_32_pd , 0xfff8, 0x02a0, 30}, - {m68k_op_andi_32_di , 0xfff8, 0x02a8, 32}, - {m68k_op_andi_32_ix , 0xfff8, 0x02b0, 34}, - {m68k_op_subi_8_d , 0xfff8, 0x0400, 8}, - {m68k_op_subi_8_ai , 0xfff8, 0x0410, 16}, - {m68k_op_subi_8_pi , 0xfff8, 0x0418, 16}, - {m68k_op_subi_8_pd , 0xfff8, 0x0420, 18}, - {m68k_op_subi_8_di , 0xfff8, 0x0428, 20}, - {m68k_op_subi_8_ix , 0xfff8, 0x0430, 22}, - {m68k_op_subi_16_d , 0xfff8, 0x0440, 8}, - {m68k_op_subi_16_ai , 0xfff8, 0x0450, 16}, - {m68k_op_subi_16_pi , 0xfff8, 0x0458, 16}, - {m68k_op_subi_16_pd , 0xfff8, 0x0460, 18}, - {m68k_op_subi_16_di , 0xfff8, 0x0468, 20}, - {m68k_op_subi_16_ix , 0xfff8, 0x0470, 22}, - {m68k_op_subi_32_d , 0xfff8, 0x0480, 16}, - {m68k_op_subi_32_ai , 0xfff8, 0x0490, 28}, - {m68k_op_subi_32_pi , 0xfff8, 0x0498, 28}, - {m68k_op_subi_32_pd , 0xfff8, 0x04a0, 30}, - {m68k_op_subi_32_di , 0xfff8, 0x04a8, 32}, - {m68k_op_subi_32_ix , 0xfff8, 0x04b0, 34}, - {m68k_op_addi_8_d , 0xfff8, 0x0600, 8}, - {m68k_op_addi_8_ai , 0xfff8, 0x0610, 16}, - {m68k_op_addi_8_pi , 0xfff8, 0x0618, 16}, - {m68k_op_addi_8_pd , 0xfff8, 0x0620, 18}, - {m68k_op_addi_8_di , 0xfff8, 0x0628, 20}, - {m68k_op_addi_8_ix , 0xfff8, 0x0630, 22}, - {m68k_op_addi_16_d , 0xfff8, 0x0640, 8}, - {m68k_op_addi_16_ai , 0xfff8, 0x0650, 16}, - {m68k_op_addi_16_pi , 0xfff8, 0x0658, 16}, - {m68k_op_addi_16_pd , 0xfff8, 0x0660, 18}, - {m68k_op_addi_16_di , 0xfff8, 0x0668, 20}, - {m68k_op_addi_16_ix , 0xfff8, 0x0670, 22}, - {m68k_op_addi_32_d , 0xfff8, 0x0680, 16}, - {m68k_op_addi_32_ai , 0xfff8, 0x0690, 28}, - {m68k_op_addi_32_pi , 0xfff8, 0x0698, 28}, - {m68k_op_addi_32_pd , 0xfff8, 0x06a0, 30}, - {m68k_op_addi_32_di , 0xfff8, 0x06a8, 32}, - {m68k_op_addi_32_ix , 0xfff8, 0x06b0, 34}, - {m68k_op_btst_32_s_d , 0xfff8, 0x0800, 10}, - {m68k_op_btst_8_s_ai , 0xfff8, 0x0810, 12}, - {m68k_op_btst_8_s_pi , 0xfff8, 0x0818, 12}, - {m68k_op_btst_8_s_pd , 0xfff8, 0x0820, 14}, - {m68k_op_btst_8_s_di , 0xfff8, 0x0828, 16}, - {m68k_op_btst_8_s_ix , 0xfff8, 0x0830, 18}, - {m68k_op_bchg_32_s_d , 0xfff8, 0x0840, 12}, - {m68k_op_bchg_8_s_ai , 0xfff8, 0x0850, 16}, - {m68k_op_bchg_8_s_pi , 0xfff8, 0x0858, 16}, - {m68k_op_bchg_8_s_pd , 0xfff8, 0x0860, 18}, - {m68k_op_bchg_8_s_di , 0xfff8, 0x0868, 20}, - {m68k_op_bchg_8_s_ix , 0xfff8, 0x0870, 22}, - {m68k_op_bclr_32_s_d , 0xfff8, 0x0880, 14}, - {m68k_op_bclr_8_s_ai , 0xfff8, 0x0890, 16}, - {m68k_op_bclr_8_s_pi , 0xfff8, 0x0898, 16}, - {m68k_op_bclr_8_s_pd , 0xfff8, 0x08a0, 18}, - {m68k_op_bclr_8_s_di , 0xfff8, 0x08a8, 20}, - {m68k_op_bclr_8_s_ix , 0xfff8, 0x08b0, 22}, - {m68k_op_bset_32_s_d , 0xfff8, 0x08c0, 12}, - {m68k_op_bset_8_s_ai , 0xfff8, 0x08d0, 16}, - {m68k_op_bset_8_s_pi , 0xfff8, 0x08d8, 16}, - {m68k_op_bset_8_s_pd , 0xfff8, 0x08e0, 18}, - {m68k_op_bset_8_s_di , 0xfff8, 0x08e8, 20}, - {m68k_op_bset_8_s_ix , 0xfff8, 0x08f0, 22}, - {m68k_op_eori_8_d , 0xfff8, 0x0a00, 8}, - {m68k_op_eori_8_ai , 0xfff8, 0x0a10, 16}, - {m68k_op_eori_8_pi , 0xfff8, 0x0a18, 16}, - {m68k_op_eori_8_pd , 0xfff8, 0x0a20, 18}, - {m68k_op_eori_8_di , 0xfff8, 0x0a28, 20}, - {m68k_op_eori_8_ix , 0xfff8, 0x0a30, 22}, - {m68k_op_eori_16_d , 0xfff8, 0x0a40, 8}, - {m68k_op_eori_16_ai , 0xfff8, 0x0a50, 16}, - {m68k_op_eori_16_pi , 0xfff8, 0x0a58, 16}, - {m68k_op_eori_16_pd , 0xfff8, 0x0a60, 18}, - {m68k_op_eori_16_di , 0xfff8, 0x0a68, 20}, - {m68k_op_eori_16_ix , 0xfff8, 0x0a70, 22}, - {m68k_op_eori_32_d , 0xfff8, 0x0a80, 16}, - {m68k_op_eori_32_ai , 0xfff8, 0x0a90, 28}, - {m68k_op_eori_32_pi , 0xfff8, 0x0a98, 28}, - {m68k_op_eori_32_pd , 0xfff8, 0x0aa0, 30}, - {m68k_op_eori_32_di , 0xfff8, 0x0aa8, 32}, - {m68k_op_eori_32_ix , 0xfff8, 0x0ab0, 34}, - {m68k_op_cmpi_8_d , 0xfff8, 0x0c00, 8}, - {m68k_op_cmpi_8_ai , 0xfff8, 0x0c10, 12}, - {m68k_op_cmpi_8_pi , 0xfff8, 0x0c18, 12}, - {m68k_op_cmpi_8_pd , 0xfff8, 0x0c20, 14}, - {m68k_op_cmpi_8_di , 0xfff8, 0x0c28, 16}, - {m68k_op_cmpi_8_ix , 0xfff8, 0x0c30, 18}, - {m68k_op_cmpi_16_d , 0xfff8, 0x0c40, 8}, - {m68k_op_cmpi_16_ai , 0xfff8, 0x0c50, 12}, - {m68k_op_cmpi_16_pi , 0xfff8, 0x0c58, 12}, - {m68k_op_cmpi_16_pd , 0xfff8, 0x0c60, 14}, - {m68k_op_cmpi_16_di , 0xfff8, 0x0c68, 16}, - {m68k_op_cmpi_16_ix , 0xfff8, 0x0c70, 18}, - {m68k_op_cmpi_32_d , 0xfff8, 0x0c80, 14}, - {m68k_op_cmpi_32_ai , 0xfff8, 0x0c90, 20}, - {m68k_op_cmpi_32_pi , 0xfff8, 0x0c98, 20}, - {m68k_op_cmpi_32_pd , 0xfff8, 0x0ca0, 22}, - {m68k_op_cmpi_32_di , 0xfff8, 0x0ca8, 24}, - {m68k_op_cmpi_32_ix , 0xfff8, 0x0cb0, 26}, - {m68k_op_move_8_aw_d , 0xfff8, 0x11c0, 12}, - {m68k_op_move_8_aw_ai , 0xfff8, 0x11d0, 16}, - {m68k_op_move_8_aw_pi , 0xfff8, 0x11d8, 16}, - {m68k_op_move_8_aw_pd , 0xfff8, 0x11e0, 18}, - {m68k_op_move_8_aw_di , 0xfff8, 0x11e8, 20}, - {m68k_op_move_8_aw_ix , 0xfff8, 0x11f0, 22}, - {m68k_op_move_8_al_d , 0xfff8, 0x13c0, 16}, - {m68k_op_move_8_al_ai , 0xfff8, 0x13d0, 20}, - {m68k_op_move_8_al_pi , 0xfff8, 0x13d8, 20}, - {m68k_op_move_8_al_pd , 0xfff8, 0x13e0, 22}, - {m68k_op_move_8_al_di , 0xfff8, 0x13e8, 24}, - {m68k_op_move_8_al_ix , 0xfff8, 0x13f0, 26}, - {m68k_op_move_8_pi7_d , 0xfff8, 0x1ec0, 8}, - {m68k_op_move_8_pi7_ai , 0xfff8, 0x1ed0, 12}, - {m68k_op_move_8_pi7_pi , 0xfff8, 0x1ed8, 12}, - {m68k_op_move_8_pi7_pd , 0xfff8, 0x1ee0, 14}, - {m68k_op_move_8_pi7_di , 0xfff8, 0x1ee8, 16}, - {m68k_op_move_8_pi7_ix , 0xfff8, 0x1ef0, 18}, - {m68k_op_move_8_pd7_d , 0xfff8, 0x1f00, 8}, - {m68k_op_move_8_pd7_ai , 0xfff8, 0x1f10, 12}, - {m68k_op_move_8_pd7_pi , 0xfff8, 0x1f18, 12}, - {m68k_op_move_8_pd7_pd , 0xfff8, 0x1f20, 14}, - {m68k_op_move_8_pd7_di , 0xfff8, 0x1f28, 16}, - {m68k_op_move_8_pd7_ix , 0xfff8, 0x1f30, 18}, - {m68k_op_move_32_aw_d , 0xfff8, 0x21c0, 16}, - {m68k_op_move_32_aw_a , 0xfff8, 0x21c8, 16}, - {m68k_op_move_32_aw_ai , 0xfff8, 0x21d0, 24}, - {m68k_op_move_32_aw_pi , 0xfff8, 0x21d8, 24}, - {m68k_op_move_32_aw_pd , 0xfff8, 0x21e0, 26}, - {m68k_op_move_32_aw_di , 0xfff8, 0x21e8, 28}, - {m68k_op_move_32_aw_ix , 0xfff8, 0x21f0, 30}, - {m68k_op_move_32_al_d , 0xfff8, 0x23c0, 20}, - {m68k_op_move_32_al_a , 0xfff8, 0x23c8, 20}, - {m68k_op_move_32_al_ai , 0xfff8, 0x23d0, 28}, - {m68k_op_move_32_al_pi , 0xfff8, 0x23d8, 28}, - {m68k_op_move_32_al_pd , 0xfff8, 0x23e0, 30}, - {m68k_op_move_32_al_di , 0xfff8, 0x23e8, 32}, - {m68k_op_move_32_al_ix , 0xfff8, 0x23f0, 34}, - {m68k_op_move_16_aw_d , 0xfff8, 0x31c0, 12}, - {m68k_op_move_16_aw_a , 0xfff8, 0x31c8, 12}, - {m68k_op_move_16_aw_ai , 0xfff8, 0x31d0, 16}, - {m68k_op_move_16_aw_pi , 0xfff8, 0x31d8, 16}, - {m68k_op_move_16_aw_pd , 0xfff8, 0x31e0, 18}, - {m68k_op_move_16_aw_di , 0xfff8, 0x31e8, 20}, - {m68k_op_move_16_aw_ix , 0xfff8, 0x31f0, 22}, - {m68k_op_move_16_al_d , 0xfff8, 0x33c0, 16}, - {m68k_op_move_16_al_a , 0xfff8, 0x33c8, 16}, - {m68k_op_move_16_al_ai , 0xfff8, 0x33d0, 20}, - {m68k_op_move_16_al_pi , 0xfff8, 0x33d8, 20}, - {m68k_op_move_16_al_pd , 0xfff8, 0x33e0, 22}, - {m68k_op_move_16_al_di , 0xfff8, 0x33e8, 24}, - {m68k_op_move_16_al_ix , 0xfff8, 0x33f0, 26}, - {m68k_op_negx_8_d , 0xfff8, 0x4000, 4}, - {m68k_op_negx_8_ai , 0xfff8, 0x4010, 12}, - {m68k_op_negx_8_pi , 0xfff8, 0x4018, 12}, - {m68k_op_negx_8_pd , 0xfff8, 0x4020, 14}, - {m68k_op_negx_8_di , 0xfff8, 0x4028, 16}, - {m68k_op_negx_8_ix , 0xfff8, 0x4030, 18}, - {m68k_op_negx_16_d , 0xfff8, 0x4040, 4}, - {m68k_op_negx_16_ai , 0xfff8, 0x4050, 12}, - {m68k_op_negx_16_pi , 0xfff8, 0x4058, 12}, - {m68k_op_negx_16_pd , 0xfff8, 0x4060, 14}, - {m68k_op_negx_16_di , 0xfff8, 0x4068, 16}, - {m68k_op_negx_16_ix , 0xfff8, 0x4070, 18}, - {m68k_op_negx_32_d , 0xfff8, 0x4080, 6}, - {m68k_op_negx_32_ai , 0xfff8, 0x4090, 20}, - {m68k_op_negx_32_pi , 0xfff8, 0x4098, 20}, - {m68k_op_negx_32_pd , 0xfff8, 0x40a0, 22}, - {m68k_op_negx_32_di , 0xfff8, 0x40a8, 24}, - {m68k_op_negx_32_ix , 0xfff8, 0x40b0, 26}, - {m68k_op_move_16_frs_d , 0xfff8, 0x40c0, 6}, - {m68k_op_move_16_frs_ai , 0xfff8, 0x40d0, 12}, - {m68k_op_move_16_frs_pi , 0xfff8, 0x40d8, 12}, - {m68k_op_move_16_frs_pd , 0xfff8, 0x40e0, 14}, - {m68k_op_move_16_frs_di , 0xfff8, 0x40e8, 16}, - {m68k_op_move_16_frs_ix , 0xfff8, 0x40f0, 18}, - {m68k_op_clr_8_d , 0xfff8, 0x4200, 4}, - {m68k_op_clr_8_ai , 0xfff8, 0x4210, 12}, - {m68k_op_clr_8_pi , 0xfff8, 0x4218, 12}, - {m68k_op_clr_8_pd , 0xfff8, 0x4220, 14}, - {m68k_op_clr_8_di , 0xfff8, 0x4228, 16}, - {m68k_op_clr_8_ix , 0xfff8, 0x4230, 18}, - {m68k_op_clr_16_d , 0xfff8, 0x4240, 4}, - {m68k_op_clr_16_ai , 0xfff8, 0x4250, 12}, - {m68k_op_clr_16_pi , 0xfff8, 0x4258, 12}, - {m68k_op_clr_16_pd , 0xfff8, 0x4260, 14}, - {m68k_op_clr_16_di , 0xfff8, 0x4268, 16}, - {m68k_op_clr_16_ix , 0xfff8, 0x4270, 18}, - {m68k_op_clr_32_d , 0xfff8, 0x4280, 6}, - {m68k_op_clr_32_ai , 0xfff8, 0x4290, 20}, - {m68k_op_clr_32_pi , 0xfff8, 0x4298, 20}, - {m68k_op_clr_32_pd , 0xfff8, 0x42a0, 22}, - {m68k_op_clr_32_di , 0xfff8, 0x42a8, 24}, - {m68k_op_clr_32_ix , 0xfff8, 0x42b0, 26}, - {m68k_op_neg_8_d , 0xfff8, 0x4400, 4}, - {m68k_op_neg_8_ai , 0xfff8, 0x4410, 12}, - {m68k_op_neg_8_pi , 0xfff8, 0x4418, 12}, - {m68k_op_neg_8_pd , 0xfff8, 0x4420, 14}, - {m68k_op_neg_8_di , 0xfff8, 0x4428, 16}, - {m68k_op_neg_8_ix , 0xfff8, 0x4430, 18}, - {m68k_op_neg_16_d , 0xfff8, 0x4440, 4}, - {m68k_op_neg_16_ai , 0xfff8, 0x4450, 12}, - {m68k_op_neg_16_pi , 0xfff8, 0x4458, 12}, - {m68k_op_neg_16_pd , 0xfff8, 0x4460, 14}, - {m68k_op_neg_16_di , 0xfff8, 0x4468, 16}, - {m68k_op_neg_16_ix , 0xfff8, 0x4470, 18}, - {m68k_op_neg_32_d , 0xfff8, 0x4480, 6}, - {m68k_op_neg_32_ai , 0xfff8, 0x4490, 20}, - {m68k_op_neg_32_pi , 0xfff8, 0x4498, 20}, - {m68k_op_neg_32_pd , 0xfff8, 0x44a0, 22}, - {m68k_op_neg_32_di , 0xfff8, 0x44a8, 24}, - {m68k_op_neg_32_ix , 0xfff8, 0x44b0, 26}, - {m68k_op_move_16_toc_d , 0xfff8, 0x44c0, 12}, - {m68k_op_move_16_toc_ai , 0xfff8, 0x44d0, 16}, - {m68k_op_move_16_toc_pi , 0xfff8, 0x44d8, 16}, - {m68k_op_move_16_toc_pd , 0xfff8, 0x44e0, 18}, - {m68k_op_move_16_toc_di , 0xfff8, 0x44e8, 20}, - {m68k_op_move_16_toc_ix , 0xfff8, 0x44f0, 22}, - {m68k_op_not_8_d , 0xfff8, 0x4600, 4}, - {m68k_op_not_8_ai , 0xfff8, 0x4610, 12}, - {m68k_op_not_8_pi , 0xfff8, 0x4618, 12}, - {m68k_op_not_8_pd , 0xfff8, 0x4620, 14}, - {m68k_op_not_8_di , 0xfff8, 0x4628, 16}, - {m68k_op_not_8_ix , 0xfff8, 0x4630, 18}, - {m68k_op_not_16_d , 0xfff8, 0x4640, 4}, - {m68k_op_not_16_ai , 0xfff8, 0x4650, 12}, - {m68k_op_not_16_pi , 0xfff8, 0x4658, 12}, - {m68k_op_not_16_pd , 0xfff8, 0x4660, 14}, - {m68k_op_not_16_di , 0xfff8, 0x4668, 16}, - {m68k_op_not_16_ix , 0xfff8, 0x4670, 18}, - {m68k_op_not_32_d , 0xfff8, 0x4680, 6}, - {m68k_op_not_32_ai , 0xfff8, 0x4690, 20}, - {m68k_op_not_32_pi , 0xfff8, 0x4698, 20}, - {m68k_op_not_32_pd , 0xfff8, 0x46a0, 22}, - {m68k_op_not_32_di , 0xfff8, 0x46a8, 24}, - {m68k_op_not_32_ix , 0xfff8, 0x46b0, 26}, - {m68k_op_move_16_tos_d , 0xfff8, 0x46c0, 12}, - {m68k_op_move_16_tos_ai , 0xfff8, 0x46d0, 16}, - {m68k_op_move_16_tos_pi , 0xfff8, 0x46d8, 16}, - {m68k_op_move_16_tos_pd , 0xfff8, 0x46e0, 18}, - {m68k_op_move_16_tos_di , 0xfff8, 0x46e8, 20}, - {m68k_op_move_16_tos_ix , 0xfff8, 0x46f0, 22}, - {m68k_op_nbcd_8_d , 0xfff8, 0x4800, 6}, - {m68k_op_nbcd_8_ai , 0xfff8, 0x4810, 12}, - {m68k_op_nbcd_8_pi , 0xfff8, 0x4818, 12}, - {m68k_op_nbcd_8_pd , 0xfff8, 0x4820, 14}, - {m68k_op_nbcd_8_di , 0xfff8, 0x4828, 16}, - {m68k_op_nbcd_8_ix , 0xfff8, 0x4830, 18}, - {m68k_op_swap_32 , 0xfff8, 0x4840, 4}, - {m68k_op_pea_32_ai , 0xfff8, 0x4850, 12}, - {m68k_op_pea_32_di , 0xfff8, 0x4868, 16}, - {m68k_op_pea_32_ix , 0xfff8, 0x4870, 20}, - {m68k_op_ext_16 , 0xfff8, 0x4880, 4}, - {m68k_op_movem_16_re_ai , 0xfff8, 0x4890, 8}, - {m68k_op_movem_16_re_pd , 0xfff8, 0x48a0, 8}, - {m68k_op_movem_16_re_di , 0xfff8, 0x48a8, 12}, - {m68k_op_movem_16_re_ix , 0xfff8, 0x48b0, 14}, - {m68k_op_ext_32 , 0xfff8, 0x48c0, 4}, - {m68k_op_movem_32_re_ai , 0xfff8, 0x48d0, 8}, - {m68k_op_movem_32_re_pd , 0xfff8, 0x48e0, 8}, - {m68k_op_movem_32_re_di , 0xfff8, 0x48e8, 12}, - {m68k_op_movem_32_re_ix , 0xfff8, 0x48f0, 14}, - {m68k_op_tst_8_d , 0xfff8, 0x4a00, 4}, - {m68k_op_tst_8_ai , 0xfff8, 0x4a10, 8}, - {m68k_op_tst_8_pi , 0xfff8, 0x4a18, 8}, - {m68k_op_tst_8_pd , 0xfff8, 0x4a20, 10}, - {m68k_op_tst_8_di , 0xfff8, 0x4a28, 12}, - {m68k_op_tst_8_ix , 0xfff8, 0x4a30, 14}, - {m68k_op_tst_16_d , 0xfff8, 0x4a40, 4}, - {m68k_op_tst_16_ai , 0xfff8, 0x4a50, 8}, - {m68k_op_tst_16_pi , 0xfff8, 0x4a58, 8}, - {m68k_op_tst_16_pd , 0xfff8, 0x4a60, 10}, - {m68k_op_tst_16_di , 0xfff8, 0x4a68, 12}, - {m68k_op_tst_16_ix , 0xfff8, 0x4a70, 14}, - {m68k_op_tst_32_d , 0xfff8, 0x4a80, 4}, - {m68k_op_tst_32_ai , 0xfff8, 0x4a90, 12}, - {m68k_op_tst_32_pi , 0xfff8, 0x4a98, 12}, - {m68k_op_tst_32_pd , 0xfff8, 0x4aa0, 14}, - {m68k_op_tst_32_di , 0xfff8, 0x4aa8, 16}, - {m68k_op_tst_32_ix , 0xfff8, 0x4ab0, 18}, - {m68k_op_tas_8_d , 0xfff8, 0x4ac0, 4}, - {m68k_op_tas_8_ai , 0xfff8, 0x4ad0, 18}, - {m68k_op_tas_8_pi , 0xfff8, 0x4ad8, 18}, - {m68k_op_tas_8_pd , 0xfff8, 0x4ae0, 20}, - {m68k_op_tas_8_di , 0xfff8, 0x4ae8, 22}, - {m68k_op_tas_8_ix , 0xfff8, 0x4af0, 24}, - {m68k_op_movem_16_er_ai , 0xfff8, 0x4c90, 12}, - {m68k_op_movem_16_er_pi , 0xfff8, 0x4c98, 12}, - {m68k_op_movem_16_er_di , 0xfff8, 0x4ca8, 16}, - {m68k_op_movem_16_er_ix , 0xfff8, 0x4cb0, 18}, - {m68k_op_movem_32_er_ai , 0xfff8, 0x4cd0, 12}, - {m68k_op_movem_32_er_pi , 0xfff8, 0x4cd8, 12}, - {m68k_op_movem_32_er_di , 0xfff8, 0x4ce8, 16}, - {m68k_op_movem_32_er_ix , 0xfff8, 0x4cf0, 18}, - {m68k_op_link_16 , 0xfff8, 0x4e50, 16}, - {m68k_op_unlk_32 , 0xfff8, 0x4e58, 12}, - {m68k_op_move_32_tou , 0xfff8, 0x4e60, 4}, - {m68k_op_move_32_fru , 0xfff8, 0x4e68, 4}, - {m68k_op_jsr_32_ai , 0xfff8, 0x4e90, 16}, - {m68k_op_jsr_32_di , 0xfff8, 0x4ea8, 18}, - {m68k_op_jsr_32_ix , 0xfff8, 0x4eb0, 22}, - {m68k_op_jmp_32_ai , 0xfff8, 0x4ed0, 8}, - {m68k_op_jmp_32_di , 0xfff8, 0x4ee8, 10}, - {m68k_op_jmp_32_ix , 0xfff8, 0x4ef0, 14}, - {m68k_op_st_8_d , 0xfff8, 0x50c0, 6}, - {m68k_op_dbt_16 , 0xfff8, 0x50c8, 12}, - {m68k_op_st_8_ai , 0xfff8, 0x50d0, 12}, - {m68k_op_st_8_pi , 0xfff8, 0x50d8, 12}, - {m68k_op_st_8_pd , 0xfff8, 0x50e0, 14}, - {m68k_op_st_8_di , 0xfff8, 0x50e8, 16}, - {m68k_op_st_8_ix , 0xfff8, 0x50f0, 18}, - {m68k_op_sf_8_d , 0xfff8, 0x51c0, 4}, - {m68k_op_dbf_16 , 0xfff8, 0x51c8, 12}, - {m68k_op_sf_8_ai , 0xfff8, 0x51d0, 12}, - {m68k_op_sf_8_pi , 0xfff8, 0x51d8, 12}, - {m68k_op_sf_8_pd , 0xfff8, 0x51e0, 14}, - {m68k_op_sf_8_di , 0xfff8, 0x51e8, 16}, - {m68k_op_sf_8_ix , 0xfff8, 0x51f0, 18}, - {m68k_op_shi_8_d , 0xfff8, 0x52c0, 4}, - {m68k_op_dbhi_16 , 0xfff8, 0x52c8, 12}, - {m68k_op_shi_8_ai , 0xfff8, 0x52d0, 12}, - {m68k_op_shi_8_pi , 0xfff8, 0x52d8, 12}, - {m68k_op_shi_8_pd , 0xfff8, 0x52e0, 14}, - {m68k_op_shi_8_di , 0xfff8, 0x52e8, 16}, - {m68k_op_shi_8_ix , 0xfff8, 0x52f0, 18}, - {m68k_op_sls_8_d , 0xfff8, 0x53c0, 4}, - {m68k_op_dbls_16 , 0xfff8, 0x53c8, 12}, - {m68k_op_sls_8_ai , 0xfff8, 0x53d0, 12}, - {m68k_op_sls_8_pi , 0xfff8, 0x53d8, 12}, - {m68k_op_sls_8_pd , 0xfff8, 0x53e0, 14}, - {m68k_op_sls_8_di , 0xfff8, 0x53e8, 16}, - {m68k_op_sls_8_ix , 0xfff8, 0x53f0, 18}, - {m68k_op_scc_8_d , 0xfff8, 0x54c0, 4}, - {m68k_op_dbcc_16 , 0xfff8, 0x54c8, 12}, - {m68k_op_scc_8_ai , 0xfff8, 0x54d0, 12}, - {m68k_op_scc_8_pi , 0xfff8, 0x54d8, 12}, - {m68k_op_scc_8_pd , 0xfff8, 0x54e0, 14}, - {m68k_op_scc_8_di , 0xfff8, 0x54e8, 16}, - {m68k_op_scc_8_ix , 0xfff8, 0x54f0, 18}, - {m68k_op_scs_8_d , 0xfff8, 0x55c0, 4}, - {m68k_op_dbcs_16 , 0xfff8, 0x55c8, 12}, - {m68k_op_scs_8_ai , 0xfff8, 0x55d0, 12}, - {m68k_op_scs_8_pi , 0xfff8, 0x55d8, 12}, - {m68k_op_scs_8_pd , 0xfff8, 0x55e0, 14}, - {m68k_op_scs_8_di , 0xfff8, 0x55e8, 16}, - {m68k_op_scs_8_ix , 0xfff8, 0x55f0, 18}, - {m68k_op_sne_8_d , 0xfff8, 0x56c0, 4}, - {m68k_op_dbne_16 , 0xfff8, 0x56c8, 12}, - {m68k_op_sne_8_ai , 0xfff8, 0x56d0, 12}, - {m68k_op_sne_8_pi , 0xfff8, 0x56d8, 12}, - {m68k_op_sne_8_pd , 0xfff8, 0x56e0, 14}, - {m68k_op_sne_8_di , 0xfff8, 0x56e8, 16}, - {m68k_op_sne_8_ix , 0xfff8, 0x56f0, 18}, - {m68k_op_seq_8_d , 0xfff8, 0x57c0, 4}, - {m68k_op_dbeq_16 , 0xfff8, 0x57c8, 12}, - {m68k_op_seq_8_ai , 0xfff8, 0x57d0, 12}, - {m68k_op_seq_8_pi , 0xfff8, 0x57d8, 12}, - {m68k_op_seq_8_pd , 0xfff8, 0x57e0, 14}, - {m68k_op_seq_8_di , 0xfff8, 0x57e8, 16}, - {m68k_op_seq_8_ix , 0xfff8, 0x57f0, 18}, - {m68k_op_svc_8_d , 0xfff8, 0x58c0, 4}, - {m68k_op_dbvc_16 , 0xfff8, 0x58c8, 12}, - {m68k_op_svc_8_ai , 0xfff8, 0x58d0, 12}, - {m68k_op_svc_8_pi , 0xfff8, 0x58d8, 12}, - {m68k_op_svc_8_pd , 0xfff8, 0x58e0, 14}, - {m68k_op_svc_8_di , 0xfff8, 0x58e8, 16}, - {m68k_op_svc_8_ix , 0xfff8, 0x58f0, 18}, - {m68k_op_svs_8_d , 0xfff8, 0x59c0, 4}, - {m68k_op_dbvs_16 , 0xfff8, 0x59c8, 12}, - {m68k_op_svs_8_ai , 0xfff8, 0x59d0, 12}, - {m68k_op_svs_8_pi , 0xfff8, 0x59d8, 12}, - {m68k_op_svs_8_pd , 0xfff8, 0x59e0, 14}, - {m68k_op_svs_8_di , 0xfff8, 0x59e8, 16}, - {m68k_op_svs_8_ix , 0xfff8, 0x59f0, 18}, - {m68k_op_spl_8_d , 0xfff8, 0x5ac0, 4}, - {m68k_op_dbpl_16 , 0xfff8, 0x5ac8, 12}, - {m68k_op_spl_8_ai , 0xfff8, 0x5ad0, 12}, - {m68k_op_spl_8_pi , 0xfff8, 0x5ad8, 12}, - {m68k_op_spl_8_pd , 0xfff8, 0x5ae0, 14}, - {m68k_op_spl_8_di , 0xfff8, 0x5ae8, 16}, - {m68k_op_spl_8_ix , 0xfff8, 0x5af0, 18}, - {m68k_op_smi_8_d , 0xfff8, 0x5bc0, 4}, - {m68k_op_dbmi_16 , 0xfff8, 0x5bc8, 12}, - {m68k_op_smi_8_ai , 0xfff8, 0x5bd0, 12}, - {m68k_op_smi_8_pi , 0xfff8, 0x5bd8, 12}, - {m68k_op_smi_8_pd , 0xfff8, 0x5be0, 14}, - {m68k_op_smi_8_di , 0xfff8, 0x5be8, 16}, - {m68k_op_smi_8_ix , 0xfff8, 0x5bf0, 18}, - {m68k_op_sge_8_d , 0xfff8, 0x5cc0, 4}, - {m68k_op_dbge_16 , 0xfff8, 0x5cc8, 12}, - {m68k_op_sge_8_ai , 0xfff8, 0x5cd0, 12}, - {m68k_op_sge_8_pi , 0xfff8, 0x5cd8, 12}, - {m68k_op_sge_8_pd , 0xfff8, 0x5ce0, 14}, - {m68k_op_sge_8_di , 0xfff8, 0x5ce8, 16}, - {m68k_op_sge_8_ix , 0xfff8, 0x5cf0, 18}, - {m68k_op_slt_8_d , 0xfff8, 0x5dc0, 4}, - {m68k_op_dblt_16 , 0xfff8, 0x5dc8, 12}, - {m68k_op_slt_8_ai , 0xfff8, 0x5dd0, 12}, - {m68k_op_slt_8_pi , 0xfff8, 0x5dd8, 12}, - {m68k_op_slt_8_pd , 0xfff8, 0x5de0, 14}, - {m68k_op_slt_8_di , 0xfff8, 0x5de8, 16}, - {m68k_op_slt_8_ix , 0xfff8, 0x5df0, 18}, - {m68k_op_sgt_8_d , 0xfff8, 0x5ec0, 4}, - {m68k_op_dbgt_16 , 0xfff8, 0x5ec8, 12}, - {m68k_op_sgt_8_ai , 0xfff8, 0x5ed0, 12}, - {m68k_op_sgt_8_pi , 0xfff8, 0x5ed8, 12}, - {m68k_op_sgt_8_pd , 0xfff8, 0x5ee0, 14}, - {m68k_op_sgt_8_di , 0xfff8, 0x5ee8, 16}, - {m68k_op_sgt_8_ix , 0xfff8, 0x5ef0, 18}, - {m68k_op_sle_8_d , 0xfff8, 0x5fc0, 4}, - {m68k_op_dble_16 , 0xfff8, 0x5fc8, 12}, - {m68k_op_sle_8_ai , 0xfff8, 0x5fd0, 12}, - {m68k_op_sle_8_pi , 0xfff8, 0x5fd8, 12}, - {m68k_op_sle_8_pd , 0xfff8, 0x5fe0, 14}, - {m68k_op_sle_8_di , 0xfff8, 0x5fe8, 16}, - {m68k_op_sle_8_ix , 0xfff8, 0x5ff0, 18}, - {m68k_op_sbcd_8_mm_ax7 , 0xfff8, 0x8f08, 18}, - {m68k_op_subx_8_mm_ax7 , 0xfff8, 0x9f08, 18}, - {m68k_op_cmpm_8_ax7 , 0xfff8, 0xbf08, 12}, - {m68k_op_abcd_8_mm_ax7 , 0xfff8, 0xcf08, 18}, - {m68k_op_addx_8_mm_ax7 , 0xfff8, 0xdf08, 18}, - {m68k_op_asr_16_ai , 0xfff8, 0xe0d0, 12}, - {m68k_op_asr_16_pi , 0xfff8, 0xe0d8, 12}, - {m68k_op_asr_16_pd , 0xfff8, 0xe0e0, 14}, - {m68k_op_asr_16_di , 0xfff8, 0xe0e8, 16}, - {m68k_op_asr_16_ix , 0xfff8, 0xe0f0, 18}, - {m68k_op_asl_16_ai , 0xfff8, 0xe1d0, 12}, - {m68k_op_asl_16_pi , 0xfff8, 0xe1d8, 12}, - {m68k_op_asl_16_pd , 0xfff8, 0xe1e0, 14}, - {m68k_op_asl_16_di , 0xfff8, 0xe1e8, 16}, - {m68k_op_asl_16_ix , 0xfff8, 0xe1f0, 18}, - {m68k_op_lsr_16_ai , 0xfff8, 0xe2d0, 12}, - {m68k_op_lsr_16_pi , 0xfff8, 0xe2d8, 12}, - {m68k_op_lsr_16_pd , 0xfff8, 0xe2e0, 14}, - {m68k_op_lsr_16_di , 0xfff8, 0xe2e8, 16}, - {m68k_op_lsr_16_ix , 0xfff8, 0xe2f0, 18}, - {m68k_op_lsl_16_ai , 0xfff8, 0xe3d0, 12}, - {m68k_op_lsl_16_pi , 0xfff8, 0xe3d8, 12}, - {m68k_op_lsl_16_pd , 0xfff8, 0xe3e0, 14}, - {m68k_op_lsl_16_di , 0xfff8, 0xe3e8, 16}, - {m68k_op_lsl_16_ix , 0xfff8, 0xe3f0, 18}, - {m68k_op_roxr_16_ai , 0xfff8, 0xe4d0, 12}, - {m68k_op_roxr_16_pi , 0xfff8, 0xe4d8, 12}, - {m68k_op_roxr_16_pd , 0xfff8, 0xe4e0, 14}, - {m68k_op_roxr_16_di , 0xfff8, 0xe4e8, 16}, - {m68k_op_roxr_16_ix , 0xfff8, 0xe4f0, 18}, - {m68k_op_roxl_16_ai , 0xfff8, 0xe5d0, 12}, - {m68k_op_roxl_16_pi , 0xfff8, 0xe5d8, 12}, - {m68k_op_roxl_16_pd , 0xfff8, 0xe5e0, 14}, - {m68k_op_roxl_16_di , 0xfff8, 0xe5e8, 16}, - {m68k_op_roxl_16_ix , 0xfff8, 0xe5f0, 18}, - {m68k_op_ror_16_ai , 0xfff8, 0xe6d0, 12}, - {m68k_op_ror_16_pi , 0xfff8, 0xe6d8, 12}, - {m68k_op_ror_16_pd , 0xfff8, 0xe6e0, 14}, - {m68k_op_ror_16_di , 0xfff8, 0xe6e8, 16}, - {m68k_op_ror_16_ix , 0xfff8, 0xe6f0, 18}, - {m68k_op_rol_16_ai , 0xfff8, 0xe7d0, 12}, - {m68k_op_rol_16_pi , 0xfff8, 0xe7d8, 12}, - {m68k_op_rol_16_pd , 0xfff8, 0xe7e0, 14}, - {m68k_op_rol_16_di , 0xfff8, 0xe7e8, 16}, - {m68k_op_rol_16_ix , 0xfff8, 0xe7f0, 18}, - {m68k_op_ori_8_pi7 , 0xffff, 0x001f, 16}, - {m68k_op_ori_8_pd7 , 0xffff, 0x0027, 18}, - {m68k_op_ori_8_aw , 0xffff, 0x0038, 20}, - {m68k_op_ori_8_al , 0xffff, 0x0039, 24}, - {m68k_op_ori_16_toc , 0xffff, 0x003c, 20}, - {m68k_op_ori_16_aw , 0xffff, 0x0078, 20}, - {m68k_op_ori_16_al , 0xffff, 0x0079, 24}, - {m68k_op_ori_16_tos , 0xffff, 0x007c, 20}, - {m68k_op_ori_32_aw , 0xffff, 0x00b8, 32}, - {m68k_op_ori_32_al , 0xffff, 0x00b9, 36}, - {m68k_op_andi_8_pi7 , 0xffff, 0x021f, 16}, - {m68k_op_andi_8_pd7 , 0xffff, 0x0227, 18}, - {m68k_op_andi_8_aw , 0xffff, 0x0238, 20}, - {m68k_op_andi_8_al , 0xffff, 0x0239, 24}, - {m68k_op_andi_16_toc , 0xffff, 0x023c, 20}, - {m68k_op_andi_16_aw , 0xffff, 0x0278, 20}, - {m68k_op_andi_16_al , 0xffff, 0x0279, 24}, - {m68k_op_andi_16_tos , 0xffff, 0x027c, 20}, - {m68k_op_andi_32_aw , 0xffff, 0x02b8, 32}, - {m68k_op_andi_32_al , 0xffff, 0x02b9, 36}, - {m68k_op_subi_8_pi7 , 0xffff, 0x041f, 16}, - {m68k_op_subi_8_pd7 , 0xffff, 0x0427, 18}, - {m68k_op_subi_8_aw , 0xffff, 0x0438, 20}, - {m68k_op_subi_8_al , 0xffff, 0x0439, 24}, - {m68k_op_subi_16_aw , 0xffff, 0x0478, 20}, - {m68k_op_subi_16_al , 0xffff, 0x0479, 24}, - {m68k_op_subi_32_aw , 0xffff, 0x04b8, 32}, - {m68k_op_subi_32_al , 0xffff, 0x04b9, 36}, - {m68k_op_addi_8_pi7 , 0xffff, 0x061f, 16}, - {m68k_op_addi_8_pd7 , 0xffff, 0x0627, 18}, - {m68k_op_addi_8_aw , 0xffff, 0x0638, 20}, - {m68k_op_addi_8_al , 0xffff, 0x0639, 24}, - {m68k_op_addi_16_aw , 0xffff, 0x0678, 20}, - {m68k_op_addi_16_al , 0xffff, 0x0679, 24}, - {m68k_op_addi_32_aw , 0xffff, 0x06b8, 32}, - {m68k_op_addi_32_al , 0xffff, 0x06b9, 36}, - {m68k_op_btst_8_s_pi7 , 0xffff, 0x081f, 12}, - {m68k_op_btst_8_s_pd7 , 0xffff, 0x0827, 14}, - {m68k_op_btst_8_s_aw , 0xffff, 0x0838, 16}, - {m68k_op_btst_8_s_al , 0xffff, 0x0839, 20}, - {m68k_op_btst_8_s_pcdi , 0xffff, 0x083a, 16}, - {m68k_op_btst_8_s_pcix , 0xffff, 0x083b, 18}, - {m68k_op_bchg_8_s_pi7 , 0xffff, 0x085f, 16}, - {m68k_op_bchg_8_s_pd7 , 0xffff, 0x0867, 18}, - {m68k_op_bchg_8_s_aw , 0xffff, 0x0878, 20}, - {m68k_op_bchg_8_s_al , 0xffff, 0x0879, 24}, - {m68k_op_bclr_8_s_pi7 , 0xffff, 0x089f, 16}, - {m68k_op_bclr_8_s_pd7 , 0xffff, 0x08a7, 18}, - {m68k_op_bclr_8_s_aw , 0xffff, 0x08b8, 20}, - {m68k_op_bclr_8_s_al , 0xffff, 0x08b9, 24}, - {m68k_op_bset_8_s_pi7 , 0xffff, 0x08df, 16}, - {m68k_op_bset_8_s_pd7 , 0xffff, 0x08e7, 18}, - {m68k_op_bset_8_s_aw , 0xffff, 0x08f8, 20}, - {m68k_op_bset_8_s_al , 0xffff, 0x08f9, 24}, - {m68k_op_eori_8_pi7 , 0xffff, 0x0a1f, 16}, - {m68k_op_eori_8_pd7 , 0xffff, 0x0a27, 18}, - {m68k_op_eori_8_aw , 0xffff, 0x0a38, 20}, - {m68k_op_eori_8_al , 0xffff, 0x0a39, 24}, - {m68k_op_eori_16_toc , 0xffff, 0x0a3c, 20}, - {m68k_op_eori_16_aw , 0xffff, 0x0a78, 20}, - {m68k_op_eori_16_al , 0xffff, 0x0a79, 24}, - {m68k_op_eori_16_tos , 0xffff, 0x0a7c, 20}, - {m68k_op_eori_32_aw , 0xffff, 0x0ab8, 32}, - {m68k_op_eori_32_al , 0xffff, 0x0ab9, 36}, - {m68k_op_cmpi_8_pi7 , 0xffff, 0x0c1f, 12}, - {m68k_op_cmpi_8_pd7 , 0xffff, 0x0c27, 14}, - {m68k_op_cmpi_8_aw , 0xffff, 0x0c38, 16}, - {m68k_op_cmpi_8_al , 0xffff, 0x0c39, 20}, - {m68k_op_cmpi_16_aw , 0xffff, 0x0c78, 16}, - {m68k_op_cmpi_16_al , 0xffff, 0x0c79, 20}, - {m68k_op_cmpi_32_aw , 0xffff, 0x0cb8, 24}, - {m68k_op_cmpi_32_al , 0xffff, 0x0cb9, 28}, - {m68k_op_move_8_aw_pi7 , 0xffff, 0x11df, 16}, - {m68k_op_move_8_aw_pd7 , 0xffff, 0x11e7, 18}, - {m68k_op_move_8_aw_aw , 0xffff, 0x11f8, 20}, - {m68k_op_move_8_aw_al , 0xffff, 0x11f9, 24}, - {m68k_op_move_8_aw_pcdi , 0xffff, 0x11fa, 20}, - {m68k_op_move_8_aw_pcix , 0xffff, 0x11fb, 22}, - {m68k_op_move_8_aw_i , 0xffff, 0x11fc, 16}, - {m68k_op_move_8_al_pi7 , 0xffff, 0x13df, 20}, - {m68k_op_move_8_al_pd7 , 0xffff, 0x13e7, 22}, - {m68k_op_move_8_al_aw , 0xffff, 0x13f8, 24}, - {m68k_op_move_8_al_al , 0xffff, 0x13f9, 28}, - {m68k_op_move_8_al_pcdi , 0xffff, 0x13fa, 24}, - {m68k_op_move_8_al_pcix , 0xffff, 0x13fb, 26}, - {m68k_op_move_8_al_i , 0xffff, 0x13fc, 20}, - {m68k_op_move_8_pi7_pi7 , 0xffff, 0x1edf, 12}, - {m68k_op_move_8_pi7_pd7 , 0xffff, 0x1ee7, 14}, - {m68k_op_move_8_pi7_aw , 0xffff, 0x1ef8, 16}, - {m68k_op_move_8_pi7_al , 0xffff, 0x1ef9, 20}, - {m68k_op_move_8_pi7_pcdi , 0xffff, 0x1efa, 16}, - {m68k_op_move_8_pi7_pcix , 0xffff, 0x1efb, 18}, - {m68k_op_move_8_pi7_i , 0xffff, 0x1efc, 12}, - {m68k_op_move_8_pd7_pi7 , 0xffff, 0x1f1f, 12}, - {m68k_op_move_8_pd7_pd7 , 0xffff, 0x1f27, 14}, - {m68k_op_move_8_pd7_aw , 0xffff, 0x1f38, 16}, - {m68k_op_move_8_pd7_al , 0xffff, 0x1f39, 20}, - {m68k_op_move_8_pd7_pcdi , 0xffff, 0x1f3a, 16}, - {m68k_op_move_8_pd7_pcix , 0xffff, 0x1f3b, 18}, - {m68k_op_move_8_pd7_i , 0xffff, 0x1f3c, 12}, - {m68k_op_move_32_aw_aw , 0xffff, 0x21f8, 28}, - {m68k_op_move_32_aw_al , 0xffff, 0x21f9, 32}, - {m68k_op_move_32_aw_pcdi , 0xffff, 0x21fa, 28}, - {m68k_op_move_32_aw_pcix , 0xffff, 0x21fb, 30}, - {m68k_op_move_32_aw_i , 0xffff, 0x21fc, 24}, - {m68k_op_move_32_al_aw , 0xffff, 0x23f8, 32}, - {m68k_op_move_32_al_al , 0xffff, 0x23f9, 36}, - {m68k_op_move_32_al_pcdi , 0xffff, 0x23fa, 32}, - {m68k_op_move_32_al_pcix , 0xffff, 0x23fb, 34}, - {m68k_op_move_32_al_i , 0xffff, 0x23fc, 28}, - {m68k_op_move_16_aw_aw , 0xffff, 0x31f8, 20}, - {m68k_op_move_16_aw_al , 0xffff, 0x31f9, 24}, - {m68k_op_move_16_aw_pcdi , 0xffff, 0x31fa, 20}, - {m68k_op_move_16_aw_pcix , 0xffff, 0x31fb, 22}, - {m68k_op_move_16_aw_i , 0xffff, 0x31fc, 16}, - {m68k_op_move_16_al_aw , 0xffff, 0x33f8, 24}, - {m68k_op_move_16_al_al , 0xffff, 0x33f9, 28}, - {m68k_op_move_16_al_pcdi , 0xffff, 0x33fa, 24}, - {m68k_op_move_16_al_pcix , 0xffff, 0x33fb, 26}, - {m68k_op_move_16_al_i , 0xffff, 0x33fc, 20}, - {m68k_op_negx_8_pi7 , 0xffff, 0x401f, 12}, - {m68k_op_negx_8_pd7 , 0xffff, 0x4027, 14}, - {m68k_op_negx_8_aw , 0xffff, 0x4038, 16}, - {m68k_op_negx_8_al , 0xffff, 0x4039, 20}, - {m68k_op_negx_16_aw , 0xffff, 0x4078, 16}, - {m68k_op_negx_16_al , 0xffff, 0x4079, 20}, - {m68k_op_negx_32_aw , 0xffff, 0x40b8, 24}, - {m68k_op_negx_32_al , 0xffff, 0x40b9, 28}, - {m68k_op_move_16_frs_aw , 0xffff, 0x40f8, 16}, - {m68k_op_move_16_frs_al , 0xffff, 0x40f9, 20}, - {m68k_op_clr_8_pi7 , 0xffff, 0x421f, 12}, - {m68k_op_clr_8_pd7 , 0xffff, 0x4227, 14}, - {m68k_op_clr_8_aw , 0xffff, 0x4238, 16}, - {m68k_op_clr_8_al , 0xffff, 0x4239, 20}, - {m68k_op_clr_16_aw , 0xffff, 0x4278, 16}, - {m68k_op_clr_16_al , 0xffff, 0x4279, 20}, - {m68k_op_clr_32_aw , 0xffff, 0x42b8, 24}, - {m68k_op_clr_32_al , 0xffff, 0x42b9, 28}, - {m68k_op_neg_8_pi7 , 0xffff, 0x441f, 12}, - {m68k_op_neg_8_pd7 , 0xffff, 0x4427, 14}, - {m68k_op_neg_8_aw , 0xffff, 0x4438, 16}, - {m68k_op_neg_8_al , 0xffff, 0x4439, 20}, - {m68k_op_neg_16_aw , 0xffff, 0x4478, 16}, - {m68k_op_neg_16_al , 0xffff, 0x4479, 20}, - {m68k_op_neg_32_aw , 0xffff, 0x44b8, 24}, - {m68k_op_neg_32_al , 0xffff, 0x44b9, 28}, - {m68k_op_move_16_toc_aw , 0xffff, 0x44f8, 20}, - {m68k_op_move_16_toc_al , 0xffff, 0x44f9, 24}, - {m68k_op_move_16_toc_pcdi , 0xffff, 0x44fa, 20}, - {m68k_op_move_16_toc_pcix , 0xffff, 0x44fb, 22}, - {m68k_op_move_16_toc_i , 0xffff, 0x44fc, 16}, - {m68k_op_not_8_pi7 , 0xffff, 0x461f, 12}, - {m68k_op_not_8_pd7 , 0xffff, 0x4627, 14}, - {m68k_op_not_8_aw , 0xffff, 0x4638, 16}, - {m68k_op_not_8_al , 0xffff, 0x4639, 20}, - {m68k_op_not_16_aw , 0xffff, 0x4678, 16}, - {m68k_op_not_16_al , 0xffff, 0x4679, 20}, - {m68k_op_not_32_aw , 0xffff, 0x46b8, 24}, - {m68k_op_not_32_al , 0xffff, 0x46b9, 28}, - {m68k_op_move_16_tos_aw , 0xffff, 0x46f8, 20}, - {m68k_op_move_16_tos_al , 0xffff, 0x46f9, 24}, - {m68k_op_move_16_tos_pcdi , 0xffff, 0x46fa, 20}, - {m68k_op_move_16_tos_pcix , 0xffff, 0x46fb, 22}, - {m68k_op_move_16_tos_i , 0xffff, 0x46fc, 16}, - {m68k_op_nbcd_8_pi7 , 0xffff, 0x481f, 12}, - {m68k_op_nbcd_8_pd7 , 0xffff, 0x4827, 14}, - {m68k_op_nbcd_8_aw , 0xffff, 0x4838, 16}, - {m68k_op_nbcd_8_al , 0xffff, 0x4839, 20}, - {m68k_op_pea_32_aw , 0xffff, 0x4878, 16}, - {m68k_op_pea_32_al , 0xffff, 0x4879, 20}, - {m68k_op_pea_32_pcdi , 0xffff, 0x487a, 16}, - {m68k_op_pea_32_pcix , 0xffff, 0x487b, 20}, - {m68k_op_movem_16_re_aw , 0xffff, 0x48b8, 12}, - {m68k_op_movem_16_re_al , 0xffff, 0x48b9, 16}, - {m68k_op_movem_32_re_aw , 0xffff, 0x48f8, 12}, - {m68k_op_movem_32_re_al , 0xffff, 0x48f9, 16}, - {m68k_op_tst_8_pi7 , 0xffff, 0x4a1f, 8}, - {m68k_op_tst_8_pd7 , 0xffff, 0x4a27, 10}, - {m68k_op_tst_8_aw , 0xffff, 0x4a38, 12}, - {m68k_op_tst_8_al , 0xffff, 0x4a39, 16}, - {m68k_op_tst_16_aw , 0xffff, 0x4a78, 12}, - {m68k_op_tst_16_al , 0xffff, 0x4a79, 16}, - {m68k_op_tst_32_aw , 0xffff, 0x4ab8, 16}, - {m68k_op_tst_32_al , 0xffff, 0x4ab9, 20}, - {m68k_op_tas_8_pi7 , 0xffff, 0x4adf, 18}, - {m68k_op_tas_8_pd7 , 0xffff, 0x4ae7, 20}, - {m68k_op_tas_8_aw , 0xffff, 0x4af8, 22}, - {m68k_op_tas_8_al , 0xffff, 0x4af9, 26}, - {m68k_op_illegal , 0xffff, 0x4afc, 4}, - {m68k_op_movem_16_er_aw , 0xffff, 0x4cb8, 16}, - {m68k_op_movem_16_er_al , 0xffff, 0x4cb9, 20}, - {m68k_op_movem_16_er_pcdi , 0xffff, 0x4cba, 16}, - {m68k_op_movem_16_er_pcix , 0xffff, 0x4cbb, 18}, - {m68k_op_movem_32_er_aw , 0xffff, 0x4cf8, 16}, - {m68k_op_movem_32_er_al , 0xffff, 0x4cf9, 20}, - {m68k_op_movem_32_er_pcdi , 0xffff, 0x4cfa, 16}, - {m68k_op_movem_32_er_pcix , 0xffff, 0x4cfb, 18}, - {m68k_op_link_16_a7 , 0xffff, 0x4e57, 16}, - {m68k_op_unlk_32_a7 , 0xffff, 0x4e5f, 12}, - {m68k_op_reset , 0xffff, 0x4e70, 0}, - {m68k_op_nop , 0xffff, 0x4e71, 4}, - {m68k_op_stop , 0xffff, 0x4e72, 4}, - {m68k_op_rte_32 , 0xffff, 0x4e73, 20}, - {m68k_op_rts_32 , 0xffff, 0x4e75, 16}, - {m68k_op_trapv , 0xffff, 0x4e76, 4}, - {m68k_op_rtr_32 , 0xffff, 0x4e77, 20}, - {m68k_op_jsr_32_aw , 0xffff, 0x4eb8, 18}, - {m68k_op_jsr_32_al , 0xffff, 0x4eb9, 20}, - {m68k_op_jsr_32_pcdi , 0xffff, 0x4eba, 18}, - {m68k_op_jsr_32_pcix , 0xffff, 0x4ebb, 22}, - {m68k_op_jmp_32_aw , 0xffff, 0x4ef8, 10}, - {m68k_op_jmp_32_al , 0xffff, 0x4ef9, 12}, - {m68k_op_jmp_32_pcdi , 0xffff, 0x4efa, 10}, - {m68k_op_jmp_32_pcix , 0xffff, 0x4efb, 14}, - {m68k_op_st_8_pi7 , 0xffff, 0x50df, 12}, - {m68k_op_st_8_pd7 , 0xffff, 0x50e7, 14}, - {m68k_op_st_8_aw , 0xffff, 0x50f8, 16}, - {m68k_op_st_8_al , 0xffff, 0x50f9, 20}, - {m68k_op_sf_8_pi7 , 0xffff, 0x51df, 12}, - {m68k_op_sf_8_pd7 , 0xffff, 0x51e7, 14}, - {m68k_op_sf_8_aw , 0xffff, 0x51f8, 16}, - {m68k_op_sf_8_al , 0xffff, 0x51f9, 20}, - {m68k_op_shi_8_pi7 , 0xffff, 0x52df, 12}, - {m68k_op_shi_8_pd7 , 0xffff, 0x52e7, 14}, - {m68k_op_shi_8_aw , 0xffff, 0x52f8, 16}, - {m68k_op_shi_8_al , 0xffff, 0x52f9, 20}, - {m68k_op_sls_8_pi7 , 0xffff, 0x53df, 12}, - {m68k_op_sls_8_pd7 , 0xffff, 0x53e7, 14}, - {m68k_op_sls_8_aw , 0xffff, 0x53f8, 16}, - {m68k_op_sls_8_al , 0xffff, 0x53f9, 20}, - {m68k_op_scc_8_pi7 , 0xffff, 0x54df, 12}, - {m68k_op_scc_8_pd7 , 0xffff, 0x54e7, 14}, - {m68k_op_scc_8_aw , 0xffff, 0x54f8, 16}, - {m68k_op_scc_8_al , 0xffff, 0x54f9, 20}, - {m68k_op_scs_8_pi7 , 0xffff, 0x55df, 12}, - {m68k_op_scs_8_pd7 , 0xffff, 0x55e7, 14}, - {m68k_op_scs_8_aw , 0xffff, 0x55f8, 16}, - {m68k_op_scs_8_al , 0xffff, 0x55f9, 20}, - {m68k_op_sne_8_pi7 , 0xffff, 0x56df, 12}, - {m68k_op_sne_8_pd7 , 0xffff, 0x56e7, 14}, - {m68k_op_sne_8_aw , 0xffff, 0x56f8, 16}, - {m68k_op_sne_8_al , 0xffff, 0x56f9, 20}, - {m68k_op_seq_8_pi7 , 0xffff, 0x57df, 12}, - {m68k_op_seq_8_pd7 , 0xffff, 0x57e7, 14}, - {m68k_op_seq_8_aw , 0xffff, 0x57f8, 16}, - {m68k_op_seq_8_al , 0xffff, 0x57f9, 20}, - {m68k_op_svc_8_pi7 , 0xffff, 0x58df, 12}, - {m68k_op_svc_8_pd7 , 0xffff, 0x58e7, 14}, - {m68k_op_svc_8_aw , 0xffff, 0x58f8, 16}, - {m68k_op_svc_8_al , 0xffff, 0x58f9, 20}, - {m68k_op_svs_8_pi7 , 0xffff, 0x59df, 12}, - {m68k_op_svs_8_pd7 , 0xffff, 0x59e7, 14}, - {m68k_op_svs_8_aw , 0xffff, 0x59f8, 16}, - {m68k_op_svs_8_al , 0xffff, 0x59f9, 20}, - {m68k_op_spl_8_pi7 , 0xffff, 0x5adf, 12}, - {m68k_op_spl_8_pd7 , 0xffff, 0x5ae7, 14}, - {m68k_op_spl_8_aw , 0xffff, 0x5af8, 16}, - {m68k_op_spl_8_al , 0xffff, 0x5af9, 20}, - {m68k_op_smi_8_pi7 , 0xffff, 0x5bdf, 12}, - {m68k_op_smi_8_pd7 , 0xffff, 0x5be7, 14}, - {m68k_op_smi_8_aw , 0xffff, 0x5bf8, 16}, - {m68k_op_smi_8_al , 0xffff, 0x5bf9, 20}, - {m68k_op_sge_8_pi7 , 0xffff, 0x5cdf, 12}, - {m68k_op_sge_8_pd7 , 0xffff, 0x5ce7, 14}, - {m68k_op_sge_8_aw , 0xffff, 0x5cf8, 16}, - {m68k_op_sge_8_al , 0xffff, 0x5cf9, 20}, - {m68k_op_slt_8_pi7 , 0xffff, 0x5ddf, 12}, - {m68k_op_slt_8_pd7 , 0xffff, 0x5de7, 14}, - {m68k_op_slt_8_aw , 0xffff, 0x5df8, 16}, - {m68k_op_slt_8_al , 0xffff, 0x5df9, 20}, - {m68k_op_sgt_8_pi7 , 0xffff, 0x5edf, 12}, - {m68k_op_sgt_8_pd7 , 0xffff, 0x5ee7, 14}, - {m68k_op_sgt_8_aw , 0xffff, 0x5ef8, 16}, - {m68k_op_sgt_8_al , 0xffff, 0x5ef9, 20}, - {m68k_op_sle_8_pi7 , 0xffff, 0x5fdf, 12}, - {m68k_op_sle_8_pd7 , 0xffff, 0x5fe7, 14}, - {m68k_op_sle_8_aw , 0xffff, 0x5ff8, 16}, - {m68k_op_sle_8_al , 0xffff, 0x5ff9, 20}, - {m68k_op_bra_16 , 0xffff, 0x6000, 10}, - {m68k_op_bra_32 , 0xffff, 0x60ff, 10}, - {m68k_op_bsr_16 , 0xffff, 0x6100, 18}, - {m68k_op_bsr_32 , 0xffff, 0x61ff, 18}, - {m68k_op_bhi_16 , 0xffff, 0x6200, 10}, - {m68k_op_bhi_32 , 0xffff, 0x62ff, 10}, - {m68k_op_bls_16 , 0xffff, 0x6300, 10}, - {m68k_op_bls_32 , 0xffff, 0x63ff, 10}, - {m68k_op_bcc_16 , 0xffff, 0x6400, 10}, - {m68k_op_bcc_32 , 0xffff, 0x64ff, 10}, - {m68k_op_bcs_16 , 0xffff, 0x6500, 10}, - {m68k_op_bcs_32 , 0xffff, 0x65ff, 10}, - {m68k_op_bne_16 , 0xffff, 0x6600, 10}, - {m68k_op_bne_32 , 0xffff, 0x66ff, 10}, - {m68k_op_beq_16 , 0xffff, 0x6700, 10}, - {m68k_op_beq_32 , 0xffff, 0x67ff, 10}, - {m68k_op_bvc_16 , 0xffff, 0x6800, 10}, - {m68k_op_bvc_32 , 0xffff, 0x68ff, 10}, - {m68k_op_bvs_16 , 0xffff, 0x6900, 10}, - {m68k_op_bvs_32 , 0xffff, 0x69ff, 10}, - {m68k_op_bpl_16 , 0xffff, 0x6a00, 10}, - {m68k_op_bpl_32 , 0xffff, 0x6aff, 10}, - {m68k_op_bmi_16 , 0xffff, 0x6b00, 10}, - {m68k_op_bmi_32 , 0xffff, 0x6bff, 10}, - {m68k_op_bge_16 , 0xffff, 0x6c00, 10}, - {m68k_op_bge_32 , 0xffff, 0x6cff, 10}, - {m68k_op_blt_16 , 0xffff, 0x6d00, 10}, - {m68k_op_blt_32 , 0xffff, 0x6dff, 10}, - {m68k_op_bgt_16 , 0xffff, 0x6e00, 10}, - {m68k_op_bgt_32 , 0xffff, 0x6eff, 10}, - {m68k_op_ble_16 , 0xffff, 0x6f00, 10}, - {m68k_op_ble_32 , 0xffff, 0x6fff, 10}, - {m68k_op_sbcd_8_mm_axy7 , 0xffff, 0x8f0f, 18}, - {m68k_op_subx_8_mm_axy7 , 0xffff, 0x9f0f, 18}, - {m68k_op_cmpm_8_axy7 , 0xffff, 0xbf0f, 12}, - {m68k_op_abcd_8_mm_axy7 , 0xffff, 0xcf0f, 18}, - {m68k_op_addx_8_mm_axy7 , 0xffff, 0xdf0f, 18}, - {m68k_op_asr_16_aw , 0xffff, 0xe0f8, 16}, - {m68k_op_asr_16_al , 0xffff, 0xe0f9, 20}, - {m68k_op_asl_16_aw , 0xffff, 0xe1f8, 16}, - {m68k_op_asl_16_al , 0xffff, 0xe1f9, 20}, - {m68k_op_lsr_16_aw , 0xffff, 0xe2f8, 16}, - {m68k_op_lsr_16_al , 0xffff, 0xe2f9, 20}, - {m68k_op_lsl_16_aw , 0xffff, 0xe3f8, 16}, - {m68k_op_lsl_16_al , 0xffff, 0xe3f9, 20}, - {m68k_op_roxr_16_aw , 0xffff, 0xe4f8, 16}, - {m68k_op_roxr_16_al , 0xffff, 0xe4f9, 20}, - {m68k_op_roxl_16_aw , 0xffff, 0xe5f8, 16}, - {m68k_op_roxl_16_al , 0xffff, 0xe5f9, 20}, - {m68k_op_ror_16_aw , 0xffff, 0xe6f8, 16}, - {m68k_op_ror_16_al , 0xffff, 0xe6f9, 20}, - {m68k_op_rol_16_aw , 0xffff, 0xe7f8, 16}, - {m68k_op_rol_16_al , 0xffff, 0xe7f9, 20}, - {0, 0, 0, 0} -}; - - -/* Build the opcode handler jump table */ -static void m68ki_build_opcode_table(void) -{ - const opcode_handler_struct *ostruct; - int instr; - int i; - int j; - - for(i = 0; i < 0x10000; i++) - { - /* default to illegal */ - m68ki_instruction_jump_table[i] = m68k_op_illegal; - m68ki_cycles[i] = 4; - } - - ostruct = &m68k_opcode_handler_table[0]; - while(ostruct->mask != 0xff00) - { - for(i = 0;i < 0x10000;i++) - { - if((i & ostruct->mask) == ostruct->match) - { - m68ki_instruction_jump_table[i] = ostruct->opcode_handler; - m68ki_cycles[i] = ostruct->cycles * MUL; - } - } - ostruct++; - } - while(ostruct->mask == 0xff00) - { - for(i = 0;i <= 0xff;i++) - { - m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler; - m68ki_cycles[ostruct->match | i] = ostruct->cycles * MUL; - } - ostruct++; - } - while(ostruct->mask == 0xf1f8) - { - for(i = 0;i < 8;i++) - { - for(j = 0;j < 8;j++) - { - instr = ostruct->match | (i << 9) | j; - m68ki_instruction_jump_table[instr] = ostruct->opcode_handler; - m68ki_cycles[instr] = ostruct->cycles * MUL; - } - } - ostruct++; - } - while(ostruct->mask == 0xfff0) - { - for(i = 0;i <= 0x0f;i++) - { - m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler; - m68ki_cycles[ostruct->match | i] = ostruct->cycles * MUL; - } - ostruct++; - } - while(ostruct->mask == 0xf1ff) - { - for(i = 0;i <= 0x07;i++) - { - m68ki_instruction_jump_table[ostruct->match | (i << 9)] = ostruct->opcode_handler; - m68ki_cycles[ostruct->match | (i << 9)] = ostruct->cycles * MUL; - } - ostruct++; - } - while(ostruct->mask == 0xfff8) - { - for(i = 0;i <= 0x07;i++) - { - m68ki_instruction_jump_table[ostruct->match | i] = ostruct->opcode_handler; - m68ki_cycles[ostruct->match | i] = ostruct->cycles * MUL; - } - ostruct++; - } - while(ostruct->mask == 0xffff) - { - m68ki_instruction_jump_table[ostruct->match] = ostruct->opcode_handler; - m68ki_cycles[ostruct->match] = ostruct->cycles * MUL; - ostruct++; - } -} - -#endif - -/* ======================================================================== */ -/* ============================== END OF FILE ============================= */ -/* ======================================================================== */ - - diff --git a/waterbox/gpgx/core/m68k/readme.txt b/waterbox/gpgx/core/m68k/readme.txt deleted file mode 100644 index 91549011e4..0000000000 --- a/waterbox/gpgx/core/m68k/readme.txt +++ /dev/null @@ -1,315 +0,0 @@ - MUSASHI - ======= - - Version 3.3 - - A portable Motorola M680x0 processor emulation engine. - Copyright 1998-2001 Karl Stenerud. All rights reserved. - - - -INTRODUCTION: ------------- - -Musashi is a Motorola 68000, 68010, 68EC020, and 68020 emulator written in C. -This emulator was written with two goals in mind: portability and speed. - -The emulator is written to ANSI C specifications with the exception that I use -inline functions. This is not compliant to the ANSI spec, but will be -compliant to the ANSI C9X spec. - -It has been successfully running in the MAME project (www.mame.net) for over 2 -years and so has had time to mature. - - - -LICENSE AND COPYRIGHT: ---------------------- - -The Musashi M680x0 emulator is copyright 1998-2001 Karl Stenerud. - -The source code included in this archive is provided AS-IS, free for any -non-commercial purpose. - -If you build a program using this core, please give credit to the author. - -If you wish to use this core in a commercial environment, please contact -the author to discuss commercial licensing. - - - -AVAILABILITY: ------------- -The latest version of this code can be obtained at: -http://kstenerud.cjb.net - - - -CONTACTING THE AUTHOR: ---------------------- -I can be reached at kstenerud@mame.net - - - -BASIC CONFIGURATION: -------------------- -The basic configuration will give you a standard 68000 that has sufficient -functionality to work in a primitive environment. - -This setup assumes that you only have 1 device interrupting it, that the -device will always request an autovectored interrupt, and it will always clear -the interrupt before the interrupt service routine finishes (but could -possibly re-assert the interrupt). -You will have only one address space, no tracing, and no instruction prefetch. - -To implement the basic configuration: - -- Open m68kconf.h and verify that the settings for INLINE and DECL_SPEC will - work with your compiler. (They are set for gcc) - -- In your host program, implement the following functions: - unsigned int m68k_read_memory_8(unsigned int address); - unsigned int m68k_read_memory_16(unsigned int address); - unsigned int m68k_read_memory_32(unsigned int address); - void m68k_write_memory_8(unsigned int address, unsigned int value); - void m68k_write_memory_16(unsigned int address, unsigned int value); - void m68k_write_memory_32(unsigned int address, unsigned int value); - -- In your host program, be sure to call m68k_pulse_reset() once before calling - any of the other functions as this initializes the core. - -- Use m68k_execute() to execute instructions and m68k_set_irq() to cause an - interrupt. - - - -ADDING PROPER INTERRUPT HANDLING: --------------------------------- -The interrupt handling in the basic configuration doesn't emulate the -interrupt acknowledge phase of the CPU and automatically clears an interrupt -request during interrupt processing. -While this works for most systems, you may need more accurate interrupt -handling. - -To add proper interrupt handling: - -- In m68kconf.h, set M68K_EMULATE_INT_ACK to OPT_SPECIFY_HANDLER - -- In m68kconf.h, set M68K_INT_ACK_CALLBACK(A) to your interrupt acknowledge - routine - -- Your interrupt acknowledge routine must return an interrupt vector, - M68K_INT_ACK_AUTOVECTOR, or M68K_INT_ACK_SPURIOUS. most m68k - implementations just use autovectored interrupts. - -- When the interrupting device is satisfied, you must call m68k_set_irq(0) to - remove the interrupt request. - - - -MULTIPLE INTERRUPTS: -------------------- -The above system will work if you have only one device interrupting the CPU, -but if you have more than one device, you must do a bit more. - -To add multiple interrupts: - -- You must make an interrupt arbitration device that will take the highest - priority interrupt and encode it onto the IRQ pins on the CPU. - -- The interrupt arbitration device should use m68k_set_irq() to set the - highest pending interrupt, or 0 for no interrupts pending. - - - -SEPARATE IMMEDIATE AND PC-RELATIVE READS: ----------------------------------------- -You can write faster memory access functions if you know whether you are -fetching from ROM or RAM. Immediate reads are always from the program space -(Always in ROM unless it is running self-modifying code). -This will also separate the pc-relative reads, since some systems treat -PROGRAM mode reads and DATA mode reads differently (for program encryption, -for instance). See the section below (ADDRESS SPACE) for an explanation of -PROGRAM and DATA mode. - -To enable separate reads: - -- In m68kconf.h, turn on M68K_SEPARATE_READS. - -- In your host program, implement the following functions: - unsigned int m68k_read_immediate_16(unsigned int address); - unsigned int m68k_read_immediate_32(unsigned int address); - - unsigned int m68k_read_pcrelative_8(unsigned int address); - unsigned int m68k_read_pcrelative_16(unsigned int address); - unsigned int m68k_read_pcrelative_32(unsigned int address); - -- If you need to know the current PC (for banking and such), set - M68K_MONITOR_PC to OPT_SPECIFY_HANDLER, and set M68K_SET_PC_CALLBACK(A) to - your routine. - - - -ADDRESS SPACES: --------------- -Most systems will only implement one address space, placing ROM at the lower -addresses and RAM at the higher. However, there is the possibility that a -system will implement ROM and RAM in the same address range, but in different -address spaces, or will have different mamory types that require different -handling for the program and the data. - -The 68k accomodates this by allowing different program spaces, the most -important to us being PROGRAM and DATA space. Here is a breakdown of -how information is fetched: - -- All immediate reads are fetched from PROGRAM space. - -- All PC-relative reads are fetched from PROGRAM space. - -- The initial stack pointer and program counter are fetched from PROGRAM space. - -- All other reads (except for those from the moves instruction for 68020) - are fetched from DATA space. - -The m68k deals with this by encoding the requested address space on the -function code pins: - - FC - Address Space 210 - ------------------ --- - USER DATA 001 - USER PROGRAM 010 - SUPERVISOR DATA 101 - SUPERVISOR PROGRAM 110 - CPU SPACE 111 <-- not emulated in this core since we emulate - interrupt acknowledge in another way. - -Problems arise here if you need to emulate this distinction (if, for example, -your ROM and RAM are at the same address range, with RAM and ROM enable -wired to the function code pins). - -There are 2 ways to deal with this situation using Musashi: - -1. If you only need the distinction between PROGRAM and DATA (the most common), - you can just separate the reads (see the preceeding section). This is the - faster solution. - -2. You can emulate the function code pins entirely. - -To emulate the function code pins: - -- In m68kconf.h, set M68K_EMULATE_FC to OPT_SPECIFY_HANDLER and set - M68K_SET_FC_CALLBACK(A) to your function code handler function. - -- Your function code handler should select the proper address space for - subsequent calls to m68k_read_xx (and m68k_write_xx for 68010+). - -Note: immediate reads are always done from program space, so technically you - don't need to implement the separate immediate reads, although you could - gain more speed improvements leaving them in and doing some clever - programming. - - - -USING DIFFERENT CPU TYPES: -------------------------- -The default is to enable only the 68000 cpu type. To change this, change the -settings for M68K_EMULATE_010 etc in m68kconf.h. - -To set the CPU type you want to use: - -- Make sure it is enabled in m68kconf.h. Current switches are: - M68K_EMULATE_010 - M68K_EMULATE_EC020 - M68K_EMULATE_020 - -- In your host program, call m68k_set_cpu_type() and then call - m68k_pulse_reset(). Valid CPU types are: - M68K_CPU_TYPE_68000, - M68K_CPU_TYPE_68010, - M68K_CPU_TYPE_68EC020, - M68K_CPU_TYPE_68020 - - - -CLOCK FREQUENCY: ---------------- -In order to emulate the correct clock frequency, you will have to calculate -how long it takes the emulation to execute a certain number of "cycles" and -vary your calls to m68k_execute() accordingly. -As well, it is a good idea to take away the CPU's timeslice when it writes to -a memory-mapped port in order to give the device it wrote to a chance to -react. - -You can use the functions m68k_cycles_run(), m68k_cycles_remaining(), -m68k_modify_timeslice(), and m68k_end_timeslice() to do this. -Try to use large cycle values in your calls to m68k_execute() since it will -increase throughput. You can always take away the timeslice later. - - - -MORE CORRECT EMULATION: ----------------------- -You may need to enable these in order to properly emulate some of the more -obscure functions of the m68k: - -- M68K_EMULATE_BKPT_ACK causes the CPU to call a breakpoint handler on a BKPT - instruction - -- M68K_EMULATE_TRACE causes the CPU to generate trace exceptions when the - trace bits are set - -- M68K_EMULATE_RESET causes the CPU to call a reset handler on a RESET - instruction. - -- M68K_EMULATE_PREFETCH emulates the 4-word instruction prefetch that is part - of the 68000/68010 (needed for Amiga emulation). - -- call m68k_pulse_halt() to emulate the HALT pin. - - - -CONVENIENCE FUNCTIONS: ---------------------- -These are in here for programmer convenience: - -- M68K_INSTRUCTION_HOOK lets you call a handler before each instruction. - -- M68K_LOG_ENABLE and M68K_LOG_1010_1111 lets you log illegal and A/F-line - instructions. - - - -MULTIPLE CPU EMULATION: ----------------------- -The default is to use only one CPU. To use more than one CPU in this core, -there are some things to keep in mind: - -- To have different cpus call different functions, use OPT_ON instead of - OPT_SPECIFY_HANDLER, and use the m68k_set_xxx_callback() functions to set - your callback handlers on a per-cpu basis. - -- Be sure to call set_cpu_type() for each CPU you use. - -- Use m68k_set_context() and m68k_get_context() to switch to another CPU. - - - -LOAD AND SAVE CPU CONTEXTS FROM DISK: ------------------------------------- -You can use them68k_load_context() and m68k_save_context() functions to load -and save the CPU state to disk. - - - -GET/SET INFORMATION FROM THE CPU: --------------------------------- -You can use m68k_get_reg() and m68k_set_reg() to gain access to the internals -of the CPU. - - - -EXAMPLE: -------- - -I have included a file example.zip that contains a full example. diff --git a/waterbox/gpgx/core/m68k/s68kconf.h b/waterbox/gpgx/core/m68k/s68kconf.h deleted file mode 100644 index 4bc5454186..0000000000 --- a/waterbox/gpgx/core/m68k/s68kconf.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef M68KCONF__HEADER -#define M68KCONF__HEADER - -/* ======================================================================== */ -/* ======================== SUB 68K CONFIGURATION ========================= */ -/* ======================================================================== */ - -/* Configuration switches. - * Use OPT_SPECIFY_HANDLER for configuration options that allow callbacks. - * OPT_SPECIFY_HANDLER causes the core to link directly to the function - * or macro you specify, rather than using callback functions whose pointer - * must be passed in using m68k_set_xxx_callback(). - */ -#define OPT_OFF 0 -#define OPT_ON 1 -#define OPT_SPECIFY_HANDLER 2 - -/* If ON, the CPU will call m68k_write_32_pd() when it executes move.l with a - * predecrement destination EA mode instead of m68k_write_32(). - * To simulate real 68k behavior, m68k_write_32_pd() must first write the high - * word to [address+2], and then write the low word to [address]. - */ -#define M68K_SIMULATE_PD_WRITES OPT_OFF - -/* If ON, CPU will call the interrupt acknowledge callback when it services an - * interrupt. - * If off, all interrupts will be autovectored and all interrupt requests will - * auto-clear when the interrupt is serviced. - */ -#define M68K_EMULATE_INT_ACK OPT_SPECIFY_HANDLER -#define M68K_INT_ACK_CALLBACK(A) scd_68k_irq_ack(A) - -/* If ON, CPU will call the output reset callback when it encounters a reset - * instruction. - */ -#define M68K_EMULATE_RESET OPT_OFF -#define M68K_RESET_CALLBACK() your_reset_handler_function() - -/* If ON, CPU will call the callback when it encounters a tas - * instruction. - */ -#define M68K_TAS_HAS_CALLBACK OPT_SPECIFY_HANDLER -#define M68K_TAS_CALLBACK() 1 - -/* If ON, CPU will call the set fc callback on every memory access to - * differentiate between user/supervisor, program/data access like a real - * 68000 would. This should be enabled and the callback should be set if you - * want to properly emulate the m68010 or higher. (moves uses function codes - * to read/write data from different address spaces) - */ -#define M68K_EMULATE_FC OPT_OFF -#define M68K_SET_FC_CALLBACK(A) your_set_fc_handler_function(A) - -/* If ON, the CPU will monitor the trace flags and take trace exceptions - */ -#define M68K_EMULATE_TRACE OPT_OFF - -/* If ON, the CPU will emulate the 4-byte prefetch queue of a real 68000 */ -#define M68K_EMULATE_PREFETCH OPT_OFF - -/* If ON, the CPU will generate address error exceptions if it tries to - * access a word or longword at an odd address. - * NOTE: This is only emulated properly for 68000 mode. - */ -#define M68K_EMULATE_ADDRESS_ERROR OPT_OFF - -/* If ON and previous option is also ON, address error exceptions will - also be checked when fetching instructions. Disabling this can help - speeding up emulation while still emulating address error exceptions - on other memory access if needed. - * NOTE: This is only emulated properly for 68000 mode. - */ -#define M68K_CHECK_PC_ADDRESS_ERROR OPT_OFF - - -/* ----------------------------- COMPATIBILITY ---------------------------- */ - -/* The following options set optimizations that violate the current ANSI - * standard, but will be compliant under the forthcoming C9X standard. - */ - - -/* If ON, the enulation core will use 64-bit integers to speed up some - * operations. -*/ -#define M68K_USE_64_BIT OPT_OFF - - -/* ======================================================================== */ -/* ============================== END OF FILE ============================= */ -/* ======================================================================== */ - -#endif /* M68KCONF__HEADER */ diff --git a/waterbox/gpgx/core/m68k/s68kcpu.c b/waterbox/gpgx/core/m68k/s68kcpu.c deleted file mode 100644 index 40ff14562a..0000000000 --- a/waterbox/gpgx/core/m68k/s68kcpu.c +++ /dev/null @@ -1,349 +0,0 @@ -/* ======================================================================== */ -/* SUB 68K CORE */ -/* ======================================================================== */ - -extern int scd_68k_irq_ack(int level); - -#define m68ki_cpu s68k -#define MUL (4) - -/* ======================================================================== */ -/* ================================ INCLUDES ============================== */ -/* ======================================================================== */ - -#ifndef BUILD_TABLES -#include "s68ki_cycles.h" -#endif - -#include "s68kconf.h" -#include "m68kcpu.h" -#include "m68kops.h" - -/* ======================================================================== */ -/* ================================= DATA ================================= */ -/* ======================================================================== */ - -#ifdef BUILD_TABLES -static unsigned char s68ki_cycles[0x10000]; -#endif -static int irq_latency; - -/* IRQ priority */ -static const uint8 irq_level[0x40] = -{ - 0, 1, 2, 2, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6 -}; - -m68ki_cpu_core s68k; - - -/* ======================================================================== */ -/* =============================== CALLBACKS ============================== */ -/* ======================================================================== */ - -/* Default callbacks used if the callback hasn't been set yet, or if the - * callback is set to NULL - */ - -#if M68K_EMULATE_INT_ACK == OPT_ON -/* Interrupt acknowledge */ -static int default_int_ack_callback(int int_level) -{ - CPU_INT_LEVEL = 0; - return M68K_INT_ACK_AUTOVECTOR; -} -#endif - -#if M68K_EMULATE_RESET == OPT_ON -/* Called when a reset instruction is executed */ -static void default_reset_instr_callback(void) -{ -} -#endif - -#if M68K_TAS_HAS_CALLBACK == OPT_ON -/* Called when a tas instruction is executed */ -static int default_tas_instr_callback(void) -{ - return 1; // allow writeback -} -#endif - -#if M68K_EMULATE_FC == OPT_ON -/* Called every time there's bus activity (read/write to/from memory */ -static void default_set_fc_callback(unsigned int new_fc) -{ -} -#endif - - -/* ======================================================================== */ -/* ================================= API ================================== */ -/* ======================================================================== */ - -/* Access the internals of the CPU */ -unsigned int s68k_get_reg(m68k_register_t regnum) -{ - switch(regnum) - { - case M68K_REG_D0: return m68ki_cpu.dar[0]; - case M68K_REG_D1: return m68ki_cpu.dar[1]; - case M68K_REG_D2: return m68ki_cpu.dar[2]; - case M68K_REG_D3: return m68ki_cpu.dar[3]; - case M68K_REG_D4: return m68ki_cpu.dar[4]; - case M68K_REG_D5: return m68ki_cpu.dar[5]; - case M68K_REG_D6: return m68ki_cpu.dar[6]; - case M68K_REG_D7: return m68ki_cpu.dar[7]; - case M68K_REG_A0: return m68ki_cpu.dar[8]; - case M68K_REG_A1: return m68ki_cpu.dar[9]; - case M68K_REG_A2: return m68ki_cpu.dar[10]; - case M68K_REG_A3: return m68ki_cpu.dar[11]; - case M68K_REG_A4: return m68ki_cpu.dar[12]; - case M68K_REG_A5: return m68ki_cpu.dar[13]; - case M68K_REG_A6: return m68ki_cpu.dar[14]; - case M68K_REG_A7: return m68ki_cpu.dar[15]; - case M68K_REG_PC: return MASK_OUT_ABOVE_32(m68ki_cpu.pc); - case M68K_REG_SR: return m68ki_cpu.t1_flag | - (m68ki_cpu.s_flag << 11) | - m68ki_cpu.int_mask | - ((m68ki_cpu.x_flag & XFLAG_SET) >> 4) | - ((m68ki_cpu.n_flag & NFLAG_SET) >> 4) | - ((!m68ki_cpu.not_z_flag) << 2) | - ((m68ki_cpu.v_flag & VFLAG_SET) >> 6) | - ((m68ki_cpu.c_flag & CFLAG_SET) >> 8); - case M68K_REG_SP: return m68ki_cpu.dar[15]; - case M68K_REG_USP: return m68ki_cpu.s_flag ? m68ki_cpu.sp[0] : m68ki_cpu.dar[15]; - case M68K_REG_ISP: return m68ki_cpu.s_flag ? m68ki_cpu.dar[15] : m68ki_cpu.sp[4]; -#if M68K_EMULATE_PREFETCH - case M68K_REG_PREF_ADDR: return m68ki_cpu.pref_addr; - case M68K_REG_PREF_DATA: return m68ki_cpu.pref_data; -#endif - case M68K_REG_IR: return m68ki_cpu.ir; - default: return 0; - } -} - -void s68k_set_reg(m68k_register_t regnum, unsigned int value) -{ - switch(regnum) - { - case M68K_REG_D0: REG_D[0] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D1: REG_D[1] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D2: REG_D[2] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D3: REG_D[3] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D4: REG_D[4] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D5: REG_D[5] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D6: REG_D[6] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_D7: REG_D[7] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A0: REG_A[0] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A1: REG_A[1] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A2: REG_A[2] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A3: REG_A[3] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A4: REG_A[4] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A5: REG_A[5] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A6: REG_A[6] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_A7: REG_A[7] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_PC: m68ki_jump(MASK_OUT_ABOVE_32(value)); return; - case M68K_REG_SR: m68ki_set_sr(value); return; - case M68K_REG_SP: REG_SP = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_USP: if(FLAG_S) - REG_USP = MASK_OUT_ABOVE_32(value); - else - REG_SP = MASK_OUT_ABOVE_32(value); - return; - case M68K_REG_ISP: if(FLAG_S) - REG_SP = MASK_OUT_ABOVE_32(value); - else - REG_ISP = MASK_OUT_ABOVE_32(value); - return; - case M68K_REG_IR: REG_IR = MASK_OUT_ABOVE_16(value); return; -#if M68K_EMULATE_PREFETCH - case M68K_REG_PREF_ADDR: CPU_PREF_ADDR = MASK_OUT_ABOVE_32(value); return; -#endif - default: return; - } -} - -/* Set the callbacks */ -#if M68K_EMULATE_INT_ACK == OPT_ON -void s68k_set_int_ack_callback(int (*callback)(int int_level)) -{ - CALLBACK_INT_ACK = callback ? callback : default_int_ack_callback; -} -#endif - -#if M68K_EMULATE_RESET == OPT_ON -void s68k_set_reset_instr_callback(void (*callback)(void)) -{ - CALLBACK_RESET_INSTR = callback ? callback : default_reset_instr_callback; -} -#endif - -#if M68K_TAS_HAS_CALLBACK == OPT_ON -void s68k_set_tas_instr_callback(int (*callback)(void)) -{ - CALLBACK_TAS_INSTR = callback ? callback : default_tas_instr_callback; -} -#endif - -#if M68K_EMULATE_FC == OPT_ON -void s68k_set_fc_callback(void (*callback)(unsigned int new_fc)) -{ - CALLBACK_SET_FC = callback ? callback : default_set_fc_callback; -} -#endif - -extern void error(char *format, ...); -extern uint16 v_counter; - -/* update IRQ level according to triggered interrupts */ -void s68k_update_irq(unsigned int mask) -{ - /* Get IRQ level (6 interrupt lines) */ - mask = irq_level[mask]; - - /* Set IRQ level */ - CPU_INT_LEVEL = mask << 8; - -#ifdef LOG_SCD - error("[%d][%d] IRQ Level = %d(0x%02x) (%x)\n", v_counter, s68k.cycles, CPU_INT_LEVEL>>8,FLAG_INT_MASK,s68k.pc); -#endif -} - -void s68k_run(unsigned int cycles) -{ - /* Make sure CPU is not already ahead */ - if (s68k.cycles >= cycles) - { - return; - } - - /* Check interrupt mask to process IRQ if needed */ - m68ki_check_interrupts(); - - /* Make sure we're not stopped */ - if (CPU_STOPPED) - { - s68k.cycles = cycles; - return; - } - - /* Save end cycles count for when CPU is stopped */ - s68k.cycle_end = cycles; - - /* Return point for when we have an address error (TODO: use goto) */ - m68ki_set_address_error_trap() /* auto-disable (see m68kcpu.h) */ - -#ifdef LOG_SCD - error("[%d][%d] s68k run to %d cycles (%x), irq mask = %x (%x)\n", v_counter, s68k.cycles, cycles, s68k.pc,FLAG_INT_MASK, CPU_INT_LEVEL); -#endif - - while (s68k.cycles < cycles) - { - /* Set tracing accodring to T1. */ - m68ki_trace_t1() /* auto-disable (see m68kcpu.h) */ - - /* Set the address space for reads */ - m68ki_use_data_space() /* auto-disable (see m68kcpu.h) */ - - /* Decode next instruction */ - REG_IR = m68ki_read_imm_16(); - - /* Execute instruction */ - m68ki_instruction_jump_table[REG_IR](); - USE_CYCLES(CYC_INSTRUCTION[REG_IR]); - - /* Trace m68k_exception, if necessary */ - m68ki_exception_if_trace(); /* auto-disable (see m68kcpu.h) */ - } -} - -void s68k_init(void) -{ -#ifdef BUILD_TABLES - static uint emulation_initialized = 0; - - /* The first call to this function initializes the opcode handler jump table */ - if(!emulation_initialized) - { - m68ki_build_opcode_table(); - emulation_initialized = 1; - } -#endif - -#if M68K_EMULATE_INT_ACK == OPT_ON - s68k_set_int_ack_callback(NULL); -#endif -#if M68K_EMULATE_RESET == OPT_ON - s68k_set_reset_instr_callback(NULL); -#endif -#if M68K_TAS_HAS_CALLBACK == OPT_ON - s68k_set_tas_instr_callback(NULL); -#endif -#if M68K_EMULATE_FC == OPT_ON - s68k_set_fc_callback(NULL); -#endif -} - -/* Pulse the RESET line on the CPU */ -void s68k_pulse_reset(void) -{ - /* Clear all stop levels */ - CPU_STOPPED = 0; -#if M68K_EMULATE_ADDRESS_ERROR - CPU_RUN_MODE = RUN_MODE_BERR_AERR_RESET; -#endif - - /* Turn off tracing */ - FLAG_T1 = 0; - m68ki_clear_trace() - - /* Interrupt mask to level 7 */ - FLAG_INT_MASK = 0x0700; - CPU_INT_LEVEL = 0; - irq_latency = 0; - - /* Go to supervisor mode */ - m68ki_set_s_flag(SFLAG_SET); - - /* Invalidate the prefetch queue */ -#if M68K_EMULATE_PREFETCH - /* Set to arbitrary number since our first fetch is from 0 */ - CPU_PREF_ADDR = 0x1000; -#endif /* M68K_EMULATE_PREFETCH */ - - /* Read the initial stack pointer and program counter */ - m68ki_jump(0); - REG_SP = m68ki_read_imm_32(); - REG_PC = m68ki_read_imm_32(); - m68ki_jump(REG_PC); - -#if M68K_EMULATE_ADDRESS_ERROR - CPU_RUN_MODE = RUN_MODE_NORMAL; -#endif - - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_RESET]); -} - -void s68k_pulse_halt(void) -{ - /* Pulse the HALT line on the CPU */ - CPU_STOPPED |= STOP_LEVEL_HALT; -} - -void s68k_clear_halt() -{ - /* Clear the HALT line on the CPU */ - CPU_STOPPED &= ~STOP_LEVEL_HALT; -} - -/* ======================================================================== */ -/* ============================== END OF FILE ============================= */ -/* ======================================================================== */ diff --git a/waterbox/gpgx/core/m68k/s68ki_cycles.h b/waterbox/gpgx/core/m68k/s68ki_cycles.h deleted file mode 100644 index 3214d7d979..0000000000 --- a/waterbox/gpgx/core/m68k/s68ki_cycles.h +++ /dev/null @@ -1,4099 +0,0 @@ -static const unsigned char m68ki_cycles[0x10000] = -{ - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 20*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, - 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 32*4, 36*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 20*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 20*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, - 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 32*4, 36*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, - 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 32*4, 36*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, - 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 32*4, 36*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 20*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 0*4, 0*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, - 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 32*4, 36*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, - 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 34*4, 32*4, 36*4, 32*4, 34*4, 28*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, - 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 28*4, 32*4, 28*4, 30*4, 24*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, - 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 28*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 32*4, 30*4, 34*4, 30*4, 32*4, 26*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 24*4, 26*4, 20*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 22*4, 24*4, 18*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 20*4, 24*4, 20*4, 22*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 16*4, 20*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, - 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 22*4, 26*4, 0*4, 0*4, 4*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 4*4, 4*4, 20*4, 0*4, 16*4, 4*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 18*4, 20*4, 18*4, 22*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 10*4, 12*4, 10*4, 14*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 8*4, 12*4, 8*4, 12*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 14*4, 18*4, 14*4, 16*4, 10*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 14*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 8*4, 12*4, 8*4, 10*4, 4*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 10*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 12*4, 16*4, 12*4, 14*4, 8*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 16*4, 18*4, 12*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, 30*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, - 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 22*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, 24*4, - 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 26*4, 24*4, 28*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, - 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, - 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 20*4, 18*4, 22*4, 18*4, 20*4, 16*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, 12*4, - 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 14*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, 16*4, - 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 18*4, 16*4, 20*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, - 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, 4*4, -}; diff --git a/waterbox/gpgx/core/macros.h b/waterbox/gpgx/core/macros.h deleted file mode 100644 index f1ea4a8afa..0000000000 --- a/waterbox/gpgx/core/macros.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _MACROS_H_ -#define _MACROS_H_ - -#ifdef LSB_FIRST - -#define READ_BYTE(BASE, ADDR) (BASE)[(ADDR)^1] - -#define READ_WORD(BASE, ADDR) (((BASE)[ADDR]<<8) | (BASE)[(ADDR)+1]) - -#define READ_WORD_LONG(BASE, ADDR) (((BASE)[(ADDR)+1]<<24) | \ - ((BASE)[(ADDR)]<<16) | \ - ((BASE)[(ADDR)+3]<<8) | \ - (BASE)[(ADDR)+2]) - -#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[(ADDR)^1] = (VAL)&0xff - -#define WRITE_WORD(BASE, ADDR, VAL) (BASE)[ADDR] = ((VAL)>>8) & 0xff; \ - (BASE)[(ADDR)+1] = (VAL)&0xff - -#define WRITE_WORD_LONG(BASE, ADDR, VAL) (BASE)[(ADDR+1)] = ((VAL)>>24) & 0xff; \ - (BASE)[(ADDR)] = ((VAL)>>16)&0xff; \ - (BASE)[(ADDR+3)] = ((VAL)>>8)&0xff; \ - (BASE)[(ADDR+2)] = (VAL)&0xff - -#else - -#define READ_BYTE(BASE, ADDR) (BASE)[ADDR] -#define READ_WORD(BASE, ADDR) *(uint16 *)((BASE) + (ADDR)) -#define READ_WORD_LONG(BASE, ADDR) *(uint32 *)((BASE) + (ADDR)) -#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[ADDR] = VAL & 0xff -#define WRITE_WORD(BASE, ADDR, VAL) *(uint16 *)((BASE) + (ADDR)) = VAL & 0xffff -#define WRITE_WORD_LONG(BASE, ADDR, VAL) *(uint32 *)((BASE) + (ADDR)) = VAL & 0xffffffff -#endif - -/* C89 compatibility */ -#ifndef M_PI -#define M_PI 3.14159265358979323846264338327f -#endif /* M_PI */ - -/* Set to your compiler's static inline keyword to enable it, or - * set it to blank to disable it. - * If you define INLINE in the makefile, it will override this value. - * NOTE: not enabling inline functions will SEVERELY slow down emulation. - */ -#ifndef INLINE -#define INLINE static __inline__ -#endif /* INLINE */ - -#endif /* _MACROS_H_ */ diff --git a/waterbox/gpgx/core/mem68k.c b/waterbox/gpgx/core/mem68k.c deleted file mode 100644 index 2957d0e0f0..0000000000 --- a/waterbox/gpgx/core/mem68k.c +++ /dev/null @@ -1,1365 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Main 68k bus handlers - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -/*--------------------------------------------------------------------------*/ -/* Unused areas (return open bus data, i.e prefetched instruction word) */ -/*--------------------------------------------------------------------------*/ - -unsigned int m68k_read_bus_8(unsigned int address) -{ -#ifdef LOGERROR - error("Unused read8 %08X (%08X)\n", address, m68k_get_reg(M68K_REG_PC)); -#endif - address = m68k.pc | (address & 1); - return READ_BYTE(m68k.memory_map[((address)>>16)&0xff].base, (address) & 0xffff); -} - -unsigned int m68k_read_bus_16(unsigned int address) -{ -#ifdef LOGERROR - error("Unused read16 %08X (%08X)\n", address, m68k_get_reg(M68K_REG_PC)); -#endif - address = m68k.pc; - return *(uint16 *)(m68k.memory_map[((address)>>16)&0xff].base + ((address) & 0xffff)); -} - - -void m68k_unused_8_w(unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error("Unused write8 %08X = %02X (%08X)\n", address, data, m68k_get_reg(M68K_REG_PC)); -#endif -} - -void m68k_unused_16_w(unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error("Unused write16 %08X = %04X (%08X)\n", address, data, m68k_get_reg(M68K_REG_PC)); -#endif -} - - -/*--------------------------------------------------------------------------*/ -/* Illegal areas (cause system to lock-up since !DTACK is not returned) */ -/*--------------------------------------------------------------------------*/ - -void m68k_lockup_w_8 (unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error ("Lockup %08X = %02X (%08X)\n", address, data, m68k_get_reg(M68K_REG_PC)); -#endif - if (!config.force_dtack) - { - m68k_pulse_halt(); - m68k.cycles = m68k.cycle_end; - } -} - -void m68k_lockup_w_16 (unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error ("Lockup %08X = %04X (%08X)\n", address, data, m68k_get_reg(M68K_REG_PC)); -#endif - if (!config.force_dtack) - { - m68k_pulse_halt(); - m68k.cycles = m68k.cycle_end; - } -} - -unsigned int m68k_lockup_r_8 (unsigned int address) -{ -#ifdef LOGERROR - error ("Lockup %08X.b (%08X)\n", address, m68k_get_reg(M68K_REG_PC)); -#endif - if (!config.force_dtack) - { - m68k_pulse_halt(); - m68k.cycles = m68k.cycle_end; - } - address = m68k.pc | (address & 1); - return READ_BYTE(m68k.memory_map[((address)>>16)&0xff].base, (address) & 0xffff); -} - -unsigned int m68k_lockup_r_16 (unsigned int address) -{ -#ifdef LOGERROR - error ("Lockup %08X.w (%08X)\n", address, m68k_get_reg(M68K_REG_PC)); -#endif - if (!config.force_dtack) - { - m68k_pulse_halt(); - m68k.cycles = m68k.cycle_end; - } - address = m68k.pc; - return *(uint16 *)(m68k.memory_map[((address)>>16)&0xff].base + ((address) & 0xffff)); -} - - -/*--------------------------------------------------------------------------*/ -/* Z80 bus (accessed through I/O chip) */ -/*--------------------------------------------------------------------------*/ - -unsigned int z80_read_byte(unsigned int address) -{ - switch ((address >> 13) & 3) - { - case 2: /* YM2612 */ - { - return fm_read(m68k.cycles, address & 3); - } - - case 3: /* Misc */ - { - /* VDP (through 68k bus) */ - if ((address & 0xFF00) == 0x7F00) - { - return m68k_lockup_r_8(address); - } - return (m68k_read_bus_8(address) | 0xFF); - } - - default: /* ZRAM */ - { - return zram[address & 0x1FFF]; - } - } -} - -unsigned int z80_read_word(unsigned int address) -{ - unsigned int data = z80_read_byte(address); - return (data | (data << 8)); -} - -void z80_write_byte(unsigned int address, unsigned int data) -{ - switch ((address >> 13) & 3) - { - case 2: /* YM2612 */ - { - fm_write(m68k.cycles, address & 3, data); - return; - } - - case 3: - { - switch ((address >> 8) & 0x7F) - { - case 0x60: /* Bank register */ - { - gen_zbank_w(data & 1); - return; - } - - case 0x7F: /* VDP */ - { - m68k_lockup_w_8(address, data); - return; - } - - default: - { - m68k_unused_8_w(address, data); - return; - } - } - } - - default: /* ZRAM */ - { - zram[address & 0x1FFF] = data; - m68k.cycles += 8; /* ZRAM access latency (fixes Pacman 2: New Adventures) */ - return; - } - } -} - -void z80_write_word(unsigned int address, unsigned int data) -{ - z80_write_byte(address, data >> 8); -} - - -/*--------------------------------------------------------------------------*/ -/* I/O Control */ -/*--------------------------------------------------------------------------*/ - -static void m68k_poll_detect(unsigned int reg_mask) -{ - /* detect MAIN-CPU register polling */ - if (m68k.poll.detected & reg_mask) - { - if (m68k.cycles <= m68k.poll.cycle) - { - if (m68k.pc == m68k.poll.pc) - { - /* MAIN-CPU polling confirmed ? */ - if (m68k.poll.detected & 1) - { - /* idle MAIN-CPU until register is modified */ - m68k.cycles = m68k.cycle_end; - m68k.stopped = reg_mask; -#ifdef LOG_SCD - error("m68k stopped from %d cycles\n", m68k.cycles); -#endif - } - else - { - /* confirm MAIN-CPU polling */ - m68k.poll.detected |= 1; - m68k.poll.cycle = m68k.cycles + 840; - } - } - return; - } - } - else - { - /* set MAIN-CPU register access flag */ - m68k.poll.detected = reg_mask; - } - - /* reset MAIN-CPU polling detection */ - m68k.poll.cycle = m68k.cycles + 840; - m68k.poll.pc = m68k.pc; -} - -static void m68k_poll_sync(unsigned int reg_mask) -{ - /* relative SUB-CPU cycle counter */ - unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE; - - /* sync SUB-CPU with MAIN-CPU */ - if (!s68k.stopped) - { - s68k_run(cycles); - } - - /* SUB-CPU idle on register polling ? */ - if (s68k.stopped & reg_mask) - { - /* sync SUB-CPU with MAIN-CPU */ - s68k.cycles = cycles; - - /* restart SUB-CPU */ - s68k.stopped = 0; -#ifdef LOG_SCD - error("s68k started from %d cycles\n", cycles); -#endif - } - - /* clear CPU register access flags */ - s68k.poll.detected &= ~reg_mask; - m68k.poll.detected &= ~reg_mask; -} - -unsigned int ctrl_io_read_byte(unsigned int address) -{ - switch ((address >> 8) & 0xFF) - { - case 0x00: /* I/O chip */ - { - if (!(address & 0xE0)) - { - return io_68k_read((address >> 1) & 0x0F); - } - return m68k_read_bus_8(address); - } - - case 0x11: /* Z80 BUSACK */ - { - if (!(address & 1)) - { - /* Unused bits return prefetched bus data (Time Killers) */ - address = m68k.pc; - - /* Check if bus has been requested and is not reseted */ - if (zstate == 3) - { - /* D0 is cleared */ - return (READ_BYTE(m68k.memory_map[((address)>>16)&0xff].base, (address) & 0xffff) & 0xFE); - } - - /* D0 is set */ - return (READ_BYTE(m68k.memory_map[((address)>>16)&0xff].base, (address) & 0xffff) | 0x01); - } - return m68k_read_bus_8(address); - } - - case 0x20: /* MEGA-CD */ - { -#ifdef LOG_SCD - error("[%d][%d]read byte CD register %X (%X)\n", v_counter, m68k.cycles, address, m68k.pc); -#endif - if (system_hw == SYSTEM_MCD) - { - /* register index ($A12000-A1203F mirrored up to $A120FF) */ - uint8 index = address & 0x3f; - - /* Memory Mode */ - if (index == 0x03) - { - m68k_poll_detect(1<<0x03); - return scd.regs[0x03>>1].byte.l; - } - - /* SUB-CPU communication flags */ - if (index == 0x0f) - { - if (!s68k.stopped) - { - /* relative SUB-CPU cycle counter */ - unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE; - - /* sync SUB-CPU with MAIN-CPU (Dracula Unleashed w/ Sega CD Model 2 Boot ROM) */ - s68k_run(cycles); - } - - m68k_poll_detect(1<<0x0f); - return scd.regs[0x0f>>1].byte.l; - } - - /* default registers */ - if (index < 0x30) - { - /* SUB-CPU communication words */ - if (index >= 0x20) - { - m68k_poll_detect(1 << (index - 0x10)); - } - - /* register LSB */ - if (address & 1) - { - return scd.regs[index >> 1].byte.l; - } - - /* register MSB */ - return scd.regs[index >> 1].byte.h; - } - } - - return m68k_read_bus_8(address); - } - - case 0x30: /* TIME */ - { - if (cart.hw.time_r) - { - unsigned int data = cart.hw.time_r(address); - if (address & 1) - { - return (data & 0xFF); - } - return (data >> 8); - } - return m68k_read_bus_8(address); - } - - case 0x41: /* BOOT ROM */ - { - if ((config.bios & 1) && (address & 1)) - { - unsigned int data = gen_bankswitch_r() & 1; - - /* Unused bits return prefetched bus data */ - address = m68k.pc; - data |= (READ_BYTE(m68k.memory_map[((address)>>16)&0xff].base, (address) & 0xffff) & 0xFE); - return data; - } - return m68k_read_bus_8(address); - } - - case 0x10: /* MEMORY MODE */ - case 0x12: /* Z80 RESET */ - case 0x13: /* unknown */ - case 0x40: /* TMSS */ - case 0x44: /* RADICA */ - case 0x50: /* SVP */ - { - if (svp && (address & 0xFC) == 0x00) - { - unsigned int data = svp->ssp1601.gr[SSP_XST].byte.h; - return (address & 1) ? (data & 0xFF) : (data >> 8); - } - - if (svp && (address & 0xFE) == 0x04) - { - unsigned int data = svp->ssp1601.gr[SSP_PM0].byte.h; - svp->ssp1601.gr[SSP_PM0].byte.h &= ~1; - return (address & 1) ? (data & 0xFF) : (data >> 8); - } - return m68k_read_bus_8(address); - } - - default: /* Invalid address */ - { - return m68k_lockup_r_8(address); - } - } -} - -unsigned int ctrl_io_read_word(unsigned int address) -{ - switch ((address >> 8) & 0xFF) - { - case 0x00: /* I/O chip */ - { - if (!(address & 0xE0)) - { - unsigned int data = io_68k_read((address >> 1) & 0x0F); - return (data << 8 | data); - } - return m68k_read_bus_16(address); - } - - case 0x11: /* Z80 BUSACK */ - { - /* Unused bits return prefetched bus data (Time Killers) */ - address = m68k.pc; - - /* Check if bus has been requested and is not reseted */ - if (zstate == 3) - { - /* D8 is cleared */ - return (*(uint16 *)(m68k.memory_map[((address)>>16)&0xff].base + ((address) & 0xffff)) & 0xFEFF); - } - - /* D8 is set */ - return (*(uint16 *)(m68k.memory_map[((address)>>16)&0xff].base + ((address) & 0xffff)) | 0x0100); - } - - case 0x20: /* MEGA-CD */ - { -#ifdef LOG_SCD - error("[%d][%d]read word CD register %X (%X)\n", v_counter, m68k.cycles, address, m68k.pc); -#endif - if (system_hw == SYSTEM_MCD) - { - /* register index ($A12000-A1203F mirrored up to $A120FF) */ - uint8 index = address & 0x3f; - - /* Memory Mode */ - if (index == 0x02) - { - m68k_poll_detect(1<<0x03); - return scd.regs[0x03>>1].w; - } - - /* CDC host data (word access only ?) */ - if (index == 0x08) - { - return cdc_host_r(); - } - - /* H-INT vector (word access only ?) */ - if (index == 0x06) - { - return *(uint16 *)(m68k.memory_map[0].base + 0x72); - } - - /* Stopwatch counter (word read access only ?) */ - if (index == 0x0c) - { - /* relative SUB-CPU cycle counter */ - unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE; - - /* cycle-accurate counter value */ - return (scd.regs[0x0c>>1].w + ((cycles - scd.stopwatch) / TIMERS_SCYCLES_RATIO)) & 0xfff; - } - - /* default registers */ - if (index < 0x30) - { - /* SUB-CPU communication words */ - if (index >= 0x20) - { - if (!s68k.stopped) - { - /* relative SUB-CPU cycle counter */ - unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE; - - /* sync SUB-CPU with MAIN-CPU (Soul Star) */ - s68k_run(cycles); - } - - m68k_poll_detect(3 << (index - 0x10)); - } - - return scd.regs[index >> 1].w; - } - } - - /* invalid address */ - return m68k_read_bus_16(address); - } - - case 0x30: /* TIME */ - { - if (cart.hw.time_r) - { - return cart.hw.time_r(address); - } - return m68k_read_bus_16(address); - } - - case 0x50: /* SVP */ - { - if (svp && (address & 0xFC) == 0) - { - return svp->ssp1601.gr[SSP_XST].byte.h; - } - - if (svp && (address & 0xFE) == 4) - { - unsigned int data = svp->ssp1601.gr[SSP_PM0].byte.h; - svp->ssp1601.gr[SSP_PM0].byte.h &= ~1; - return data; - } - - return m68k_read_bus_16(address); - } - - case 0x10: /* MEMORY MODE */ - case 0x12: /* Z80 RESET */ - case 0x13: /* unknown */ - case 0x40: /* TMSS */ - case 0x41: /* BOOT ROM */ - case 0x44: /* RADICA */ - { - return m68k_read_bus_16(address); - } - - default: /* Invalid address */ - { - return m68k_lockup_r_16(address); - } - } -} - -void ctrl_io_write_byte(unsigned int address, unsigned int data) -{ - switch ((address >> 8) & 0xFF) - { - case 0x00: /* I/O chip */ - { - if ((address & 0xE1) == 0x01) - { - /* get /LWR only */ - io_68k_write((address >> 1) & 0x0F, data); - return; - } - m68k_unused_8_w(address, data); - return; - } - - case 0x11: /* Z80 BUSREQ */ - { - if (!(address & 1)) - { - gen_zbusreq_w(data & 1, m68k.cycles); - return; - } - m68k_unused_8_w(address, data); - return; - } - - case 0x12: /* Z80 RESET */ - { - if (!(address & 1)) - { - gen_zreset_w(data & 1, m68k.cycles); - return; - } - m68k_unused_8_w(address, data); - return; - } - - case 0x20: /* MEGA-CD */ - { -#ifdef LOG_SCD - error("[%d][%d]write byte CD register %X -> 0x%02X (%X)\n", v_counter, m68k.cycles, address, data, m68k.pc); -#endif - if (system_hw == SYSTEM_MCD) - { - /* register index ($A12000-A1203F mirrored up to $A120FF) */ - switch (address & 0x3f) - { - case 0x00: /* SUB-CPU interrupt */ - { - /* IFL2 bit */ - if (data & 0x01) - { - /* level 2 interrupt enabled ? */ - if (scd.regs[0x32>>1].byte.l & 0x04) - { - if (!s68k.stopped) - { - /* relative SUB-CPU cycle counter */ - unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE; - - /* sync SUB-CPU with MAIN-CPU (Earnest Evans, Fhey Area) */ - s68k_run(cycles); - } - - /* set IFL2 flag */ - scd.regs[0x00].byte.h |= 0x01; - - /* trigger level 2 interrupt */ - scd.pending |= (1 << 2); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - - /* writing 0 does nothing */ - return; - } - - case 0x01: /* SUB-CPU control */ - { - unsigned int halted = s68k.stopped; - - /* RESET bit */ - if (data & 0x01) - { - /* trigger reset on 0->1 transition */ - if (!(scd.regs[0x00].byte.l & 0x01)) - { - /* reset SUB-CPU */ - s68k_pulse_reset(); - } - - /* BUSREQ bit */ - if (data & 0x02) - { - /* SUB-CPU bus requested */ - s68k_pulse_halt(); - } - else - { - /* SUB-CPU bus released */ - s68k_clear_halt(); - } - } - else - { - /* SUB-CPU is halted while !RESET is asserted */ - s68k_pulse_halt(); - } - - /* check if SUB-CPU halt status has changed */ - if (s68k.stopped != halted) - { - int i; - - /* PRG-RAM can only be accessed from MAIN 68K & Z80 when SUB-CPU is halted (Dungeon Explorer USA version) */ - if ((data & 0x03) != 0x01) - { - /* $020000-$03FFFF (resp. $420000-$43FFFF) is mapped to PRG-RAM 128K bank (mirrored every 256 KB) */ - for (i=scd.cartridge.boot+0x02; i>1].byte.h = data; - return; - } - - case 0x03: /* Memory mode */ - { - m68k_poll_sync(1<<0x03); - - /* PRG-RAM 128k bank mapped to $020000-$03FFFF (resp. $420000-$43FFFF) */ - m68k.memory_map[scd.cartridge.boot + 0x02].base = scd.prg_ram + ((data & 0xc0) << 11); - m68k.memory_map[scd.cartridge.boot + 0x03].base = m68k.memory_map[scd.cartridge.boot + 0x02].base + 0x10000; - - /* check current mode */ - if (scd.regs[0x03>>1].byte.l & 0x04) - { - /* DMNA bit */ - if (data & 0x02) - { - /* writing 1 to DMNA in 1M mode will return Word-RAM to SUB-CPU in 2M mode */ - scd.dmna = 1; - } - else - { - /* writing 0 to DMNA in 1M mode actually set DMNA bit */ - data |= 0x02; - - /* update BK0-1 & DMNA bits */ - scd.regs[0x03>>1].byte.l = (scd.regs[0x03>>1].byte.l & ~0xc2) | (data & 0xc2); - return; - } - } - else - { - /* writing 0 in 2M mode does nothing */ - if (data & 0x02) - { - /* Word-RAM is assigned to SUB-CPU */ - scd.dmna = 1; - - /* clear RET bit */ - scd.regs[0x03>>1].byte.l = (scd.regs[0x03>>1].byte.l & ~0xc3) | (data & 0xc2); - return; - } - } - - /* update BK0-1 bits */ - scd.regs[0x03>>1].byte.l = (scd.regs[0x02>>1].byte.l & ~0xc0) | (data & 0xc0); - return; - } - - case 0x0e: /* MAIN-CPU communication flags */ - case 0x0f: /* !LWR is ignored (Space Ace, Dragon's Lair) */ - { - m68k_poll_sync(1<<0x0e); - scd.regs[0x0e>>1].byte.h = data; - return; - } - - default: - { - /* MAIN-CPU communication words */ - if ((address & 0x30) == 0x10) - { - m68k_poll_sync(1 << (address & 0x1f)); - - /* register LSB */ - if (address & 1) - { - scd.regs[(address >> 1) & 0xff].byte.l = data; - return; - } - - /* register MSB */ - scd.regs[(address >> 1) & 0xff].byte.h = data; - return; - } - - /* invalid address */ - m68k_unused_8_w(address, data); - return; - } - } - } - - m68k_unused_8_w(address, data); - return; - } - - case 0x30: /* TIME */ - { - cart.hw.time_w(address, data); - return; - } - - case 0x41: /* BOOT ROM */ - { - if ((config.bios & 1) && (address & 1)) - { - gen_bankswitch_w(data & 1); - return; - } - m68k_unused_8_w(address, data); - return; - } - - case 0x10: /* MEMORY MODE */ - case 0x13: /* unknown */ - case 0x40: /* TMSS */ - case 0x44: /* RADICA */ - case 0x50: /* SVP */ - { - m68k_unused_8_w(address, data); - return; - } - - default: /* Invalid address */ - { - m68k_lockup_w_8(address, data); - return; - } - } -} - -void ctrl_io_write_word(unsigned int address, unsigned int data) -{ - switch ((address >> 8) & 0xFF) - { - case 0x00: /* I/O chip */ - { - if (!(address & 0xE0)) - { - io_68k_write((address >> 1) & 0x0F, data & 0xFF); - return; - } - m68k_unused_16_w(address, data); - return; - } - - case 0x11: /* Z80 BUSREQ */ - { - gen_zbusreq_w((data >> 8) & 1, m68k.cycles); - return; - } - - case 0x12: /* Z80 RESET */ - { - gen_zreset_w((data >> 8) & 1, m68k.cycles); - return; - } - - case 0x20: /* MEGA-CD */ - { -#ifdef LOG_SCD - error("[%d][%d]write word CD register %X -> 0x%04X (%X)\n", v_counter, m68k.cycles, address, data, m68k.pc); -#endif - if (system_hw == SYSTEM_MCD) - { - /* register index ($A12000-A1203F mirrored up to $A120FF) */ - switch (address & 0x3e) - { - case 0x00: /* SUB-CPU interrupt & control */ - { - unsigned int halted = s68k.stopped; - - /* RESET bit */ - if (data & 0x01) - { - /* trigger reset on 0->1 transition */ - if (!(scd.regs[0x00].byte.l & 0x01)) - { - /* reset SUB-CPU */ - s68k_pulse_reset(); - } - - /* BUSREQ bit */ - if (data & 0x02) - { - /* SUB-CPU bus requested */ - s68k_pulse_halt(); - } - else - { - /* SUB-CPU bus released */ - s68k_clear_halt(); - } - } - else - { - /* SUB-CPU is halted while !RESET is asserted */ - s68k_pulse_halt(); - } - - /* check if SUB-CPU halt status has changed */ - if (s68k.stopped != halted) - { - int i; - - /* PRG-RAM can only be accessed from MAIN 68K & Z80 when SUB-CPU is halted (Dungeon Explorer USA version) */ - if ((data & 0x03) != 0x01) - { - /* $020000-$03FFFF (resp. $420000-$43FFFF) is mapped to PRG-RAM 128K bank (mirrored every 256 KB) */ - for (i=scd.cartridge.boot+0x02; i>1].byte.l & 0x04) - { - /* set IFL2 flag */ - scd.regs[0x00].byte.h |= 0x01; - - /* trigger level 2 interrupt */ - scd.pending |= (1 << 2); - - /* update IRQ level */ - s68k_update_irq((scd.pending & scd.regs[0x32>>1].byte.l) >> 1); - } - } - - /* update LSB only */ - scd.regs[0x00].byte.l = data & 0xff; - return; - } - - case 0x02: /* Memory Mode */ - { - m68k_poll_sync(1<<0x03); - - /* PRG-RAM 128k bank mapped to $020000-$03FFFF (resp. $420000-$43FFFF) */ - m68k.memory_map[scd.cartridge.boot + 0x02].base = scd.prg_ram + ((data & 0xc0) << 11); - m68k.memory_map[scd.cartridge.boot + 0x03].base = m68k.memory_map[scd.cartridge.boot + 0x02].base + 0x10000; - - /* check current mode */ - if (scd.regs[0x03>>1].byte.l & 0x04) - { - /* DMNA bit */ - if (data & 0x02) - { - /* writing 1 to DMNA in 1M mode will return Word-RAM to SUB-CPU in 2M mode */ - scd.dmna = 1; - } - else - { - /* writing 0 to DMNA in 1M mode actually set DMNA bit */ - data |= 0x02; - - /* update WP0-7, BK0-1 & DMNA bits */ - scd.regs[0x02>>1].w = (scd.regs[0x02>>1].w & ~0xffc2) | (data & 0xffc2); - return; - } - } - else - { - /* writing 0 in 2M mode does nothing */ - if (data & 0x02) - { - /* Word-RAM is assigned to SUB-CPU */ - scd.dmna = 1; - - /* clear RET bit */ - scd.regs[0x02>>1].w = (scd.regs[0x02>>1].w & ~0xffc3) | (data & 0xffc2); - return; - } - } - - /* update WP0-7 & BK0-1 bits */ - scd.regs[0x02>>1].w = (scd.regs[0x02>>1].w & ~0xffc0) | (data & 0xffc0); - return; - } - - case 0x06: /* H-INT vector (word access only ?) */ - { - *(uint16 *)(m68k.memory_map[0].base + 0x72) = data; - return; - } - - case 0x0e: /* CPU communication flags */ - { - m68k_poll_sync(1<<0x0e); - - /* D8-D15 ignored -> only MAIN-CPU flags are updated (Mortal Kombat) */ - scd.regs[0x0e>>1].byte.h = data & 0xff; - return; - } - - default: - { - /* MAIN-CPU communication words */ - if ((address & 0x30) == 0x10) - { - m68k_poll_sync(3 << (address & 0x1e)); - scd.regs[(address >> 1) & 0xff].w = data; - return; - } - - /* invalid address */ - m68k_unused_16_w (address, data); - return; - } - } - } - - m68k_unused_16_w (address, data); - return; - } - - case 0x30: /* TIME */ - { - cart.hw.time_w(address, data); - return; - } - - case 0x40: /* TMSS */ - { - if (config.bios & 1) - { - gen_tmss_w(address & 3, data); - return; - } - m68k_unused_16_w(address, data); - return; - } - - case 0x50: /* SVP */ - { - if (svp && !(address & 0xFD)) - { - svp->ssp1601.gr[SSP_XST].byte.h = data; - svp->ssp1601.gr[SSP_PM0].byte.h |= 2; - svp->ssp1601.emu_status &= ~SSP_WAIT_PM0; - return; - } - m68k_unused_16_w(address, data); - return; - } - - case 0x10: /* MEMORY MODE */ - case 0x13: /* unknown */ - case 0x41: /* BOOT ROM */ - case 0x44: /* RADICA */ - { - m68k_unused_16_w (address, data); - return; - } - - default: /* Invalid address */ - { - m68k_lockup_w_16 (address, data); - return; - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* VDP */ -/*--------------------------------------------------------------------------*/ - -unsigned int vdp_read_byte(unsigned int address) -{ - switch (address & 0xFD) - { - case 0x00: /* DATA */ - { - return (vdp_68k_data_r() >> 8); - } - - case 0x01: /* DATA */ - { - return (vdp_68k_data_r() & 0xFF); - } - - case 0x04: /* CTRL */ - { - unsigned int data = (vdp_68k_ctrl_r(m68k.cycles) >> 8) & 3; - - /* Unused bits return prefetched bus data */ - address = m68k.pc; - data |= (READ_BYTE(m68k.memory_map[((address)>>16)&0xff].base, (address) & 0xffff) & 0xFC); - - return data; - } - - case 0x05: /* CTRL */ - { - return (vdp_68k_ctrl_r(m68k.cycles) & 0xFF); - } - - case 0x08: /* HVC */ - case 0x0C: - { - return (vdp_hvc_r(m68k.cycles) >> 8); - } - - case 0x09: /* HVC */ - case 0x0D: - { - return (vdp_hvc_r(m68k.cycles) & 0xFF); - } - - case 0x18: /* Unused */ - case 0x19: - case 0x1C: - case 0x1D: - { - return m68k_read_bus_8(address); - } - - default: /* Invalid address */ - { - return m68k_lockup_r_8(address); - } - } -} - -unsigned int vdp_read_word(unsigned int address) -{ - switch (address & 0xFC) - { - case 0x00: /* DATA */ - { - return vdp_68k_data_r(); - } - - case 0x04: /* CTRL */ - { - unsigned int data = vdp_68k_ctrl_r(m68k.cycles) & 0x3FF; - - /* Unused bits return prefetched bus data */ - address = m68k.pc; - data |= (*(uint16 *)(m68k.memory_map[((address)>>16)&0xff].base + ((address) & 0xffff)) & 0xFC00); - - return data; - } - - case 0x08: /* HVC */ - case 0x0C: - { - return vdp_hvc_r(m68k.cycles); - } - - case 0x18: /* Unused */ - case 0x1C: - { - return m68k_read_bus_16(address); - } - - default: /* Invalid address */ - { - return m68k_lockup_r_16(address); - } - } -} - -void vdp_write_byte(unsigned int address, unsigned int data) -{ - switch (address & 0xFC) - { - case 0x00: /* Data port */ - { - vdp_68k_data_w(data << 8 | data); - return; - } - - case 0x04: /* Control port */ - { - vdp_68k_ctrl_w(data << 8 | data); - return; - } - - case 0x10: /* PSG */ - case 0x14: - { - if (address & 1) - { - SN76489_Write(m68k.cycles, data); - return; - } - m68k_unused_8_w(address, data); - return; - } - - case 0x18: /* Unused */ - { - m68k_unused_8_w(address, data); - return; - } - - case 0x1C: /* TEST register */ - { - vdp_test_w(data << 8 | data); - return; - } - - default: /* Invalid address */ - { - m68k_lockup_w_8(address, data); - return; - } - } -} - -void vdp_write_word(unsigned int address, unsigned int data) -{ - switch (address & 0xFC) - { - case 0x00: /* DATA */ - { - vdp_68k_data_w(data); - return; - } - - case 0x04: /* CTRL */ - { - vdp_68k_ctrl_w(data); - return; - } - - case 0x10: /* PSG */ - case 0x14: - { - SN76489_Write(m68k.cycles, data & 0xFF); - return; - } - - case 0x18: /* Unused */ - { - m68k_unused_16_w(address, data); - return; - } - - case 0x1C: /* Test register */ - { - vdp_test_w(data); - return; - } - - default: /* Invalid address */ - { - m68k_lockup_w_16 (address, data); - return; - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* PICO (incomplete) */ -/*--------------------------------------------------------------------------*/ - -unsigned int pico_read_byte(unsigned int address) -{ - switch (address & 0xFF) - { - case 0x01: /* VERSION register */ - { - return (region_code >> 1); - } - - case 0x03: /* IO register */ - { - return ~input.pad[0]; - } - - case 0x05: /* PEN X coordinate (MSB) */ - { - return (input.analog[0][0] >> 8); - } - - case 0x07: /* PEN X coordinate (LSB) */ - { - return (input.analog[0][0] & 0xFF); - } - - case 0x09: /* PEN Y coordinate (MSB) */ - { - return (input.analog[0][1] >> 8); - } - - case 0x0B: /* PEN Y coordinate (LSB) */ - { - return (input.analog[0][1] & 0xFF); - } - - case 0x0D: /* PAGE register */ - { - return (1 << pico_current) - 1; - } - - case 0x10: /* ADPCM data registers (TODO) */ - case 0x11: - { - return 0xff; - } - - case 0x12: /* ADPCM control registers (TODO) */ - { - return 0x80; - } - - default: - { - return m68k_read_bus_8(address); - } - } -} - -unsigned int pico_read_word(unsigned int address) -{ - return (pico_read_byte(address | 1) | (pico_read_byte(address) << 8)); -} diff --git a/waterbox/gpgx/core/mem68k.h b/waterbox/gpgx/core/mem68k.h deleted file mode 100644 index 02087a9424..0000000000 --- a/waterbox/gpgx/core/mem68k.h +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Main 68k bus handlers - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _MEM68K_H_ -#define _MEM68K_H_ - -/* unused areas */ -extern unsigned int m68k_read_bus_8(unsigned int address); -extern unsigned int m68k_read_bus_16(unsigned int address); -extern void m68k_unused_8_w(unsigned int address, unsigned int data); -extern void m68k_unused_16_w(unsigned int address, unsigned int data); - -/* illegal areas */ -extern unsigned int m68k_lockup_r_8(unsigned int address); -extern unsigned int m68k_lockup_r_16(unsigned int address); -extern void m68k_lockup_w_8(unsigned int address, unsigned int data); -extern void m68k_lockup_w_16(unsigned int address, unsigned int data); - -/* Z80 bus */ -extern unsigned int z80_read_byte(unsigned int address); -extern unsigned int z80_read_word(unsigned int address); -extern void z80_write_byte(unsigned int address, unsigned int data); -extern void z80_write_word(unsigned int address, unsigned int data); - -/* I/O & Control registers */ -extern unsigned int ctrl_io_read_byte(unsigned int address); -extern unsigned int ctrl_io_read_word(unsigned int address); -extern void ctrl_io_write_byte(unsigned int address, unsigned int data); -extern void ctrl_io_write_word(unsigned int address, unsigned int data); - -/* VDP */ -extern unsigned int vdp_read_byte(unsigned int address); -extern unsigned int vdp_read_word(unsigned int address); -extern void vdp_write_byte(unsigned int address, unsigned int data); -extern void vdp_write_word(unsigned int address, unsigned int data); - -/* PICO */ -extern unsigned int pico_read_byte(unsigned int address); -extern unsigned int pico_read_word(unsigned int address); - -#endif /* _MEM68K_H_ */ diff --git a/waterbox/gpgx/core/membnk.c b/waterbox/gpgx/core/membnk.c deleted file mode 100644 index 42d0762b97..0000000000 --- a/waterbox/gpgx/core/membnk.c +++ /dev/null @@ -1,322 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Z80 bank access to 68k bus - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - -/* - Handlers for access to unused addresses and those which make the - machine lock up. -*/ - -unsigned int zbank_unused_r(unsigned int address) -{ -#ifdef LOGERROR - error("Z80 bank unused read %06X (%x)\n", address, Z80.pc.d); -#endif - return 0xFF; -} - -void zbank_unused_w(unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error("Z80 bank unused write %06X = %02X (%x)\n", address, data, Z80.pc.d); -#endif -} - -unsigned int zbank_lockup_r(unsigned int address) -{ -#ifdef LOGERROR - error("Z80 bank lockup read %06X (%x)\n", address, Z80.pc.d); -#endif - if (!config.force_dtack) - { - Z80.cycles = 0xFFFFFFFF; - zstate = 0; - } - return 0xFF; -} - -void zbank_lockup_w(unsigned int address, unsigned int data) -{ -#ifdef LOGERROR - error("Z80 bank lockup write %06X = %02X (%x)\n", address, data, Z80.pc.d); -#endif - if (!config.force_dtack) - { - Z80.cycles = 0xFFFFFFFF; - zstate = 0; - } -} - -/* I/O & Control registers */ -unsigned int zbank_read_ctrl_io(unsigned int address) -{ - switch ((address >> 8) & 0xFF) - { - case 0x00: /* I/O chip */ - { - if (!(address & 0xE0)) - { - return (io_68k_read((address >> 1) & 0x0F)); - } - return zbank_unused_r(address); - } - - case 0x11: /* BUSACK */ - { - if (address & 1) - { - return zbank_unused_r(address); - } - return 0xFF; - } - - case 0x30: /* TIME */ - { - if (cart.hw.time_r) - { - unsigned int data = cart.hw.time_r(address); - if (address & 1) - { - return (data & 0xFF); - } - return (data >> 8); - } - return zbank_unused_r(address); - } - - case 0x41: /* OS ROM */ - { - if (address & 1) - { - return (gen_bankswitch_r() | 0xFE); - } - return zbank_unused_r(address); - } - - case 0x10: /* MEMORY MODE */ - case 0x12: /* RESET */ - case 0x20: /* MEGA-CD */ - case 0x40: /* TMSS */ - case 0x44: /* RADICA */ - case 0x50: /* SVP REGISTERS */ - { - return zbank_unused_r(address); - } - - default: /* Invalid address */ - { - return zbank_lockup_r(address); - } - } -} - -void zbank_write_ctrl_io(unsigned int address, unsigned int data) -{ - switch ((address >> 8) & 0xFF) - { - case 0x00: /* I/O chip */ - { - /* get /LWR only */ - if ((address & 0xE1) == 0x01) - { - io_68k_write((address >> 1) & 0x0F, data); - return; - } - zbank_unused_w(address, data); - return; - } - - case 0x11: /* BUSREQ */ - { - if (!(address & 1)) - { - gen_zbusreq_w(data & 1, Z80.cycles); - return; - } - zbank_unused_w(address, data); - return; - } - - case 0x12: /* RESET */ - { - if (!(address & 1)) - { - gen_zreset_w(data & 1, Z80.cycles); - return; - } - zbank_unused_w(address, data); - return; - } - - case 0x30: /* TIME */ - { - cart.hw.time_w(address, data); - return; - } - - case 0x41: /* OS ROM */ - { - if ((config.bios & 1) && (address & 1)) - { - gen_bankswitch_w(data & 1); - return; - } - zbank_unused_w(address, data); - return; - } - - case 0x10: /* MEMORY MODE */ - case 0x20: /* MEGA-CD */ - case 0x40: /* TMSS */ - case 0x44: /* RADICA */ - case 0x50: /* SVP REGISTERS */ - { - zbank_unused_w(address, data); - return; - } - - default: /* Invalid address */ - { - zbank_lockup_w(address, data); - return; - } - } -} - - -/* VDP */ -unsigned int zbank_read_vdp(unsigned int address) -{ - switch (address & 0xFD) - { - case 0x00: /* DATA */ - { - return (vdp_68k_data_r() >> 8); - } - - case 0x01: /* DATA */ - { - return (vdp_68k_data_r() & 0xFF); - } - - case 0x04: /* CTRL */ - { - return (((vdp_68k_ctrl_r(Z80.cycles) >> 8) & 3) | 0xFC); - } - - case 0x05: /* CTRL */ - { - return (vdp_68k_ctrl_r(Z80.cycles) & 0xFF); - } - - case 0x08: /* HVC */ - case 0x0C: - { - return (vdp_hvc_r(Z80.cycles) >> 8); - } - - case 0x09: /* HVC */ - case 0x0D: - { - return (vdp_hvc_r(Z80.cycles) & 0xFF); - } - - case 0x18: /* Unused */ - case 0x19: - case 0x1C: - case 0x1D: - { - return zbank_unused_r(address); - } - - default: /* Invalid address */ - { - return zbank_lockup_r(address); - } - } -} - -void zbank_write_vdp(unsigned int address, unsigned int data) -{ - switch (address & 0xFC) - { - case 0x00: /* Data port */ - { - vdp_68k_data_w(data << 8 | data); - return; - } - - case 0x04: /* Control port */ - { - vdp_68k_ctrl_w(data << 8 | data); - return; - } - - case 0x10: /* PSG */ - case 0x14: - { - if (address & 1) - { - SN76489_Write(Z80.cycles, data); - return; - } - zbank_unused_w(address, data); - return; - } - - case 0x18: /* Unused */ - { - zbank_unused_w(address, data); - return; - } - - case 0x1C: /* TEST register */ - { - vdp_test_w(data << 8 | data); - return; - } - - default: /* Invalid address */ - { - zbank_lockup_w(address, data); - return; - } - } -} diff --git a/waterbox/gpgx/core/membnk.h b/waterbox/gpgx/core/membnk.h deleted file mode 100644 index 175463de66..0000000000 --- a/waterbox/gpgx/core/membnk.h +++ /dev/null @@ -1,58 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Z80 bank access to 68k bus - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2012 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _MEMBNK_H_ -#define _MEMBNK_H_ - -extern unsigned int zbank_unused_r(unsigned int address); -extern void zbank_unused_w(unsigned int address, unsigned int data); -extern unsigned int zbank_lockup_r(unsigned int address); -extern void zbank_lockup_w(unsigned int address, unsigned int data); -extern unsigned int zbank_read_ctrl_io(unsigned int address); -extern void zbank_write_ctrl_io(unsigned int address, unsigned int data); -extern unsigned int zbank_read_vdp(unsigned int address); -extern void zbank_write_vdp(unsigned int address, unsigned int data); - -struct _zbank_memory_map -{ - unsigned int (*read)(unsigned int address); - void (*write)(unsigned int address, unsigned int data); -} zbank_memory_map[256]; - -#endif /* _MEMBNK_H_ */ diff --git a/waterbox/gpgx/core/memz80.c b/waterbox/gpgx/core/memz80.c deleted file mode 100644 index 0098be7c47..0000000000 --- a/waterbox/gpgx/core/memz80.c +++ /dev/null @@ -1,682 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Z80 bus handlers (Genesis & Master System modes) - * - * Support for SG-1000, Mark-III, Master System, Game Gear & Mega Drive ports access - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" - - -/*--------------------------------------------------------------------------*/ -/* Handlers for access to unused addresses and those which make the */ -/* machine lock up. */ -/*--------------------------------------------------------------------------*/ - -INLINE void z80_unused_w(unsigned int address, unsigned char data) -{ -#ifdef LOGERROR - error("Z80 unused write %04X = %02X (%x)\n", address, data, Z80.pc.w.l); -#endif -} - -INLINE unsigned char z80_unused_r(unsigned int address) -{ -#ifdef LOGERROR - error("Z80 unused read %04X (%x)\n", address, Z80.pc.w.l); -#endif - return 0xFF; -} - -INLINE void z80_lockup_w(unsigned int address, unsigned char data) -{ -#ifdef LOGERROR - error("Z80 lockup write %04X = %02X (%x)\n", address, data, Z80.pc.w.l); -#endif - if (!config.force_dtack) - { - Z80.cycles = 0xFFFFFFFF; - zstate = 0; - } -} - -INLINE unsigned char z80_lockup_r(unsigned int address) -{ -#ifdef LOGERROR - error("Z80 lockup read %04X (%x)\n", address, Z80.pc.w.l); -#endif - if (!config.force_dtack) - { - Z80.cycles = 0xFFFFFFFF; - zstate = 0; - } - return 0xFF; -} - - -/*--------------------------------------------------------------------------*/ -/* Z80 Memory handlers (Genesis mode) */ -/*--------------------------------------------------------------------------*/ - -unsigned char z80_memory_r(unsigned int address) -{ - switch((address >> 13) & 7) - { - case 0: /* $0000-$3FFF: Z80 RAM (8K mirrored) */ - case 1: - { - return zram[address & 0x1FFF]; - } - - case 2: /* $4000-$5FFF: YM2612 */ - { - return fm_read(Z80.cycles, address & 3); - } - - case 3: /* $7F00-$7FFF: VDP */ - { - if ((address >> 8) == 0x7F) - { - return (*zbank_memory_map[0xc0].read)(address); - } - return z80_unused_r(address); - } - - default: /* $8000-$FFFF: 68k bank (32K) */ - { - address = zbank | (address & 0x7FFF); - if (zbank_memory_map[address >> 16].read) - { - return (*zbank_memory_map[address >> 16].read)(address); - } - return READ_BYTE(m68k.memory_map[address >> 16].base, address & 0xFFFF); - } - } -} - - -void z80_memory_w(unsigned int address, unsigned char data) -{ - switch((address >> 13) & 7) - { - case 0: /* $0000-$3FFF: Z80 RAM (8K mirrored) */ - case 1: - { - zram[address & 0x1FFF] = data; - return; - } - - case 2: /* $4000-$5FFF: YM2612 */ - { - fm_write(Z80.cycles, address & 3, data); - return; - } - - case 3: /* Bank register and VDP */ - { - switch(address >> 8) - { - case 0x60: /* $6000-$60FF: Bank register */ - { - gen_zbank_w(data & 1); - return; - } - - case 0x7F: /* $7F00-$7FFF: VDP */ - { - (*zbank_memory_map[0xc0].write)(address, data); - return; - } - - default: - { - z80_unused_w(address, data); - return; - } - } - } - - default: /* $8000-$FFFF: 68k bank (32K) */ - { - address = zbank | (address & 0x7FFF); - if (zbank_memory_map[address >> 16].write) - { - (*zbank_memory_map[address >> 16].write)(address, data); - return; - } - WRITE_BYTE(m68k.memory_map[address >> 16].base, address & 0xFFFF, data); - return; - } - } -} - -/*--------------------------------------------------------------------------*/ -/* Unused Port handlers */ -/* */ -/* Ports are unused when not in Mark III compatibility mode. */ -/* */ -/* Genesis games that access ports anyway: */ -/* Thunder Force IV reads port $BF in it's interrupt handler. */ -/* */ -/*--------------------------------------------------------------------------*/ - -unsigned char z80_unused_port_r(unsigned int port) -{ -#if LOGERROR - error("Z80 unused read from port %04X (%x)\n", port, Z80.pc.w.l); -#endif - if (system_hw == SYSTEM_SMS) - { - unsigned int address = (Z80.pc.w.l - 1) & 0xFFFF; - return z80_readmap[address >> 10][address & 0x3FF]; - } - return 0xFF; -} - -void z80_unused_port_w(unsigned int port, unsigned char data) -{ -#if LOGERROR - error("Z80 unused write to port %04X = %02X (%x)\n", port, data, Z80.pc.w.l); -#endif -} - -/*--------------------------------------------------------------------------*/ -/* MegaDrive / Genesis port handlers (Master System compatibility mode) */ -/*--------------------------------------------------------------------------*/ - -void z80_md_port_w(unsigned int port, unsigned char data) -{ - switch (port & 0xC1) - { - case 0x01: - { - io_z80_write(1, data, Z80.cycles + PBC_CYCLE_OFFSET); - return; - } - - case 0x40: - case 0x41: - { - SN76489_Write(Z80.cycles, data); - return; - } - - case 0x80: - { - vdp_z80_data_w(data); - return; - } - - case 0x81: - { - vdp_z80_ctrl_w(data); - return; - } - - default: - { - port &= 0xFF; - - if ((port >= 0xF0) && (config.ym2413 & 1)) - { - fm_write(Z80.cycles, port&3, data); - return; - } - - z80_unused_port_w(port, data); - return; - } - } -} - -unsigned char z80_md_port_r(unsigned int port) -{ - switch (port & 0xC1) - { - case 0x40: - { - return ((vdp_hvc_r(Z80.cycles - 15) >> 8) & 0xFF); - } - - case 0x41: - { - return (vdp_hvc_r(Z80.cycles - 15) & 0xFF); - } - - case 0x80: - { - return vdp_z80_data_r(); - } - - case 0x81: - { - return vdp_z80_ctrl_r(Z80.cycles); - } - - default: - { - port &= 0xFF; - - if ((port == 0xC0) || (port == 0xC1) || (port == 0xDC) || (port == 0xDD)) - { - return io_z80_read(port & 1); - } - - /* read FM chip if enabled */ - if ((port >= 0xF0) && (config.ym2413 & 1)) - { - return YM2413Read(port & 3); - } - - return z80_unused_port_r(port); - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* Game Gear port handlers */ -/*--------------------------------------------------------------------------*/ - -void z80_gg_port_w(unsigned int port, unsigned char data) -{ - switch(port & 0xC1) - { - case 0x00: - case 0x01: - { - port &= 0xFF; - - if (port < 0x07) - { - if (system_hw == SYSTEM_GG) - { - io_gg_write(port, data); - return; - } - - z80_unused_port_w(port & 0xFF, data); - return; - } - - io_z80_write(port & 1, data, Z80.cycles + SMS_CYCLE_OFFSET); - return; - } - - case 0x40: - case 0x41: - { - SN76489_Write(Z80.cycles, data); - return; - } - - case 0x80: - { - vdp_z80_data_w(data); - return; - } - - case 0x81: - { - vdp_sms_ctrl_w(data); - return; - } - - default: - { - z80_unused_port_w(port & 0xFF, data); - return; - } - } -} - -unsigned char z80_gg_port_r(unsigned int port) -{ - switch(port & 0xC1) - { - case 0x00: - case 0x01: - { - port &= 0xFF; - - if (port < 0x07) - { - if (system_hw == SYSTEM_GG) - { - return io_gg_read(port); - } - } - - return z80_unused_port_r(port); - } - - case 0x40: - { - return ((vdp_hvc_r(Z80.cycles) >> 8) & 0xFF); - } - - case 0x41: - { - return (vdp_hvc_r(Z80.cycles) & 0xFF); - } - - case 0x80: - { - return vdp_z80_data_r(); - } - - case 0x81: - { - return vdp_z80_ctrl_r(Z80.cycles); - } - - default: - { - port &= 0xFF; - - if ((port == 0xC0) || (port == 0xC1) || (port == 0xDC) || (port == 0xDD)) - { - return io_z80_read(port & 1); - } - - return z80_unused_port_r(port); - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* Master System port handlers */ -/*--------------------------------------------------------------------------*/ - -void z80_ms_port_w(unsigned int port, unsigned char data) -{ - switch (port & 0xC1) - { - case 0x00: - case 0x01: - { - io_z80_write(port & 1, data, Z80.cycles + SMS_CYCLE_OFFSET); - return; - } - - case 0x40: - case 0x41: - { - SN76489_Write(Z80.cycles, data); - return; - } - - case 0x80: - { - vdp_z80_data_w(data); - return; - } - - case 0x81: - { - vdp_sms_ctrl_w(data); - return; - } - - default: - { - if (!(port & 4) && (config.ym2413 & 1)) - { - fm_write(Z80.cycles, port & 3, data); - return; - } - - z80_unused_port_w(port & 0xFF, data); - return; - } - } -} - -unsigned char z80_ms_port_r(unsigned int port) -{ - switch (port & 0xC1) - { - case 0x00: - case 0x01: - { - return z80_unused_port_r(port & 0xFF); - } - - case 0x40: - { - return ((vdp_hvc_r(Z80.cycles) >> 8) & 0xFF); - } - - case 0x41: - { - return (vdp_hvc_r(Z80.cycles) & 0xFF); - } - - case 0x80: - { - return vdp_z80_data_r(); - } - - case 0x81: - { - return vdp_z80_ctrl_r(Z80.cycles); - } - - default: - { - /* read FM chip if enabled */ - if (!(port & 4) && (config.ym2413 & 1)) - { - /* check if I/O ports are disabled */ - if (io_reg[0x0E] & 0x04) - { - return YM2413Read(port & 3); - } - else - { - return YM2413Read(port & 3) & io_z80_read(port & 1); - } - } - - /* check if I/O ports are enabled */ - if (!(io_reg[0x0E] & 0x04)) - { - return io_z80_read(port & 1); - } - - return z80_unused_port_r(port & 0xFF); - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* Mark III port handlers */ -/*--------------------------------------------------------------------------*/ - -void z80_m3_port_w(unsigned int port, unsigned char data) -{ - switch (port & 0xC1) - { - case 0x00: - case 0x01: - { - z80_unused_port_w(port, data); - return; - } - - case 0x40: - case 0x41: - { - SN76489_Write(Z80.cycles, data); - return; - } - - case 0x80: - { - vdp_z80_data_w(data); - return; - } - - case 0x81: - { - vdp_sms_ctrl_w(data); - return; - } - - default: - { - if (!(port & 4) && (config.ym2413 & 1)) - { - fm_write(Z80.cycles, port & 3, data); - return; - } - - z80_unused_port_w(port & 0xFF, data); - return; - } - } -} - -unsigned char z80_m3_port_r(unsigned int port) -{ - switch (port & 0xC1) - { - case 0x00: - case 0x01: - { - return z80_unused_port_r(port & 0xFF); - } - - case 0x40: - { - return ((vdp_hvc_r(Z80.cycles) >> 8) & 0xFF); - } - - case 0x41: - { - return (vdp_hvc_r(Z80.cycles) & 0xFF); - } - - case 0x80: - { - return vdp_z80_data_r(); - } - - case 0x81: - { - return vdp_z80_ctrl_r(Z80.cycles); - } - - default: - { - /* read FM chip if enabled */ - if (!(port & 4) && (config.ym2413 & 1)) - { - /* I/O ports are automatically disabled */ - return YM2413Read(port & 3); - } - - /* read I/O ports */ - return io_z80_read(port & 1); - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* SG-1000 port handlers */ -/*--------------------------------------------------------------------------*/ - -void z80_sg_port_w(unsigned int port, unsigned char data) -{ - switch(port & 0xC1) - { - case 0x40: - case 0x41: - { - SN76489_Write(Z80.cycles, data); - return; - } - - case 0x80: - { - vdp_z80_data_w(data); - return; - } - - case 0x81: - { - vdp_tms_ctrl_w(data); - return; - } - - default: - { - z80_unused_port_w(port & 0xFF, data); - return; - } - } -} - -unsigned char z80_sg_port_r(unsigned int port) -{ - switch (port & 0xC1) - { - case 0x80: - { - return vdp_z80_data_r(); - } - - case 0x81: - { - return vdp_z80_ctrl_r(Z80.cycles); - } - - case 0xC0: - case 0xC1: - { - return io_z80_read(port & 1); - } - - default: - { - return z80_unused_port_r(port); - } - } -} diff --git a/waterbox/gpgx/core/memz80.h b/waterbox/gpgx/core/memz80.h deleted file mode 100644 index bd396f51c5..0000000000 --- a/waterbox/gpgx/core/memz80.h +++ /dev/null @@ -1,60 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Z80 bus handlers (Genesis & Master System modes) - * - * Support for SG-1000, Mark-III, Master System, Game Gear & Mega Drive ports access - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _MEMZ80_H_ -#define _MEMZ80_H_ - -extern unsigned char z80_memory_r(unsigned int address); -extern void z80_memory_w(unsigned int address, unsigned char data); -extern unsigned char z80_unused_port_r(unsigned int port); -extern void z80_unused_port_w(unsigned int port, unsigned char data); -extern unsigned char z80_md_port_r(unsigned int port); -extern void z80_md_port_w(unsigned int port, unsigned char data); -extern unsigned char z80_gg_port_r(unsigned int port); -extern void z80_gg_port_w(unsigned int port, unsigned char data); -extern unsigned char z80_ms_port_r(unsigned int port); -extern void z80_ms_port_w(unsigned int port, unsigned char data); -extern unsigned char z80_m3_port_r(unsigned int port); -extern void z80_m3_port_w(unsigned int port, unsigned char data); -extern unsigned char z80_sg_port_r(unsigned int port); -extern void z80_sg_port_w(unsigned int port, unsigned char data); - -#endif /* _MEMZ80_H_ */ diff --git a/waterbox/gpgx/core/ntsc/changes.txt b/waterbox/gpgx/core/ntsc/changes.txt deleted file mode 100644 index 1fea70c9e0..0000000000 --- a/waterbox/gpgx/core/ntsc/changes.txt +++ /dev/null @@ -1,96 +0,0 @@ -sms_ntsc Change Log -------------------- - -sms_ntsc 0.2.3 --------------- -- Moved configuration options to sms_ntsc_config.h, making it easier to -manage - -- Greatly clarified and improved demo to read any uncompressed BMP image -and write filtered image when done - -- Improved gamma to be properly applied to each RGB channel, and changed -default to compensate for difference between PC monitor and TV gamma - -- Improved contrast to be properly applied to each RGB channel rather -than just luma - -- Improved floating point calculations in library to be more stable and -not need double precision, which was causing problems with the sharpness -control on Windows when the DirectX libraries changed the FPU to single -precision mode - -- Added extern "C" to header, allowing use in C++ without having to -rename the source file - -- Made internal changes to factor out code common from all my NTSC -filter libraries, greatly simplifying things for me - - -sms_ntsc 0.2.2 --------------- -- Changed sms_ntsc_blit() again, this time to always take a pixel count -for input pitch (since the type is known) and a byte count for the -output pitch (since it can output at multiple depths now). I think I've -got the right interface this time. :) - -- Improved default blitter to have selectable input and output pixel -formats - -- Added parameters for resolution, color bleed, and artifacts - -- Added presets for composite video, S-video, RGB, and monochrome - -- Added SMS_NTSC_OUT_WIDTH() and SMS_NTSC_IN_WIDTH() for calculating -input/output widths - -- Improved demo with more controls and interpolation and darkening of -scanlines rather than duplicating them - -- Improved documentation - -- Interface changes: sms_ntsc_blit() takes output pitch in bytes again. -Sorry for the multiple changes; I think I got it right this time. :) - -- Removed: SMS_NTSC_CALC_WIDTH (use SMS_NTSC_OUT_WIDTH) - - -sms_ntsc 0.2.1 --------------- -- Added parameters for color fringing and edge artifacts - - -sms_ntsc 0.2.0 --------------- -- Changed sms_ntsc_blit() to take pixel counts instead of byte counts -for in_pitch and out_pitch, making it simpler to use. This requires that -current code be updated. - -- Significantly improved NTSC signal processing to give clearer image -and better sharpness control - -- Reduced scrolling shimmer and color artifacts to be closer to what -console generates - -- Added gamma curve parameter to allow better matching of darker colors -on a TV - -- Added ability to generate matching RGB palette for use in a normal -blitter - - -sms_ntsc 0.1.1 --------------- -- Changed sms_ntsc_blit() to accept 12-bit BGR pixels instead of palette -indicies and a separate palette. - -- Improved sms_ntsc_blit() to accept any input width, allowing all the -different screen widths to be handled without complication. Use -SMS_NTSC_CALC_WIDTH() to find the output width for a given input width. - -- Added toggling of left 8 column display to demo - - -sms_ntsc 0.1.0 --------------- -- First version diff --git a/waterbox/gpgx/core/ntsc/license.txt b/waterbox/gpgx/core/ntsc/license.txt deleted file mode 100644 index 5ab7695ab8..0000000000 --- a/waterbox/gpgx/core/ntsc/license.txt +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/waterbox/gpgx/core/ntsc/md_ntsc.c b/waterbox/gpgx/core/ntsc/md_ntsc.c deleted file mode 100644 index d82961ca82..0000000000 --- a/waterbox/gpgx/core/ntsc/md_ntsc.c +++ /dev/null @@ -1,143 +0,0 @@ -/* md_ntsc 0.1.2. http://www.slack.net/~ant/ */ - -/* Modified for use with Genesis Plus GX -- EkeEke */ - -#include "shared.h" -#include "md_ntsc.h" - -/* Copyright (C) 2006 Shay Green. This module is free software; you -can redistribute it and/or modify it under the terms of the GNU Lesser -General Public License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. This -module is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -details. You should have received a copy of the GNU Lesser General Public -License along with this module; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - -md_ntsc_setup_t const md_ntsc_monochrome = { 0,-1, 0, 0,.2, 0, 0,-.2,-.2,-1, 0, 0 }; -md_ntsc_setup_t const md_ntsc_composite = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -md_ntsc_setup_t const md_ntsc_svideo = { 0, 0, 0, 0, 0, 0,.2, -1, -1, 0, 0, 0 }; -md_ntsc_setup_t const md_ntsc_rgb = { 0, 0, 0, 0,.2, 0,.7, -1, -1,-1, 0, 0 }; - -#define alignment_count 2 -#define burst_count 1 -#define rescale_in 1 -#define rescale_out 1 - -#define artifacts_mid 0.40f -#define fringing_mid 0.30f -#define std_decoder_hue 0 - -#define gamma_size 8 -#define artifacts_max 1.00f -#define LUMA_CUTOFF 0.1974 - -#include "md_ntsc_impl.h" - -/* 2 input pixels -> 4 composite samples */ -pixel_info_t const md_ntsc_pixels [alignment_count] = { - { PIXEL_OFFSET( -4, -9 ), { 0.1f, 0.9f, 0.9f, 0.1f } }, - { PIXEL_OFFSET( -2, -7 ), { 0.1f, 0.9f, 0.9f, 0.1f } }, -}; - -static void correct_errors( md_ntsc_rgb_t color, md_ntsc_rgb_t* out ) -{ - unsigned i; - for ( i = 0; i < rgb_kernel_size / 4; i++ ) - { - md_ntsc_rgb_t error = color - - out [i ] - out [i + 2 +16] - out [i + 4 ] - out [i + 6 +16] - - out [i + 8] - out [(i+10)%16+16] - out [(i+12)%16] - out [(i+14)%16+16]; - CORRECT_ERROR( i + 6 + 16 ); - /*DISTRIBUTE_ERROR( 2+16, 4, 6+16 );*/ - } -} - -void md_ntsc_init( md_ntsc_t* ntsc, md_ntsc_setup_t const* setup ) -{ - int entry; - init_t impl; - if ( !setup ) - setup = &md_ntsc_composite; - init( &impl, setup ); - - for ( entry = 0; entry < md_ntsc_palette_size; entry++ ) - { - float bb = impl.to_float [entry >> 6 & 7]; - float gg = impl.to_float [entry >> 3 & 7]; - float rr = impl.to_float [entry & 7]; - - float y, i, q = RGB_TO_YIQ( rr, gg, bb, y, i ); - - int r, g, b = YIQ_TO_RGB( y, i, q, impl.to_rgb, int, r, g ); - md_ntsc_rgb_t rgb = PACK_RGB( r, g, b ); - - if ( setup->palette_out ) - RGB_PALETTE_OUT( rgb, &setup->palette_out [entry * 3] ); - - if ( ntsc ) - { - gen_kernel( &impl, y, i, q, ntsc->table [entry] ); - correct_errors( rgb, ntsc->table [entry] ); - } - } -} - -#ifndef CUSTOM_BLITTER -void md_ntsc_blit( md_ntsc_t const* ntsc, MD_NTSC_IN_T const* table, unsigned char* input, - int in_width, int vline) -{ - int const chunk_count = in_width / md_ntsc_in_chunk - 1; - - /* use palette entry 0 for unused pixels */ - MD_NTSC_IN_T border = table[0]; - - MD_NTSC_BEGIN_ROW( ntsc, border, - MD_NTSC_ADJ_IN( table[*input++] ), - MD_NTSC_ADJ_IN( table[*input++] ), - MD_NTSC_ADJ_IN( table[*input++] ) ); - - md_ntsc_out_t* restrict line_out = (md_ntsc_out_t*)(&bitmap.data[(vline * bitmap.pitch)]); - - int n; - - for ( n = chunk_count; n; --n ) - { - /* order of input and output pixels must not be altered */ - MD_NTSC_COLOR_IN( 0, ntsc, MD_NTSC_ADJ_IN( table[*input++] ) ); - MD_NTSC_RGB_OUT( 0, *line_out++ ); - MD_NTSC_RGB_OUT( 1, *line_out++ ); - - MD_NTSC_COLOR_IN( 1, ntsc, MD_NTSC_ADJ_IN( table[*input++] ) ); - MD_NTSC_RGB_OUT( 2, *line_out++ ); - MD_NTSC_RGB_OUT( 3, *line_out++ ); - - MD_NTSC_COLOR_IN( 2, ntsc, MD_NTSC_ADJ_IN( table[*input++] ) ); - MD_NTSC_RGB_OUT( 4, *line_out++ ); - MD_NTSC_RGB_OUT( 5, *line_out++ ); - - MD_NTSC_COLOR_IN( 3, ntsc, MD_NTSC_ADJ_IN( table[*input++] ) ); - MD_NTSC_RGB_OUT( 6, *line_out++ ); - MD_NTSC_RGB_OUT( 7, *line_out++ ); - } - - /* finish final pixels */ - MD_NTSC_COLOR_IN( 0, ntsc, MD_NTSC_ADJ_IN( table[*input++] ) ); - MD_NTSC_RGB_OUT( 0, *line_out++ ); - MD_NTSC_RGB_OUT( 1, *line_out++ ); - - MD_NTSC_COLOR_IN( 1, ntsc, border ); - MD_NTSC_RGB_OUT( 2, *line_out++ ); - MD_NTSC_RGB_OUT( 3, *line_out++ ); - - MD_NTSC_COLOR_IN( 2, ntsc, border ); - MD_NTSC_RGB_OUT( 4, *line_out++ ); - MD_NTSC_RGB_OUT( 5, *line_out++ ); - - MD_NTSC_COLOR_IN( 3, ntsc, border ); - MD_NTSC_RGB_OUT( 6, *line_out++ ); - MD_NTSC_RGB_OUT( 7, *line_out++ ); -} -#endif diff --git a/waterbox/gpgx/core/ntsc/md_ntsc.h b/waterbox/gpgx/core/ntsc/md_ntsc.h deleted file mode 100644 index 6cbbba1c05..0000000000 --- a/waterbox/gpgx/core/ntsc/md_ntsc.h +++ /dev/null @@ -1,154 +0,0 @@ -/* Sega Genesis/Mega Drive NTSC video filter */ - -/* md_ntsc 0.1.2 */ -#ifndef MD_NTSC_H -#define MD_NTSC_H - -#include "md_ntsc_config.h" - -#ifdef __cplusplus - extern "C" { -#endif - -/* Image parameters, ranging from -1.0 to 1.0. Actual internal values shown -in parenthesis and should remain fairly stable in future versions. */ -typedef struct md_ntsc_setup_t -{ - /* Basic parameters */ - double hue; /* -1 = -180 degrees +1 = +180 degrees */ - double saturation; /* -1 = grayscale (0.0) +1 = oversaturated colors (2.0) */ - double contrast; /* -1 = dark (0.5) +1 = light (1.5) */ - double brightness; /* -1 = dark (0.5) +1 = light (1.5) */ - double sharpness; /* edge contrast enhancement/blurring */ - - /* Advanced parameters */ - double gamma; /* -1 = dark (1.5) +1 = light (0.5) */ - double resolution; /* image resolution */ - double artifacts; /* artifacts caused by color changes */ - double fringing; /* color artifacts caused by brightness changes */ - double bleed; /* color bleed (color resolution reduction) */ - float const* decoder_matrix; /* optional RGB decoder matrix, 6 elements */ - - unsigned char* palette_out; /* optional RGB palette out, 3 bytes per color */ -} md_ntsc_setup_t; - -/* Video format presets */ -extern md_ntsc_setup_t const md_ntsc_composite; /* color bleeding + artifacts */ -extern md_ntsc_setup_t const md_ntsc_svideo; /* color bleeding only */ -extern md_ntsc_setup_t const md_ntsc_rgb; /* crisp image */ -extern md_ntsc_setup_t const md_ntsc_monochrome;/* desaturated + artifacts */ - -enum { md_ntsc_palette_size = 512 }; - -/* Initializes and adjusts parameters. Can be called multiple times on the same -md_ntsc_t object. Can pass NULL for either parameter. */ -typedef struct md_ntsc_t md_ntsc_t; -void md_ntsc_init( md_ntsc_t* ntsc, md_ntsc_setup_t const* setup ); - -/* Filters one row of pixels. Input pixel format is set by MD_NTSC_IN_FORMAT -and output RGB depth is set by MD_NTSC_OUT_DEPTH. Both default to 16-bit RGB. -In_row_width is the number of pixels to get to the next input row. */ -void md_ntsc_blit( md_ntsc_t const* ntsc, MD_NTSC_IN_T const* table, unsigned char* input, - int in_width, int vline); - -/* Number of output pixels written by blitter for given input width. */ -#define MD_NTSC_OUT_WIDTH( in_width ) \ - (((in_width) - 3) / md_ntsc_in_chunk * md_ntsc_out_chunk + md_ntsc_out_chunk) - -/* Number of input pixels that will fit within given output width. Might be -rounded down slightly; use MD_NTSC_OUT_WIDTH() on result to find rounded -value. */ -#define MD_NTSC_IN_WIDTH( out_width ) \ - ((out_width) / md_ntsc_out_chunk * md_ntsc_in_chunk - md_ntsc_in_chunk + 3) - - -/* Interface for user-defined custom blitters */ - -enum { md_ntsc_in_chunk = 4 }; /* number of input pixels read per chunk */ -enum { md_ntsc_out_chunk = 8 }; /* number of output pixels generated per chunk */ -enum { md_ntsc_black = 0 }; /* palette index for black */ - -/* Begin outputting row and start three pixels. First pixel will be cut off a bit. -Declares variables, so must be before first statement in a block (unless you're using C++). */ -#define MD_NTSC_BEGIN_ROW( ntsc, pixel0, pixel1, pixel2, pixel3 ) \ - md_ntsc_rgb_t raw_;\ - unsigned const md_pixel0_ = (pixel0);\ - md_ntsc_rgb_t const* kernel0 = MD_NTSC_IN_FORMAT( ntsc, md_pixel0_ );\ - unsigned const md_pixel1_ = (pixel1);\ - md_ntsc_rgb_t const* kernel1 = MD_NTSC_IN_FORMAT( ntsc, md_pixel1_ );\ - unsigned const md_pixel2_ = (pixel2);\ - md_ntsc_rgb_t const* kernel2 = MD_NTSC_IN_FORMAT( ntsc, md_pixel2_ );\ - unsigned const md_pixel3_ = (pixel3);\ - md_ntsc_rgb_t const* kernel3 = MD_NTSC_IN_FORMAT( ntsc, md_pixel3_ );\ - md_ntsc_rgb_t const* kernelx0;\ - md_ntsc_rgb_t const* kernelx1 = kernel0;\ - md_ntsc_rgb_t const* kernelx2 = kernel0;\ - md_ntsc_rgb_t const* kernelx3 = kernel0 - -/* Begin input pixel */ -#define MD_NTSC_COLOR_IN( index, ntsc, color ) \ - MD_NTSC_COLOR_IN_( index, color, MD_NTSC_IN_FORMAT, ntsc ) - -/* Generate output pixel */ -#define MD_NTSC_RGB_OUT( x, rgb_out ) {\ - raw_ =\ - kernel0 [x+ 0] + kernel1 [(x+6)%8+16] + kernel2 [(x+4)%8 ] + kernel3 [(x+2)%8+16] +\ - kernelx0 [x+ 8] + kernelx1 [(x+6)%8+24] + kernelx2 [(x+4)%8+8] + kernelx3 [(x+2)%8+24];\ - MD_NTSC_CLAMP_( raw_, 0 );\ - MD_NTSC_RGB_OUT_( rgb_out, 0 );\ -} - - -/* private */ -enum { md_ntsc_entry_size = 2 * 16 }; -typedef unsigned long md_ntsc_rgb_t; -struct md_ntsc_t { - md_ntsc_rgb_t table [md_ntsc_palette_size] [md_ntsc_entry_size]; -}; - -#define MD_NTSC_BGR9( ntsc, n ) (ntsc)->table [n & 0x1FF] - -#define MD_NTSC_RGB16( ntsc, n ) \ - (md_ntsc_rgb_t*) ((char*) (ntsc)->table +\ - ((n << 9 & 0x3800) | (n & 0x0700) | (n >> 8 & 0x00E0)) *\ - (md_ntsc_entry_size * sizeof (md_ntsc_rgb_t) / 32)) - -#define MD_NTSC_RGB15( ntsc, n ) \ - (md_ntsc_rgb_t*) ((char*) (ntsc)->table +\ - ((n << 8 & 0x1C00) | (n & 0x0380) | (n >> 8 & 0x0070)) *\ - (md_ntsc_entry_size * sizeof (md_ntsc_rgb_t) / 16)) - -/* common ntsc macros */ -#define md_ntsc_rgb_builder ((1L << 21) | (1 << 11) | (1 << 1)) -#define md_ntsc_clamp_mask (md_ntsc_rgb_builder * 3 / 2) -#define md_ntsc_clamp_add (md_ntsc_rgb_builder * 0x101) -#define MD_NTSC_CLAMP_( io, shift ) {\ - md_ntsc_rgb_t sub = (io) >> (9-(shift)) & md_ntsc_clamp_mask;\ - md_ntsc_rgb_t clamp = md_ntsc_clamp_add - sub;\ - io |= clamp;\ - clamp -= sub;\ - io &= clamp;\ -} - -#define MD_NTSC_COLOR_IN_( index, color, ENTRY, table ) {\ - unsigned color_;\ - kernelx##index = kernel##index;\ - kernel##index = (color_ = (color), ENTRY( table, color_ ));\ -} - -/* x is always zero except in snes_ntsc library */ -#if MD_NTSC_OUT_DEPTH == 15 -#define MD_NTSC_RGB_OUT_( rgb_out, x ) {\ - rgb_out = (raw_>>(14-x)& 0x7C00)|(raw_>>(9-x)&0x03E0)|(raw_>>(4-x)&0x001F);\ - } -#elif MD_NTSC_OUT_DEPTH == 16 -#define MD_NTSC_RGB_OUT_( rgb_out, x ) {\ - rgb_out = (raw_>>(13-x)& 0xF800)|(raw_>>(8-x)&0x07E0)|(raw_>>(4-x)&0x001F);\ - } -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/waterbox/gpgx/core/ntsc/md_ntsc_config.h b/waterbox/gpgx/core/ntsc/md_ntsc_config.h deleted file mode 100644 index 750b65a6bf..0000000000 --- a/waterbox/gpgx/core/ntsc/md_ntsc_config.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Configure library by modifying this file */ - -#ifndef MD_NTSC_CONFIG_H -#define MD_NTSC_CONFIG_H - -/* Format of source & output pixels (RGB555 or RGB565 only)*/ -#ifdef USE_15BPP_RENDERING -#define MD_NTSC_IN_FORMAT MD_NTSC_RGB15 -#define MD_NTSC_OUT_DEPTH 15 -#else -#define MD_NTSC_IN_FORMAT MD_NTSC_RGB16 -#define MD_NTSC_OUT_DEPTH 16 -#endif - -/* Original CRAM format (not used) */ -/* #define MD_NTSC_IN_FORMAT MD_NTSC_BGR9 */ - -/* The following affect the built-in blitter only; a custom blitter can -handle things however it wants. */ - -/* Type of input pixel values (fixed to 16-bit) */ -#define MD_NTSC_IN_T unsigned short - -/* Each raw pixel input value is passed through this. You might want to mask -the pixel index if you use the high bits as flags, etc. */ -#define MD_NTSC_ADJ_IN( in ) in - -/* For each pixel, this is the basic operation: -output_color = MD_NTSC_ADJ_IN( MD_NTSC_IN_T ) */ - -#endif diff --git a/waterbox/gpgx/core/ntsc/md_ntsc_impl.h b/waterbox/gpgx/core/ntsc/md_ntsc_impl.h deleted file mode 100644 index 76f05a27e7..0000000000 --- a/waterbox/gpgx/core/ntsc/md_ntsc_impl.h +++ /dev/null @@ -1,439 +0,0 @@ -/* md_ntsc 0.1.2. http://www.slack.net/~ant/ */ - -/* Common implementation of NTSC filters */ - -#include -#include - -/* Copyright (C) 2006-2007 Shay Green. This module is free software; you -can redistribute it and/or modify it under the terms of the GNU Lesser -General Public License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. This -module is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -details. You should have received a copy of the GNU Lesser General Public -License along with this module; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - -#define DISABLE_CORRECTION 0 - -#undef PI -#define PI 3.14159265358979323846f - -#ifndef LUMA_CUTOFF - #define LUMA_CUTOFF 0.20 -#endif -#ifndef gamma_size - #define gamma_size 1 -#endif -#ifndef rgb_bits - #define rgb_bits 8 -#endif -#ifndef artifacts_max - #define artifacts_max (artifacts_mid * 1.5f) -#endif -#ifndef fringing_max - #define fringing_max (fringing_mid * 2) -#endif -#ifndef STD_HUE_CONDITION - #define STD_HUE_CONDITION( setup ) 1 -#endif - -#define ext_decoder_hue (std_decoder_hue + 15) -#define rgb_unit (1 << rgb_bits) -#define rgb_offset (rgb_unit * 2 + 0.5f) - -enum { burst_size = md_ntsc_entry_size / burst_count }; -enum { kernel_half = 16 }; -enum { kernel_size = kernel_half * 2 + 1 }; - -typedef struct init_t -{ - float to_rgb [burst_count * 6]; - float to_float [gamma_size]; - float contrast; - float brightness; - float artifacts; - float fringing; - float kernel [rescale_out * kernel_size * 2]; -} init_t; - -#define ROTATE_IQ( i, q, sin_b, cos_b ) {\ - float t;\ - t = i * cos_b - q * sin_b;\ - q = i * sin_b + q * cos_b;\ - i = t;\ -} - -static void init_filters( init_t* impl, md_ntsc_setup_t const* setup ) -{ -#if rescale_out > 1 - float kernels [kernel_size * 2]; -#else - float* const kernels = impl->kernel; -#endif - - /* generate luma (y) filter using sinc kernel */ - { - /* sinc with rolloff (dsf) */ - float const rolloff = 1 + (float) setup->sharpness * (float) 0.032; - float const maxh = 32; - float const pow_a_n = (float) pow( rolloff, maxh ); - float sum; - int i; - /* quadratic mapping to reduce negative (blurring) range */ - float to_angle = (float) setup->resolution + 1; - to_angle = PI / maxh * (float) LUMA_CUTOFF * (to_angle * to_angle + 1); - - kernels [kernel_size * 3 / 2] = maxh; /* default center value */ - for ( i = 0; i < kernel_half * 2 + 1; i++ ) - { - int x = i - kernel_half; - float angle = x * to_angle; - /* instability occurs at center point with rolloff very close to 1.0 */ - if ( x || pow_a_n > (float) 1.056 || pow_a_n < (float) 0.981 ) - { - float rolloff_cos_a = rolloff * (float) cos( angle ); - float num = 1 - rolloff_cos_a - - pow_a_n * (float) cos( maxh * angle ) + - pow_a_n * rolloff * (float) cos( (maxh - 1) * angle ); - float den = 1 - rolloff_cos_a - rolloff_cos_a + rolloff * rolloff; - float dsf = num / den; - kernels [kernel_size * 3 / 2 - kernel_half + i] = dsf - (float) 0.5; - } - } - - /* apply blackman window and find sum */ - sum = 0; - for ( i = 0; i < kernel_half * 2 + 1; i++ ) - { - float x = PI * 2 / (kernel_half * 2) * i; - float blackman = 0.42f - 0.5f * (float) cos( x ) + 0.08f * (float) cos( x * 2 ); - sum += (kernels [kernel_size * 3 / 2 - kernel_half + i] *= blackman); - } - - /* normalize kernel */ - sum = 1.0f / sum; - for ( i = 0; i < kernel_half * 2 + 1; i++ ) - { - int x = kernel_size * 3 / 2 - kernel_half + i; - kernels [x] *= sum; - assert( kernels [x] == kernels [x] ); /* catch numerical instability */ - } - } - - /* generate chroma (iq) filter using gaussian kernel */ - { - float const cutoff_factor = -0.03125f; - float cutoff = (float) setup->bleed; - int i; - - if ( cutoff < 0 ) - { - /* keep extreme value accessible only near upper end of scale (1.0) */ - cutoff *= cutoff; - cutoff *= cutoff; - cutoff *= cutoff; - cutoff *= -30.0f / 0.65f; - } - cutoff = cutoff_factor - 0.65f * cutoff_factor * cutoff; - - for ( i = -kernel_half; i <= kernel_half; i++ ) - kernels [kernel_size / 2 + i] = (float) exp( i * i * cutoff ); - - /* normalize even and odd phases separately */ - for ( i = 0; i < 2; i++ ) - { - float sum = 0; - int x; - for ( x = i; x < kernel_size; x += 2 ) - sum += kernels [x]; - - sum = 1.0f / sum; - for ( x = i; x < kernel_size; x += 2 ) - { - kernels [x] *= sum; - assert( kernels [x] == kernels [x] ); /* catch numerical instability */ - } - } - } - - /* - printf( "luma:\n" ); - for ( i = kernel_size; i < kernel_size * 2; i++ ) - printf( "%f\n", kernels [i] ); - printf( "chroma:\n" ); - for ( i = 0; i < kernel_size; i++ ) - printf( "%f\n", kernels [i] ); - */ - - /* generate linear rescale kernels */ - #if rescale_out > 1 - { - float weight = 1.0f; - float* out = impl->kernel; - int n = rescale_out; - do - { - float remain = 0; - int i; - weight -= 1.0f / rescale_in; - for ( i = 0; i < kernel_size * 2; i++ ) - { - float cur = kernels [i]; - float m = cur * weight; - *out++ = m + remain; - remain = cur - m; - } - } - while ( --n ); - } - #endif -} - -static float const default_decoder [6] = - { 0.956f, 0.621f, -0.272f, -0.647f, -1.105f, 1.702f }; - -static void init( init_t* impl, md_ntsc_setup_t const* setup ) -{ - impl->brightness = (float) setup->brightness * (0.5f * rgb_unit) + rgb_offset; - impl->contrast = (float) setup->contrast * (0.5f * rgb_unit) + rgb_unit; - #ifdef default_palette_contrast - if ( !setup->palette ) - impl->contrast *= default_palette_contrast; - #endif - - impl->artifacts = (float) setup->artifacts; - if ( impl->artifacts > 0 ) - impl->artifacts *= artifacts_max - artifacts_mid; - impl->artifacts = impl->artifacts * artifacts_mid + artifacts_mid; - - impl->fringing = (float) setup->fringing; - if ( impl->fringing > 0 ) - impl->fringing *= fringing_max - fringing_mid; - impl->fringing = impl->fringing * fringing_mid + fringing_mid; - - init_filters( impl, setup ); - - /* generate gamma table */ - if ( gamma_size > 1 ) - { - float const to_float = 1.0f / (gamma_size - (gamma_size > 1)); - float const gamma = 1.1333f - (float) setup->gamma * 0.5f; - /* match common PC's 2.2 gamma to TV's 2.65 gamma */ - int i; - for ( i = 0; i < gamma_size; i++ ) - impl->to_float [i] = - (float) pow( i * to_float, gamma ) * impl->contrast + impl->brightness; - } - - /* setup decoder matricies */ - { - float hue = (float) setup->hue * PI + PI / 180 * ext_decoder_hue; - float sat = (float) setup->saturation + 1; - float const* decoder = setup->decoder_matrix; - if ( !decoder ) - { - decoder = default_decoder; - if ( STD_HUE_CONDITION( setup ) ) - hue += PI / 180 * (std_decoder_hue - ext_decoder_hue); - } - - { - float s = (float) sin( hue ) * sat; - float c = (float) cos( hue ) * sat; - float* out = impl->to_rgb; - int n; - - n = burst_count; - do - { - float const* in = decoder; - int n = 3; - do - { - float i = *in++; - float q = *in++; - *out++ = i * c - q * s; - *out++ = i * s + q * c; - } - while ( --n ); - if ( burst_count <= 1 ) - break; - ROTATE_IQ( s, c, 0.866025f, -0.5f ); /* +120 degrees */ - } - while ( --n ); - } - } -} - -/* kernel generation */ - -#define RGB_TO_YIQ( r, g, b, y, i ) (\ - (y = (r) * 0.299f + (g) * 0.587f + (b) * 0.114f),\ - (i = (r) * 0.596f - (g) * 0.275f - (b) * 0.321f),\ - ((r) * 0.212f - (g) * 0.523f + (b) * 0.311f)\ -) - -#define YIQ_TO_RGB( y, i, q, to_rgb, type, r, g ) (\ - r = (type) (y + to_rgb [0] * i + to_rgb [1] * q),\ - g = (type) (y + to_rgb [2] * i + to_rgb [3] * q),\ - (type) (y + to_rgb [4] * i + to_rgb [5] * q)\ -) - -#define PACK_RGB( r, g, b ) ((r) << 21 | (g) << 11 | (b) << 1) - -enum { rgb_kernel_size = burst_size / alignment_count }; -enum { rgb_bias = rgb_unit * 2 * md_ntsc_rgb_builder }; - -typedef struct pixel_info_t -{ - int offset; - float negate; - float kernel [4]; -} pixel_info_t; - -#if rescale_in > 1 - #define PIXEL_OFFSET_( ntsc, scaled ) \ - (kernel_size / 2 + ntsc + (scaled != 0) + (rescale_out - scaled) % rescale_out + \ - (kernel_size * 2 * scaled)) - - #define PIXEL_OFFSET( ntsc, scaled ) \ - PIXEL_OFFSET_( ((ntsc) - (scaled) / rescale_out * rescale_in),\ - (((scaled) + rescale_out * 10) % rescale_out) ),\ - (1.0f - (((ntsc) + 100) & 2)) -#else - #define PIXEL_OFFSET( ntsc, scaled ) \ - (kernel_size / 2 + (ntsc) - (scaled)),\ - (1.0f - (((ntsc) + 100) & 2)) -#endif - -extern pixel_info_t const md_ntsc_pixels [alignment_count]; - -/* Generate pixel at all burst phases and column alignments */ -static void gen_kernel( init_t* impl, float y, float i, float q, md_ntsc_rgb_t* out ) -{ - /* generate for each scanline burst phase */ - float const* to_rgb = impl->to_rgb; - int burst_remain = burst_count; - y -= rgb_offset; - do - { - /* Encode yiq into *two* composite signals (to allow control over artifacting). - Convolve these with kernels which: filter respective components, apply - sharpening, and rescale horizontally. Convert resulting yiq to rgb and pack - into integer. Based on algorithm by NewRisingSun. */ - pixel_info_t const* pixel = md_ntsc_pixels; - int alignment_remain = alignment_count; - do - { - /* negate is -1 when composite starts at odd multiple of 2 */ - float const yy = y * impl->fringing * pixel->negate; - float const ic0 = (i + yy) * pixel->kernel [0]; - float const qc1 = (q + yy) * pixel->kernel [1]; - float const ic2 = (i - yy) * pixel->kernel [2]; - float const qc3 = (q - yy) * pixel->kernel [3]; - - float const factor = impl->artifacts * pixel->negate; - float const ii = i * factor; - float const yc0 = (y + ii) * pixel->kernel [0]; - float const yc2 = (y - ii) * pixel->kernel [2]; - - float const qq = q * factor; - float const yc1 = (y + qq) * pixel->kernel [1]; - float const yc3 = (y - qq) * pixel->kernel [3]; - - float const* k = &impl->kernel [pixel->offset]; - int n; - ++pixel; - for ( n = rgb_kernel_size; n; --n ) - { - float i = k[0]*ic0 + k[2]*ic2; - float q = k[1]*qc1 + k[3]*qc3; - float y = k[kernel_size+0]*yc0 + k[kernel_size+1]*yc1 + - k[kernel_size+2]*yc2 + k[kernel_size+3]*yc3 + rgb_offset; - if ( rescale_out <= 1 ) - k--; - else if ( k < &impl->kernel [kernel_size * 2 * (rescale_out - 1)] ) - k += kernel_size * 2 - 1; - else - k -= kernel_size * 2 * (rescale_out - 1) + 2; - { - int r, g, b = YIQ_TO_RGB( y, i, q, to_rgb, int, r, g ); - *out++ = PACK_RGB( r, g, b ) - rgb_bias; - } - } - } - while ( alignment_count > 1 && --alignment_remain ); - - if ( burst_count <= 1 ) - break; - - to_rgb += 6; - - ROTATE_IQ( i, q, -0.866025f, -0.5f ); /* -120 degrees */ - } - while ( --burst_remain ); -} - -static void correct_errors( md_ntsc_rgb_t color, md_ntsc_rgb_t* out ); - -#if DISABLE_CORRECTION - #define CORRECT_ERROR( a ) { out [i] += rgb_bias; } - #define DISTRIBUTE_ERROR( a, b, c ) { out [i] += rgb_bias; } -#else - #define CORRECT_ERROR( a ) { out [a] += error; } - #define DISTRIBUTE_ERROR( a, b, c ) {\ - md_ntsc_rgb_t fourth = (error + 2 * md_ntsc_rgb_builder) >> 2;\ - fourth &= (rgb_bias >> 1) - md_ntsc_rgb_builder;\ - fourth -= rgb_bias >> 2;\ - out [a] += fourth;\ - out [b] += fourth;\ - out [c] += fourth;\ - out [i] += error - (fourth * 3);\ - } -#endif - -#define RGB_PALETTE_OUT( rgb, out_ )\ -{\ - unsigned char* out = (out_);\ - md_ntsc_rgb_t clamped = (rgb);\ - MD_NTSC_CLAMP_( clamped, (8 - rgb_bits) );\ - out [0] = (unsigned char) (clamped >> 21);\ - out [1] = (unsigned char) (clamped >> 11);\ - out [2] = (unsigned char) (clamped >> 1);\ -} - -/* blitter related */ - -#ifndef restrict - #if defined (__GNUC__) - #define restrict __restrict__ - #elif defined (_MSC_VER) && _MSC_VER > 1300 - #define restrict - #else - /* no support for restricted pointers */ - #define restrict - #endif -#endif - -#include - -#if MD_NTSC_OUT_DEPTH <= 16 - #if USHRT_MAX == 0xFFFF - typedef unsigned short md_ntsc_out_t; - #else - #error "Need 16-bit int type" - #endif - -#else - #if UINT_MAX == 0xFFFFFFFF - typedef unsigned int md_ntsc_out_t; - #elif ULONG_MAX == 0xFFFFFFFF - typedef unsigned long md_ntsc_out_t; - #else - #error "Need 32-bit int type" - #endif - -#endif diff --git a/waterbox/gpgx/core/ntsc/readme.txt b/waterbox/gpgx/core/ntsc/readme.txt deleted file mode 100644 index d393d1ae05..0000000000 --- a/waterbox/gpgx/core/ntsc/readme.txt +++ /dev/null @@ -1,58 +0,0 @@ -sms_ntsc 0.2.3: Sega Master System NTSC Video Filter ----------------------------------------------------- -This library filters a Sega Master System image to match what a TV would -show, allowing an authentic image in an emulator. It uses a highly -optimized algorithm to perform the same signal processing as an NTSC -decoder in a TV, giving very similar pixel artifacts and color bleeding. -The usual picture controls can be adjusted: hue, saturation, contrast, -brightness, and sharpness. Additionally, the amount of NTSC chroma and -luma artifacts can be reduced, allowing an image that corresponds to -composite video (artifacts), S-video (color bleeding only), RGB (clean -pixels), or anywhere inbetween. - -The output is scaled to the proper horizontal width, leaving it up the -emulator to simply double the height. Specialized blitters can be easily -written using a special interface, allowing customization of input and -output pixel formats, optimization for the host platform, and efficient -scanline doubling. - -Blitting a 248x192 source image to a 581x384 pixel 16-bit RGB memory -buffer at 60 frames per second uses 7% CPU on a 2.0 GHz Athlon 3500+ and -33% CPU on a 10-year-old 400 MHz G3 PowerMac. - -Author : Shay Green -Website : http://www.slack.net/~ant/ -Forum : http://groups.google.com/group/blargg-sound-libs -License : GNU Lesser General Public License (LGPL) -Language: C or C++ - - -Getting Started ---------------- -Build a program from demo.c, sms_ntsc.c, and the SDL multimedia library -(see http://libsdl.org/). Run it with "test.bmp" in the same directory -and it should show the filtered image. See demo.c for more. - -See sms_ntsc.txt for documentation and sms_ntsc.h for reference. Post to -the discussion forum for assistance. - - -Files ------ -readme.txt Essential information -sms_ntsc.txt Library documentation -changes.txt Changes made since previous releases -license.txt GNU Lesser General Public License - -benchmark.c Measures frame rate and processor usage of library -demo.c Displays and saves NTSC filtered image -demo_impl.h Internal routines used by demo -test.bmp Test image for demo - -sms_ntsc_config.h Library configuration (modify as needed) -sms_ntsc.h Library header and source -sms_ntsc.c -sms_ntsc_impl.h - --- -Shay Green diff --git a/waterbox/gpgx/core/ntsc/sms_ntsc.c b/waterbox/gpgx/core/ntsc/sms_ntsc.c deleted file mode 100644 index cdc6ce4eaa..0000000000 --- a/waterbox/gpgx/core/ntsc/sms_ntsc.c +++ /dev/null @@ -1,141 +0,0 @@ -/* sms_ntsc 0.2.3. http://www.slack.net/~ant/ */ - -/* Modified for use with Genesis Plus GX -- EkeEke */ - -#include "shared.h" -#include "sms_ntsc.h" - -/* Copyright (C) 2006-2007 Shay Green. This module is free software; you -can redistribute it and/or modify it under the terms of the GNU Lesser -General Public License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. This -module is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -details. You should have received a copy of the GNU Lesser General Public -License along with this module; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - -sms_ntsc_setup_t const sms_ntsc_monochrome = { 0,-1, 0, 0,.2, 0, .2,-.2,-.2,-1, 0, 0 }; -sms_ntsc_setup_t const sms_ntsc_composite = { 0, 0, 0, 0, 0, 0,.25, 0, 0, 0, 0, 0 }; -sms_ntsc_setup_t const sms_ntsc_svideo = { 0, 0, 0, 0, 0, 0,.25, -1, -1, 0, 0, 0 }; -sms_ntsc_setup_t const sms_ntsc_rgb = { 0, 0, 0, 0,.2, 0,.70, -1, -1,-1, 0, 0 }; - -#define alignment_count 3 -#define burst_count 1 -#define rescale_in 8 -#define rescale_out 7 - -#define artifacts_mid 0.4f -#define artifacts_max 1.2f -#define fringing_mid 0.8f -#define std_decoder_hue 0 - -#define gamma_size 16 - -#include "sms_ntsc_impl.h" - -/* 3 input pixels -> 8 composite samples */ -pixel_info_t const sms_ntsc_pixels [alignment_count] = { - { PIXEL_OFFSET( -4, -9 ), { 1, 1, .6667f, 0 } }, - { PIXEL_OFFSET( -2, -7 ), { .3333f, 1, 1, .3333f } }, - { PIXEL_OFFSET( 0, -5 ), { 0, .6667f, 1, 1 } }, -}; - -static void correct_errors( sms_ntsc_rgb_t color, sms_ntsc_rgb_t* out ) -{ - unsigned i; - for ( i = 0; i < rgb_kernel_size / 2; i++ ) - { - sms_ntsc_rgb_t error = color - - out [i ] - out [(i+12)%14+14] - out [(i+10)%14+28] - - out [i + 7] - out [i + 5 +14] - out [i + 3 +28]; - CORRECT_ERROR( i + 3 + 28 ); - } -} - -void sms_ntsc_init( sms_ntsc_t* ntsc, sms_ntsc_setup_t const* setup ) -{ - int entry; - init_t impl; - if ( !setup ) - setup = &sms_ntsc_composite; - init( &impl, setup ); - - for ( entry = 0; entry < sms_ntsc_palette_size; entry++ ) - { - float bb = impl.to_float [entry >> 8 & 0x0F]; - float gg = impl.to_float [entry >> 4 & 0x0F]; - float rr = impl.to_float [entry & 0x0F]; - - float y, i, q = RGB_TO_YIQ( rr, gg, bb, y, i ); - - int r, g, b = YIQ_TO_RGB( y, i, q, impl.to_rgb, int, r, g ); - sms_ntsc_rgb_t rgb = PACK_RGB( r, g, b ); - - if ( setup->palette_out ) - RGB_PALETTE_OUT( rgb, &setup->palette_out [entry * 3] ); - - if ( ntsc ) - { - gen_kernel( &impl, y, i, q, ntsc->table [entry] ); - correct_errors( rgb, ntsc->table [entry] ); - } - } -} - -#ifndef CUSTOM_BLITTER -void sms_ntsc_blit( sms_ntsc_t const* ntsc, SMS_NTSC_IN_T const* table, unsigned char* input, - int in_width, int vline) -{ - int const chunk_count = in_width / sms_ntsc_in_chunk; - - /* handle extra 0, 1, or 2 pixels by placing them at beginning of row */ - int const in_extra = in_width - chunk_count * sms_ntsc_in_chunk; - unsigned const extra2 = (unsigned) -(in_extra >> 1 & 1); /* (unsigned) -1 = ~0 */ - unsigned const extra1 = (unsigned) -(in_extra & 1) | extra2; - - /* use palette entry 0 for unused pixels */ - SMS_NTSC_IN_T border = table[0]; - - SMS_NTSC_BEGIN_ROW( ntsc, border, - (SMS_NTSC_ADJ_IN( table[input[0]] )) & extra2, - (SMS_NTSC_ADJ_IN( table[input[extra2 & 1]] )) & extra1 ); - - sms_ntsc_out_t* restrict line_out = (sms_ntsc_out_t*)(&bitmap.data[(vline * bitmap.pitch)]); - - int n; - input += in_extra; - - for ( n = chunk_count; n; --n ) - { - /* order of input and output pixels must not be altered */ - SMS_NTSC_COLOR_IN( 0, ntsc, SMS_NTSC_ADJ_IN( table[*input++] ) ); - SMS_NTSC_RGB_OUT( 0, *line_out++ ); - SMS_NTSC_RGB_OUT( 1, *line_out++ ); - - SMS_NTSC_COLOR_IN( 1, ntsc, SMS_NTSC_ADJ_IN( table[*input++] ) ); - SMS_NTSC_RGB_OUT( 2, *line_out++ ); - SMS_NTSC_RGB_OUT( 3, *line_out++ ); - - SMS_NTSC_COLOR_IN( 2, ntsc, SMS_NTSC_ADJ_IN( table[*input++] ) ); - SMS_NTSC_RGB_OUT( 4, *line_out++ ); - SMS_NTSC_RGB_OUT( 5, *line_out++ ); - SMS_NTSC_RGB_OUT( 6, *line_out++ ); - } - - /* finish final pixels */ - SMS_NTSC_COLOR_IN( 0, ntsc, border ); - SMS_NTSC_RGB_OUT( 0, *line_out++ ); - SMS_NTSC_RGB_OUT( 1, *line_out++ ); - - SMS_NTSC_COLOR_IN( 1, ntsc, border ); - SMS_NTSC_RGB_OUT( 2, *line_out++ ); - SMS_NTSC_RGB_OUT( 3, *line_out++ ); - - SMS_NTSC_COLOR_IN( 2, ntsc, border ); - SMS_NTSC_RGB_OUT( 4, *line_out++ ); - SMS_NTSC_RGB_OUT( 5, *line_out++ ); - SMS_NTSC_RGB_OUT( 6, *line_out++ ); -} -#endif diff --git a/waterbox/gpgx/core/ntsc/sms_ntsc.h b/waterbox/gpgx/core/ntsc/sms_ntsc.h deleted file mode 100644 index 93c9ee1ab7..0000000000 --- a/waterbox/gpgx/core/ntsc/sms_ntsc.h +++ /dev/null @@ -1,154 +0,0 @@ -/* Sega Master System/Game Gear/TI 99/4A NTSC video filter */ - -/* sms_ntsc 0.2.3 */ -#ifndef SMS_NTSC_H -#define SMS_NTSC_H - -#include "sms_ntsc_config.h" - -#ifdef __cplusplus - extern "C" { -#endif - -/* Image parameters, ranging from -1.0 to 1.0. Actual internal values shown -in parenthesis and should remain fairly stable in future versions. */ -typedef struct sms_ntsc_setup_t -{ - /* Basic parameters */ - double hue; /* -1 = -180 degrees +1 = +180 degrees */ - double saturation; /* -1 = grayscale (0.0) +1 = oversaturated colors (2.0) */ - double contrast; /* -1 = dark (0.5) +1 = light (1.5) */ - double brightness; /* -1 = dark (0.5) +1 = light (1.5) */ - double sharpness; /* edge contrast enhancement/blurring */ - - /* Advanced parameters */ - double gamma; /* -1 = dark (1.5) +1 = light (0.5) */ - double resolution; /* image resolution */ - double artifacts; /* artifacts caused by color changes */ - double fringing; /* color artifacts caused by brightness changes */ - double bleed; /* color bleed (color resolution reduction) */ - float const* decoder_matrix; /* optional RGB decoder matrix, 6 elements */ - - unsigned char* palette_out; /* optional RGB palette out, 3 bytes per color */ -} sms_ntsc_setup_t; - -/* Video format presets */ -extern sms_ntsc_setup_t const sms_ntsc_composite; /* color bleeding + artifacts */ -extern sms_ntsc_setup_t const sms_ntsc_svideo; /* color bleeding only */ -extern sms_ntsc_setup_t const sms_ntsc_rgb; /* crisp image */ -extern sms_ntsc_setup_t const sms_ntsc_monochrome;/* desaturated + artifacts */ - -enum { sms_ntsc_palette_size = 4096 }; - -/* Initializes and adjusts parameters. Can be called multiple times on the same -sms_ntsc_t object. Can pass NULL for either parameter. */ -typedef struct sms_ntsc_t sms_ntsc_t; -void sms_ntsc_init( sms_ntsc_t* ntsc, sms_ntsc_setup_t const* setup ); - -/* Filters one row of pixels. Input pixel format is set by SMS_NTSC_IN_FORMAT -and output RGB depth is set by SMS_NTSC_OUT_DEPTH. Both default to 16-bit RGB. -In_row_width is the number of pixels to get to the next input row. */ -void sms_ntsc_blit( sms_ntsc_t const* ntsc, SMS_NTSC_IN_T const* table, unsigned char* input, - int in_width, int vline); - -/* Number of output pixels written by blitter for given input width. */ -#define SMS_NTSC_OUT_WIDTH( in_width ) \ - (((in_width) / sms_ntsc_in_chunk + 1) * sms_ntsc_out_chunk) - -/* Number of input pixels that will fit within given output width. Might be -rounded down slightly; use SMS_NTSC_OUT_WIDTH() on result to find rounded -value. */ -#define SMS_NTSC_IN_WIDTH( out_width ) \ - (((out_width) / sms_ntsc_out_chunk - 1) * sms_ntsc_in_chunk + 2) - - -/* Interface for user-defined custom blitters */ - -enum { sms_ntsc_in_chunk = 3 }; /* number of input pixels read per chunk */ -enum { sms_ntsc_out_chunk = 7 }; /* number of output pixels generated per chunk */ - -/* Begins outputting row and starts three pixels. First pixel will be cut off a bit. -Declares variables, so must be before first statement in a block (unless you're using C++). */ -#define SMS_NTSC_BEGIN_ROW( ntsc, pixel0, pixel1, pixel2 ) \ - SMS_NTSC_BEGIN_ROW_6_( pixel0, pixel1, pixel2, SMS_NTSC_IN_FORMAT, ntsc ) - -/* Begins input pixel */ -#define SMS_NTSC_COLOR_IN( in_index, ntsc, color_in ) \ - SMS_NTSC_COLOR_IN_( in_index, color_in, SMS_NTSC_IN_FORMAT, ntsc ) - -/* Generates output pixel */ -#define SMS_NTSC_RGB_OUT( x, rgb_out ) {\ - raw_ =\ - kernel0 [x ] + kernel1 [(x+12)%7+14] + kernel2 [(x+10)%7+28] +\ - kernelx0 [(x+7)%14] + kernelx1 [(x+ 5)%7+21] + kernelx2 [(x+ 3)%7+35];\ - SMS_NTSC_CLAMP_( raw_, 0 );\ - SMS_NTSC_RGB_OUT_( rgb_out, 0 );\ -} - -/* private */ -enum { sms_ntsc_entry_size = 3 * 14 }; -typedef unsigned long sms_ntsc_rgb_t; -struct sms_ntsc_t { - sms_ntsc_rgb_t table [sms_ntsc_palette_size] [sms_ntsc_entry_size]; -}; - -#define SMS_NTSC_BGR12( ntsc, n ) (ntsc)->table [n & 0xFFF] - -#define SMS_NTSC_RGB16( ntsc, n ) \ - (sms_ntsc_rgb_t const*) ((char const*) (ntsc)->table +\ - ((n << 10 & 0x7800) | (n & 0x0780) | (n >> 9 & 0x0078)) *\ - (sms_ntsc_entry_size * sizeof (sms_ntsc_rgb_t) / 8)) - -#define SMS_NTSC_RGB15( ntsc, n ) \ - (sms_ntsc_rgb_t const*) ((char const*) (ntsc)->table +\ - ((n << 9 & 0x3C00) | (n & 0x03C0) | (n >> 9 & 0x003C)) *\ - (sms_ntsc_entry_size * sizeof (sms_ntsc_rgb_t) / 4)) - -/* common 3->7 ntsc macros */ -#define SMS_NTSC_BEGIN_ROW_6_( pixel0, pixel1, pixel2, ENTRY, table ) \ - sms_ntsc_rgb_t raw_;\ - unsigned const sms_ntsc_pixel0_ = (pixel0);\ - sms_ntsc_rgb_t const* kernel0 = ENTRY( table, sms_ntsc_pixel0_ );\ - unsigned const sms_ntsc_pixel1_ = (pixel1);\ - sms_ntsc_rgb_t const* kernel1 = ENTRY( table, sms_ntsc_pixel1_ );\ - unsigned const sms_ntsc_pixel2_ = (pixel2);\ - sms_ntsc_rgb_t const* kernel2 = ENTRY( table, sms_ntsc_pixel2_ );\ - sms_ntsc_rgb_t const* kernelx0;\ - sms_ntsc_rgb_t const* kernelx1 = kernel0;\ - sms_ntsc_rgb_t const* kernelx2 = kernel0 - - -/* common ntsc macros */ -#define sms_ntsc_rgb_builder ((1L << 21) | (1 << 11) | (1 << 1)) -#define sms_ntsc_clamp_mask (sms_ntsc_rgb_builder * 3 / 2) -#define sms_ntsc_clamp_add (sms_ntsc_rgb_builder * 0x101) -#define SMS_NTSC_CLAMP_( io, shift ) {\ - sms_ntsc_rgb_t sub = (io) >> (9-(shift)) & sms_ntsc_clamp_mask;\ - sms_ntsc_rgb_t clamp = sms_ntsc_clamp_add - sub;\ - io |= clamp;\ - clamp -= sub;\ - io &= clamp;\ -} - -#define SMS_NTSC_COLOR_IN_( index, color, ENTRY, table ) {\ - unsigned color_;\ - kernelx##index = kernel##index;\ - kernel##index = (color_ = (color), ENTRY( table, color_ ));\ -} - -/* x is always zero except in snes_ntsc library */ -#if SMS_NTSC_OUT_DEPTH == 15 -#define SMS_NTSC_RGB_OUT_( rgb_out, x ) {\ - rgb_out = (raw_>>(14-x)& 0x7C00)|(raw_>>(9-x)&0x03E0)|(raw_>>(4-x)&0x001F);\ - } -#elif SMS_NTSC_OUT_DEPTH == 16 -#define SMS_NTSC_RGB_OUT_( rgb_out, x) {\ - rgb_out = (raw_>>(13-x)& 0xF800)|(raw_>>(8-x)&0x07E0)|(raw_>>(4-x)&0x001F);\ - } -#endif - -#ifdef __cplusplus - } -#endif - -#endif diff --git a/waterbox/gpgx/core/ntsc/sms_ntsc.txt b/waterbox/gpgx/core/ntsc/sms_ntsc.txt deleted file mode 100644 index 1f29da2d21..0000000000 --- a/waterbox/gpgx/core/ntsc/sms_ntsc.txt +++ /dev/null @@ -1,119 +0,0 @@ -sms_ntsc 0.2.3: Sega Master System NTSC Video Filter ----------------------------------------------------- -Author : Shay Green -Website : http://www.slack.net/~ant/ -Forum : http://groups.google.com/group/blargg-sound-libs -License : GNU Lesser General Public License (LGPL) -Language: C or C++ - - -Overview --------- -To perform NTSC filtering, first allocate memory for a sms_ntsc_t object -and call sms_ntsc_init(), then call sms_ntsc_blit() to perform -filtering. You can call sms_ntsc_init() at any time to change image -parameters. - -By default, sms_ntsc_blit() reads and writes pixels in 16-bit RGB. Edit -sms_ntsc_config.h to change this. - - -RGB Palette Generation ----------------------- -A 4096-color RGB palette can be generated for use in a normal blitter. -In your sms_ntsc_setup_t structure, point palette_out to a 12288-byte -buffer (4096 * 3) to hold the palette, then call sms_ntsc_init(). If you -only need the palette and aren't going to be using the NTSC blitter, -pass 0 for the first parameter. - - -Image Parameters ----------------- -Many image parameters can be adjusted and presets are provided for -composite video, S-video, RGB, and monochrome. Most are floating-point -values with a general range of -1.0 to 1.0, where 0 is normal. The -ranges are adjusted so that one parameter at an extreme (-1 or +1) and -the rest at zero shouldn't result in any internal overflow (garbage -pixels). Setting multiple parameters to their extreme can produce -garbage. Put another way, the state space defined by all parameters -within the range -1 to +1 is not fully usable, but some extreme corners -are very useful so I don't want to reduce the parameter ranges. - -The sharpness and resolution parameters have similar effects. Resolution -affects how crisp pixels are. Sharpness merely enhances the edges by -increasing contrast, which makes things brighter at the edges. Artifacts -sets how much "junk" is around the edges where colors and brightness -change in the image, where -1 completely eliminates them. (Color) bleed -affects how much colors blend together and the artifact colors at the -edges of pixels surrounded by black. (Color) fringing affects how much -color fringing occurs around the edges of bright objects, especially -white text on a black background. - -When using custom settings, initialize your sms_ntsc_setup_t using one -of the standard setups before customizing it. This will ensure that all -fields are properly initialized, including any added in future releases -of the library that your current code can't even know about. - - sms_ntsc_setup_t setup; - setup = sms_ntsc_composite; /* do this first */ - setup.sharpness = custom_sharpness; - sms_ntsc_init( ntsc, &setup ); - - -Image Size ----------- -For proper aspect ratio, the image generated by the library must be -doubled vertically. - -Use the SMS_NTSC_OUT_WIDTH() and SMS_NTSC_IN_WIDTH() macros to convert -between input and output widths that the blitter uses. For example, if -you are blitting an image 256 pixels wide, use SMS_NTSC_OUT_WIDTH( 256 ) -to find out how many output pixels are written per row. Another example, -use SMS_NTSC_IN_WIDTH( 640 ) to find how many input pixels will fit -within 640 output pixels. - - -Custom Blitter --------------- -You can write your own blitter, allowing customization of how input -pixels are obtained, the format of output pixels (15, 16, or 32-bit -RGB), optimizations for your platform, and additional effects like -efficient scanline doubling during blitting. - -Macros are included in sms_ntsc.h for writing your blitter so that your -code can be carried over without changes to improved versions of the -library. The default blitter at the end of sms_ntsc.c shows how to use -the macros. Contact me for further assistance. - -The SMS_NTSC_BEGIN_ROW macro allows starting up to three pixels. The -first pixel is cut off; its use is in specifying a background color -other than black for the sliver on the left edge. The next two pixels -can be used to handle the extra one or two pixels not handled by the -main chunks of three pixels. For example if you want to blit 257 input -pixels on a row (for whatever odd reason), you would start the first two -with SMS_NTSC_BEGIN_ROW( ... sms_ntsc_black, line_in [0], line_in [1] ), -then do the remaining 255 in chunks of three (255 is divisible by 3). - - -Limitations ------------ -The library's horizontal rescaling is too wide by about 3% in order to -allow a much more optimal implementation. This means that a 248 pixel -wide input image should appear as 563 output pixels, but with this -library appears as 581 output pixels. TV aspect ratios probably vary by -this much anyway. If you really need unscaled output, contact me and -I'll see about adding it. - - -Thanks ------- -Thanks to NewRisingSun for his original code and explanations of NTSC, -which was a starting point for me learning about NTSC video and -decoding. Thanks to the Nesdev forum for feedback and encouragement. -Thanks to Martin Freij (Nestopia author) and Charles MacDonald (SMS Plus -author) for significant ongoing testing and feedback as the library has -improved. Thanks to byuu (bsnes author) and pagefault (ZSNES team) for -feedback about the SNES version. - --- -Shay Green diff --git a/waterbox/gpgx/core/ntsc/sms_ntsc_config.h b/waterbox/gpgx/core/ntsc/sms_ntsc_config.h deleted file mode 100644 index daa08fd6c7..0000000000 --- a/waterbox/gpgx/core/ntsc/sms_ntsc_config.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Configure library by modifying this file */ - -#ifndef SMS_NTSC_CONFIG_H -#define SMS_NTSC_CONFIG_H - -/* Format of source & output pixels (RGB555 or RGB565 only) */ -#ifdef USE_15BPP_RENDERING -#define SMS_NTSC_IN_FORMAT SMS_NTSC_RGB15 -#define SMS_NTSC_OUT_DEPTH 15 -#else -#define SMS_NTSC_IN_FORMAT SMS_NTSC_RGB16 -#define SMS_NTSC_OUT_DEPTH 16 -#endif - -/* Original CRAM format (not used) */ -/* #define SMS_NTSC_IN_FORMAT SMS_NTSC_BGR12 */ - -/* The following affect the built-in blitter only; a custom blitter can -handle things however it wants. */ - -/* Type of input pixel values (fixed to 16-bit)*/ -#define SMS_NTSC_IN_T unsigned short - -/* Each raw pixel input value is passed through this. You might want to mask -the pixel index if you use the high bits as flags, etc. */ -#define SMS_NTSC_ADJ_IN( in ) in - -/* For each pixel, this is the basic operation: -output_color = SMS_NTSC_ADJ_IN( SMS_NTSC_IN_T ) */ - -#endif diff --git a/waterbox/gpgx/core/ntsc/sms_ntsc_impl.h b/waterbox/gpgx/core/ntsc/sms_ntsc_impl.h deleted file mode 100644 index c2f341558c..0000000000 --- a/waterbox/gpgx/core/ntsc/sms_ntsc_impl.h +++ /dev/null @@ -1,439 +0,0 @@ -/* sms_ntsc 0.2.3. http://www.slack.net/~ant/ */ - -/* Common implementation of NTSC filters */ - -#include -#include - -/* Copyright (C) 2006 Shay Green. This module is free software; you -can redistribute it and/or modify it under the terms of the GNU Lesser -General Public License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. This -module is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -details. You should have received a copy of the GNU Lesser General Public -License along with this module; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - -#define DISABLE_CORRECTION 0 - -#undef PI -#define PI 3.14159265358979323846f - -#ifndef LUMA_CUTOFF - #define LUMA_CUTOFF 0.20 -#endif -#ifndef gamma_size - #define gamma_size 1 -#endif -#ifndef rgb_bits - #define rgb_bits 8 -#endif -#ifndef artifacts_max - #define artifacts_max (artifacts_mid * 1.5f) -#endif -#ifndef fringing_max - #define fringing_max (fringing_mid * 2) -#endif -#ifndef STD_HUE_CONDITION - #define STD_HUE_CONDITION( setup ) 1 -#endif - -#define ext_decoder_hue (std_decoder_hue + 15) -#define rgb_unit (1 << rgb_bits) -#define rgb_offset (rgb_unit * 2 + 0.5f) - -enum { burst_size = sms_ntsc_entry_size / burst_count }; -enum { kernel_half = 16 }; -enum { kernel_size = kernel_half * 2 + 1 }; - -typedef struct init_t -{ - float to_rgb [burst_count * 6]; - float to_float [gamma_size]; - float contrast; - float brightness; - float artifacts; - float fringing; - float kernel [rescale_out * kernel_size * 2]; -} init_t; - -#define ROTATE_IQ( i, q, sin_b, cos_b ) {\ - float t;\ - t = i * cos_b - q * sin_b;\ - q = i * sin_b + q * cos_b;\ - i = t;\ -} - -static void init_filters( init_t* impl, sms_ntsc_setup_t const* setup ) -{ -#if rescale_out > 1 - float kernels [kernel_size * 2]; -#else - float* const kernels = impl->kernel; -#endif - - /* generate luma (y) filter using sinc kernel */ - { - /* sinc with rolloff (dsf) */ - float const rolloff = 1 + (float) setup->sharpness * (float) 0.032; - float const maxh = 32; - float const pow_a_n = (float) pow( rolloff, maxh ); - float sum; - int i; - /* quadratic mapping to reduce negative (blurring) range */ - float to_angle = (float) setup->resolution + 1; - to_angle = PI / maxh * (float) LUMA_CUTOFF * (to_angle * to_angle + 1); - - kernels [kernel_size * 3 / 2] = maxh; /* default center value */ - for ( i = 0; i < kernel_half * 2 + 1; i++ ) - { - int x = i - kernel_half; - float angle = x * to_angle; - /* instability occurs at center point with rolloff very close to 1.0 */ - if ( x || pow_a_n > (float) 1.056 || pow_a_n < (float) 0.981 ) - { - float rolloff_cos_a = rolloff * (float) cos( angle ); - float num = 1 - rolloff_cos_a - - pow_a_n * (float) cos( maxh * angle ) + - pow_a_n * rolloff * (float) cos( (maxh - 1) * angle ); - float den = 1 - rolloff_cos_a - rolloff_cos_a + rolloff * rolloff; - float dsf = num / den; - kernels [kernel_size * 3 / 2 - kernel_half + i] = dsf - (float) 0.5; - } - } - - /* apply blackman window and find sum */ - sum = 0; - for ( i = 0; i < kernel_half * 2 + 1; i++ ) - { - float x = PI * 2 / (kernel_half * 2) * i; - float blackman = 0.42f - 0.5f * (float) cos( x ) + 0.08f * (float) cos( x * 2 ); - sum += (kernels [kernel_size * 3 / 2 - kernel_half + i] *= blackman); - } - - /* normalize kernel */ - sum = 1.0f / sum; - for ( i = 0; i < kernel_half * 2 + 1; i++ ) - { - int x = kernel_size * 3 / 2 - kernel_half + i; - kernels [x] *= sum; - assert( kernels [x] == kernels [x] ); /* catch numerical instability */ - } - } - - /* generate chroma (iq) filter using gaussian kernel */ - { - float const cutoff_factor = -0.03125f; - float cutoff = (float) setup->bleed; - int i; - - if ( cutoff < 0 ) - { - /* keep extreme value accessible only near upper end of scale (1.0) */ - cutoff *= cutoff; - cutoff *= cutoff; - cutoff *= cutoff; - cutoff *= -30.0f / 0.65f; - } - cutoff = cutoff_factor - 0.65f * cutoff_factor * cutoff; - - for ( i = -kernel_half; i <= kernel_half; i++ ) - kernels [kernel_size / 2 + i] = (float) exp( i * i * cutoff ); - - /* normalize even and odd phases separately */ - for ( i = 0; i < 2; i++ ) - { - float sum = 0; - int x; - for ( x = i; x < kernel_size; x += 2 ) - sum += kernels [x]; - - sum = 1.0f / sum; - for ( x = i; x < kernel_size; x += 2 ) - { - kernels [x] *= sum; - assert( kernels [x] == kernels [x] ); /* catch numerical instability */ - } - } - } - - /* - printf( "luma:\n" ); - for ( i = kernel_size; i < kernel_size * 2; i++ ) - printf( "%f\n", kernels [i] ); - printf( "chroma:\n" ); - for ( i = 0; i < kernel_size; i++ ) - printf( "%f\n", kernels [i] ); - */ - - /* generate linear rescale kernels */ - #if rescale_out > 1 - { - float weight = 1.0f; - float* out = impl->kernel; - int n = rescale_out; - do - { - float remain = 0; - int i; - weight -= 1.0f / rescale_in; - for ( i = 0; i < kernel_size * 2; i++ ) - { - float cur = kernels [i]; - float m = cur * weight; - *out++ = m + remain; - remain = cur - m; - } - } - while ( --n ); - } - #endif -} - -static float const default_decoder [6] = - { 0.956f, 0.621f, -0.272f, -0.647f, -1.105f, 1.702f }; - -static void init( init_t* impl, sms_ntsc_setup_t const* setup ) -{ - impl->brightness = (float) setup->brightness * (0.5f * rgb_unit) + rgb_offset; - impl->contrast = (float) setup->contrast * (0.5f * rgb_unit) + rgb_unit; - #ifdef default_palette_contrast - if ( !setup->palette ) - impl->contrast *= default_palette_contrast; - #endif - - impl->artifacts = (float) setup->artifacts; - if ( impl->artifacts > 0 ) - impl->artifacts *= artifacts_max - artifacts_mid; - impl->artifacts = impl->artifacts * artifacts_mid + artifacts_mid; - - impl->fringing = (float) setup->fringing; - if ( impl->fringing > 0 ) - impl->fringing *= fringing_max - fringing_mid; - impl->fringing = impl->fringing * fringing_mid + fringing_mid; - - init_filters( impl, setup ); - - /* generate gamma table */ - if ( gamma_size > 1 ) - { - float const to_float = 1.0f / (gamma_size - (gamma_size > 1)); - float const gamma = 1.1333f - (float) setup->gamma * 0.5f; - /* match common PC's 2.2 gamma to TV's 2.65 gamma */ - int i; - for ( i = 0; i < gamma_size; i++ ) - impl->to_float [i] = - (float) pow( i * to_float, gamma ) * impl->contrast + impl->brightness; - } - - /* setup decoder matricies */ - { - float hue = (float) setup->hue * PI + PI / 180 * ext_decoder_hue; - float sat = (float) setup->saturation + 1; - float const* decoder = setup->decoder_matrix; - if ( !decoder ) - { - decoder = default_decoder; - if ( STD_HUE_CONDITION( setup ) ) - hue += PI / 180 * (std_decoder_hue - ext_decoder_hue); - } - - { - float s = (float) sin( hue ) * sat; - float c = (float) cos( hue ) * sat; - float* out = impl->to_rgb; - int n; - - n = burst_count; - do - { - float const* in = decoder; - int n = 3; - do - { - float i = *in++; - float q = *in++; - *out++ = i * c - q * s; - *out++ = i * s + q * c; - } - while ( --n ); - if ( burst_count <= 1 ) - break; - ROTATE_IQ( s, c, 0.866025f, -0.5f ); /* +120 degrees */ - } - while ( --n ); - } - } -} - -/* kernel generation */ - -#define RGB_TO_YIQ( r, g, b, y, i ) (\ - (y = (r) * 0.299f + (g) * 0.587f + (b) * 0.114f),\ - (i = (r) * 0.596f - (g) * 0.275f - (b) * 0.321f),\ - ((r) * 0.212f - (g) * 0.523f + (b) * 0.311f)\ -) - -#define YIQ_TO_RGB( y, i, q, to_rgb, type, r, g ) (\ - r = (type) (y + to_rgb [0] * i + to_rgb [1] * q),\ - g = (type) (y + to_rgb [2] * i + to_rgb [3] * q),\ - (type) (y + to_rgb [4] * i + to_rgb [5] * q)\ -) - -#define PACK_RGB( r, g, b ) ((r) << 21 | (g) << 11 | (b) << 1) - -enum { rgb_kernel_size = burst_size / alignment_count }; -enum { rgb_bias = rgb_unit * 2 * sms_ntsc_rgb_builder }; - -typedef struct pixel_info_t -{ - int offset; - float negate; - float kernel [4]; -} pixel_info_t; - -#if rescale_in > 1 - #define PIXEL_OFFSET_( ntsc, scaled ) \ - (kernel_size / 2 + ntsc + (scaled != 0) + (rescale_out - scaled) % rescale_out + \ - (kernel_size * 2 * scaled)) - - #define PIXEL_OFFSET( ntsc, scaled ) \ - PIXEL_OFFSET_( ((ntsc) - (scaled) / rescale_out * rescale_in),\ - (((scaled) + rescale_out * 10) % rescale_out) ),\ - (1.0f - (((ntsc) + 100) & 2)) -#else - #define PIXEL_OFFSET( ntsc, scaled ) \ - (kernel_size / 2 + (ntsc) - (scaled)),\ - (1.0f - (((ntsc) + 100) & 2)) -#endif - -extern pixel_info_t const sms_ntsc_pixels [alignment_count]; - -/* Generate pixel at all burst phases and column alignments */ -static void gen_kernel( init_t* impl, float y, float i, float q, sms_ntsc_rgb_t* out ) -{ - /* generate for each scanline burst phase */ - float const* to_rgb = impl->to_rgb; - int burst_remain = burst_count; - y -= rgb_offset; - do - { - /* Encode yiq into *two* composite signals (to allow control over artifacting). - Convolve these with kernels which: filter respective components, apply - sharpening, and rescale horizontally. Convert resulting yiq to rgb and pack - into integer. Based on algorithm by NewRisingSun. */ - pixel_info_t const* pixel = sms_ntsc_pixels; - int alignment_remain = alignment_count; - do - { - /* negate is -1 when composite starts at odd multiple of 2 */ - float const yy = y * impl->fringing * pixel->negate; - float const ic0 = (i + yy) * pixel->kernel [0]; - float const qc1 = (q + yy) * pixel->kernel [1]; - float const ic2 = (i - yy) * pixel->kernel [2]; - float const qc3 = (q - yy) * pixel->kernel [3]; - - float const factor = impl->artifacts * pixel->negate; - float const ii = i * factor; - float const yc0 = (y + ii) * pixel->kernel [0]; - float const yc2 = (y - ii) * pixel->kernel [2]; - - float const qq = q * factor; - float const yc1 = (y + qq) * pixel->kernel [1]; - float const yc3 = (y - qq) * pixel->kernel [3]; - - float const* k = &impl->kernel [pixel->offset]; - int n; - ++pixel; - for ( n = rgb_kernel_size; n; --n ) - { - float i = k[0]*ic0 + k[2]*ic2; - float q = k[1]*qc1 + k[3]*qc3; - float y = k[kernel_size+0]*yc0 + k[kernel_size+1]*yc1 + - k[kernel_size+2]*yc2 + k[kernel_size+3]*yc3 + rgb_offset; - if ( rescale_out <= 1 ) - k--; - else if ( k < &impl->kernel [kernel_size * 2 * (rescale_out - 1)] ) - k += kernel_size * 2 - 1; - else - k -= kernel_size * 2 * (rescale_out - 1) + 2; - { - int r, g, b = YIQ_TO_RGB( y, i, q, to_rgb, int, r, g ); - *out++ = PACK_RGB( r, g, b ) - rgb_bias; - } - } - } - while ( alignment_count > 1 && --alignment_remain ); - - if ( burst_count <= 1 ) - break; - - to_rgb += 6; - - ROTATE_IQ( i, q, -0.866025f, -0.5f ); /* -120 degrees */ - } - while ( --burst_remain ); -} - -static void correct_errors( sms_ntsc_rgb_t color, sms_ntsc_rgb_t* out ); - -#if DISABLE_CORRECTION - #define CORRECT_ERROR( a ) { out [i] += rgb_bias; } - #define DISTRIBUTE_ERROR( a, b, c ) { out [i] += rgb_bias; } -#else - #define CORRECT_ERROR( a ) { out [a] += error; } - #define DISTRIBUTE_ERROR( a, b, c ) {\ - sms_ntsc_rgb_t fourth = (error + 2 * sms_ntsc_rgb_builder) >> 2;\ - fourth &= (rgb_bias >> 1) - sms_ntsc_rgb_builder;\ - fourth -= rgb_bias >> 2;\ - out [a] += fourth;\ - out [b] += fourth;\ - out [c] += fourth;\ - out [i] += error - (fourth * 3);\ - } -#endif - -#define RGB_PALETTE_OUT( rgb, out_ )\ -{\ - unsigned char* out = (out_);\ - sms_ntsc_rgb_t clamped = (rgb);\ - SMS_NTSC_CLAMP_( clamped, (8 - rgb_bits) );\ - out [0] = (unsigned char) (clamped >> 21);\ - out [1] = (unsigned char) (clamped >> 11);\ - out [2] = (unsigned char) (clamped >> 1);\ -} - -/* blitter related */ - -#ifndef restrict - #if defined (__GNUC__) - #define restrict __restrict__ - #elif defined (_MSC_VER) && _MSC_VER > 1300 - #define restrict __restrict - #else - /* no support for restricted pointers */ - #define restrict - #endif -#endif - -#include - -#if SMS_NTSC_OUT_DEPTH <= 16 - #if USHRT_MAX == 0xFFFF - typedef unsigned short sms_ntsc_out_t; - #else - #error "Need 16-bit int type" - #endif - -#else - #if UINT_MAX == 0xFFFFFFFF - typedef unsigned int sms_ntsc_out_t; - #elif ULONG_MAX == 0xFFFFFFFF - typedef unsigned long sms_ntsc_out_t; - #else - #error "Need 32-bit int type" - #endif - -#endif diff --git a/waterbox/gpgx/core/shared.h b/waterbox/gpgx/core/shared.h deleted file mode 100644 index 935a5c67f9..0000000000 --- a/waterbox/gpgx/core/shared.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef _SHARED_H_ -#define _SHARED_H_ - -#include -#include -#include -#include - -#include "types.h" -#include "macros.h" -#include "osd.h" -#include "loadrom.h" -#include "m68k.h" -#include "z80.h" -#include "system.h" -#include "genesis.h" -#include "vdp_ctrl.h" -#include "vdp_render.h" -#include "mem68k.h" -#include "memz80.h" -#include "membnk.h" -#include "io_ctrl.h" -#include "input.h" -#include "sound.h" -#include "sn76489.h" -#include "ym2413.h" -#include "ym2612.h" -#include "sram.h" -#include "ggenie.h" -#include "areplay.h" -#include "svp.h" - -#endif /* _SHARED_H_ */ - diff --git a/waterbox/gpgx/core/sound/blip_buf.c b/waterbox/gpgx/core/sound/blip_buf.c deleted file mode 100644 index 2f48536609..0000000000 --- a/waterbox/gpgx/core/sound/blip_buf.c +++ /dev/null @@ -1,405 +0,0 @@ -/* blip_buf $vers. http://www.slack.net/~ant/ */ - -/* Modified for Genesis Plus GX by EkeEke (01/09/12) */ -/* - disabled assertions checks (define #BLIP_ASSERT to re-enable) */ -/* - fixed multiple time-frames support & removed m->avail */ -/* - modified blip_read_samples to always output to stereo streams */ -/* - added blip_mix_samples function (see blip_buf.h) */ - -#include "blip_buf.h" - -#ifdef BLIP_ASSERT -#include -#endif -#include -#include -#include - -/* Library Copyright (C) 2003-2009 Shay Green. This library is free software; -you can redistribute it and/or modify it under the terms of the GNU Lesser -General Public License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. This -library is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -details. You should have received a copy of the GNU Lesser General Public -License along with this module; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - - -#if defined (BLARGG_TEST) && BLARGG_TEST - #include "blargg_test.h" -#endif - -/* Equivalent to ULONG_MAX >= 0xFFFFFFFF00000000. -Avoids constants that don't fit in 32 bits. */ -#if ULONG_MAX/0xFFFFFFFF > 0xFFFFFFFF - typedef unsigned long fixed_t; - enum { pre_shift = 32 }; - -#elif defined(ULLONG_MAX) - typedef unsigned long long fixed_t; - enum { pre_shift = 32 }; - -#else - typedef unsigned fixed_t; - enum { pre_shift = 0 }; - -#endif - -enum { time_bits = pre_shift + 20 }; - -static fixed_t const time_unit = (fixed_t) 1 << time_bits; - -enum { bass_shift = 9 }; /* affects high-pass filter breakpoint frequency */ -enum { end_frame_extra = 2 }; /* allows deltas slightly after frame length */ - -enum { half_width = 8 }; -enum { buf_extra = half_width*2 + end_frame_extra }; -enum { phase_bits = 5 }; -enum { phase_count = 1 << phase_bits }; -enum { delta_bits = 15 }; -enum { delta_unit = 1 << delta_bits }; -enum { frac_bits = time_bits - pre_shift }; - -/* We could eliminate avail and encode whole samples in offset, but that would -limit the total buffered samples to blip_max_frame. That could only be -increased by decreasing time_bits, which would reduce resample ratio accuracy. -*/ - -struct blip_t -{ - fixed_t factor; - fixed_t offset; - int size; - int integrator; -}; - -typedef int buf_t; - -/* probably not totally portable */ -#define SAMPLES( buf ) ((buf_t*) ((buf) + 1)) - -/* Arithmetic (sign-preserving) right shift */ -#define ARITH_SHIFT( n, shift ) \ - ((n) >> (shift)) - -enum { max_sample = +32767 }; -enum { min_sample = -32768 }; - -#define CLAMP( n ) \ - {\ - if ( n > max_sample ) n = max_sample;\ - else if ( n < min_sample) n = min_sample;\ - } - -#ifdef BLIP_ASSERT -static void check_assumptions( void ) -{ - int n; - - #if INT_MAX < 0x7FFFFFFF || UINT_MAX < 0xFFFFFFFF - #error "int must be at least 32 bits" - #endif - - assert( (-3 >> 1) == -2 ); /* right shift must preserve sign */ - - n = max_sample * 2; - CLAMP( n ); - assert( n == max_sample ); - - n = min_sample * 2; - CLAMP( n ); - assert( n == min_sample ); - - assert( blip_max_ratio <= time_unit ); - assert( blip_max_frame <= (fixed_t) -1 >> time_bits ); -} -#endif - -blip_t* blip_new( int size ) -{ - blip_t* m; -#ifdef BLIP_ASSERT - assert( size >= 0 ); -#endif - - m = (blip_t*) malloc( sizeof *m + (size + buf_extra) * sizeof (buf_t) ); - if ( m ) - { - m->factor = time_unit / blip_max_ratio; - m->size = size; - blip_clear( m ); -#ifdef BLIP_ASSERT - check_assumptions(); -#endif - } - return m; -} - -void blip_delete( blip_t* m ) -{ - if ( m != NULL ) - { - /* Clear fields in case user tries to use after freeing */ - memset( m, 0, sizeof *m ); - free( m ); - } -} - -void blip_set_rates( blip_t* m, double clock_rate, double sample_rate ) -{ - double factor = time_unit * sample_rate / clock_rate; - m->factor = (fixed_t) factor; - -#ifdef BLIP_ASSERT - /* Fails if clock_rate exceeds maximum, relative to sample_rate */ - assert( 0 <= factor - m->factor && factor - m->factor < 1 ); -#endif - -/* Avoid requiring math.h. Equivalent to - m->factor = (int) ceil( factor ) */ - if ( m->factor < factor ) - m->factor++; - - /* At this point, factor is most likely rounded up, but could still - have been rounded down in the floating-point calculation. */ -} - -void blip_clear( blip_t* m ) -{ - /* We could set offset to 0, factor/2, or factor-1. 0 is suitable if - factor is rounded up. factor-1 is suitable if factor is rounded down. - Since we don't know rounding direction, factor/2 accommodates either, - with the slight loss of showing an error in half the time. Since for - a 64-bit factor this is years, the halving isn't a problem. */ - - m->offset = m->factor / 2; - m->integrator = 0; - memset( SAMPLES( m ), 0, (m->size + buf_extra) * sizeof (buf_t) ); -} - -int blip_clocks_needed( const blip_t* m, int samples ) -{ - fixed_t needed; - -#ifdef BLIP_ASSERT - /* Fails if buffer can't hold that many more samples */ - assert( (samples >= 0) && (((m->offset >> time_bits) + samples) <= m->size) ); -#endif - - needed = (fixed_t) samples * time_unit; - if ( needed < m->offset ) - return 0; - - return (needed - m->offset + m->factor - 1) / m->factor; -} - -void blip_end_frame( blip_t* m, unsigned t ) -{ - m->offset += t * m->factor; - -#ifdef BLIP_ASSERT - /* Fails if buffer size was exceeded */ - assert( (m->offset >> time_bits) <= m->size ); -#endif -} - -int blip_samples_avail( const blip_t* m ) -{ - return (m->offset >> time_bits); -} - -static void remove_samples( blip_t* m, int count ) -{ - buf_t* buf = SAMPLES( m ); - int remain = (m->offset >> time_bits) + buf_extra - count; - m->offset -= count * time_unit; - - memmove( &buf [0], &buf [count], remain * sizeof buf [0] ); - memset( &buf [remain], 0, count * sizeof buf [0] ); -} - -int blip_read_samples( blip_t* m, short out [], int count) -{ -#ifdef BLIP_ASSERT - assert( count >= 0 ); - - if ( count > (m->offset >> time_bits) ) - count = m->offset >> time_bits; - - if ( count ) -#endif - { - buf_t const* in = SAMPLES( m ); - buf_t const* end = in + count; - int sum = m->integrator; - do - { - /* Eliminate fraction */ - int s = ARITH_SHIFT( sum, delta_bits ); - - sum += *in++; - - CLAMP( s ); - - *out = s; - out += 2; - - /* High-pass filter */ - sum -= s << (delta_bits - bass_shift); - } - while ( in != end ); - m->integrator = sum; - - remove_samples( m, count ); - } - - return count; -} - -int blip_mix_samples( blip_t* m, short out [], int count) -{ -#ifdef BLIP_ASSERT - assert( count >= 0 ); - - if ( count > (m->offset >> time_bits) ) - count = m->offset >> time_bits; - - if ( count ) -#endif - { - buf_t const* in = SAMPLES( m ); - buf_t const* end = in + count; - int sum = m->integrator; - do - { - /* Eliminate fraction */ - int s = ARITH_SHIFT( sum, delta_bits ); - - sum += *in++; - - /* High-pass filter */ - sum -= s << (delta_bits - bass_shift); - - /* Add current buffer value */ - s += *out; - - CLAMP( s ); - - *out = s; - out += 2; - } - while ( in != end ); - m->integrator = sum; - - remove_samples( m, count ); - } - - return count; -} - -/* Things that didn't help performance on x86: - __attribute__((aligned(128))) - #define short int - restrict -*/ - -/* Sinc_Generator( 0.9, 0.55, 4.5 ) */ -static short const bl_step [phase_count + 1] [half_width] = -{ -{ 43, -115, 350, -488, 1136, -914, 5861,21022}, -{ 44, -118, 348, -473, 1076, -799, 5274,21001}, -{ 45, -121, 344, -454, 1011, -677, 4706,20936}, -{ 46, -122, 336, -431, 942, -549, 4156,20829}, -{ 47, -123, 327, -404, 868, -418, 3629,20679}, -{ 47, -122, 316, -375, 792, -285, 3124,20488}, -{ 47, -120, 303, -344, 714, -151, 2644,20256}, -{ 46, -117, 289, -310, 634, -17, 2188,19985}, -{ 46, -114, 273, -275, 553, 117, 1758,19675}, -{ 44, -108, 255, -237, 471, 247, 1356,19327}, -{ 43, -103, 237, -199, 390, 373, 981,18944}, -{ 42, -98, 218, -160, 310, 495, 633,18527}, -{ 40, -91, 198, -121, 231, 611, 314,18078}, -{ 38, -84, 178, -81, 153, 722, 22,17599}, -{ 36, -76, 157, -43, 80, 824, -241,17092}, -{ 34, -68, 135, -3, 8, 919, -476,16558}, -{ 32, -61, 115, 34, -60, 1006, -683,16001}, -{ 29, -52, 94, 70, -123, 1083, -862,15422}, -{ 27, -44, 73, 106, -184, 1152,-1015,14824}, -{ 25, -36, 53, 139, -239, 1211,-1142,14210}, -{ 22, -27, 34, 170, -290, 1261,-1244,13582}, -{ 20, -20, 16, 199, -335, 1301,-1322,12942}, -{ 18, -12, -3, 226, -375, 1331,-1376,12293}, -{ 15, -4, -19, 250, -410, 1351,-1408,11638}, -{ 13, 3, -35, 272, -439, 1361,-1419,10979}, -{ 11, 9, -49, 292, -464, 1362,-1410,10319}, -{ 9, 16, -63, 309, -483, 1354,-1383, 9660}, -{ 7, 22, -75, 322, -496, 1337,-1339, 9005}, -{ 6, 26, -85, 333, -504, 1312,-1280, 8355}, -{ 4, 31, -94, 341, -507, 1278,-1205, 7713}, -{ 3, 35, -102, 347, -506, 1238,-1119, 7082}, -{ 1, 40, -110, 350, -499, 1190,-1021, 6464}, -{ 0, 43, -115, 350, -488, 1136, -914, 5861} -}; - -/* Shifting by pre_shift allows calculation using unsigned int rather than -possibly-wider fixed_t. On 32-bit platforms, this is likely more efficient. -And by having pre_shift 32, a 32-bit platform can easily do the shift by -simply ignoring the low half. */ - -void blip_add_delta( blip_t* m, unsigned time, int delta ) -{ - unsigned fixed = (unsigned) ((time * m->factor + m->offset) >> pre_shift); - buf_t* out = SAMPLES( m ) + (fixed >> frac_bits); - - int const phase_shift = frac_bits - phase_bits; - int phase = fixed >> phase_shift & (phase_count - 1); - short const* in = bl_step [phase]; - short const* rev = bl_step [phase_count - phase]; - - int interp = fixed >> (phase_shift - delta_bits) & (delta_unit - 1); - int delta2 = (delta * interp) >> delta_bits; - delta -= delta2; - -#ifdef BLIP_ASSERT - /* Fails if buffer size was exceeded */ - assert( out <= &SAMPLES( m ) [m->size + end_frame_extra] ); -#endif - - out [0] += in[0]*delta + in[half_width+0]*delta2; - out [1] += in[1]*delta + in[half_width+1]*delta2; - out [2] += in[2]*delta + in[half_width+2]*delta2; - out [3] += in[3]*delta + in[half_width+3]*delta2; - out [4] += in[4]*delta + in[half_width+4]*delta2; - out [5] += in[5]*delta + in[half_width+5]*delta2; - out [6] += in[6]*delta + in[half_width+6]*delta2; - out [7] += in[7]*delta + in[half_width+7]*delta2; - - in = rev; - out [ 8] += in[7]*delta + in[7-half_width]*delta2; - out [ 9] += in[6]*delta + in[6-half_width]*delta2; - out [10] += in[5]*delta + in[5-half_width]*delta2; - out [11] += in[4]*delta + in[4-half_width]*delta2; - out [12] += in[3]*delta + in[3-half_width]*delta2; - out [13] += in[2]*delta + in[2-half_width]*delta2; - out [14] += in[1]*delta + in[1-half_width]*delta2; - out [15] += in[0]*delta + in[0-half_width]*delta2; -} - -void blip_add_delta_fast( blip_t* m, unsigned time, int delta ) -{ - unsigned fixed = (unsigned) ((time * m->factor + m->offset) >> pre_shift); - buf_t* out = SAMPLES( m ) + (fixed >> frac_bits); - - int interp = fixed >> (frac_bits - delta_bits) & (delta_unit - 1); - int delta2 = delta * interp; - -#ifdef BLIP_ASSERT - /* Fails if buffer size was exceeded */ - assert( out <= &SAMPLES( m ) [m->size + end_frame_extra] ); -#endif - - out [7] += delta * delta_unit - delta2; - out [8] += delta2; -} diff --git a/waterbox/gpgx/core/sound/blip_buf.h b/waterbox/gpgx/core/sound/blip_buf.h deleted file mode 100644 index 21c45d0a15..0000000000 --- a/waterbox/gpgx/core/sound/blip_buf.h +++ /dev/null @@ -1,74 +0,0 @@ -/** Sample buffer that resamples from input clock rate to output sample rate \file */ - -/* blip_buf $vers */ -#ifndef BLIP_BUF_H -#define BLIP_BUF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/** First parameter of most functions is blip_t*, or const blip_t* if nothing -is changed. */ -typedef struct blip_t blip_t; - -/** Creates new buffer that can hold at most sample_count samples. Sets rates -so that there are blip_max_ratio clocks per sample. Returns pointer to new -buffer, or NULL if insufficient memory. */ -blip_t* blip_new( int sample_count ); - -/** Sets approximate input clock rate and output sample rate. For every -clock_rate input clocks, approximately sample_rate samples are generated. */ -void blip_set_rates( blip_t*, double clock_rate, double sample_rate ); - -enum { /** Maximum clock_rate/sample_rate ratio. For a given sample_rate, -clock_rate must not be greater than sample_rate*blip_max_ratio. */ -blip_max_ratio = 1 << 20 }; - -/** Clears entire buffer. Afterwards, blip_samples_avail() == 0. */ -void blip_clear( blip_t* ); - -/** Adds positive/negative delta into buffer at specified clock time. */ -void blip_add_delta( blip_t*, unsigned int clock_time, int delta ); - -/** Same as blip_add_delta(), but uses faster, lower-quality synthesis. */ -void blip_add_delta_fast( blip_t*, unsigned int clock_time, int delta ); - -/** Length of time frame, in clocks, needed to make sample_count additional -samples available. */ -int blip_clocks_needed( const blip_t*, int sample_count ); - -enum { /** Maximum number of samples that can be generated from one time frame. */ -blip_max_frame = 4000 }; - -/** Makes input clocks before clock_duration available for reading as output -samples. Also begins new time frame at clock_duration, so that clock time 0 in -the new time frame specifies the same clock as clock_duration in the old time -frame specified. Deltas can have been added slightly past clock_duration (up to -however many clocks there are in two output samples). */ -void blip_end_frame( blip_t*, unsigned int clock_duration ); - -/** Number of buffered samples available for reading. */ -int blip_samples_avail( const blip_t* ); - -/** Reads and removes at most 'count' samples and writes them to to every other -element of 'out', allowing easy interleaving of two buffers into a stereo sample -stream. Outputs 16-bit signed samples. Returns number of samples actually read. */ -int blip_read_samples( blip_t*, short out [], int count); - -/* Same as above function except sample is added to output buffer previous value */ -/* This allows easy mixing of different blip buffers into a single output stream */ -int blip_mix_samples( blip_t* m, short out [], int count); - -/** Frees buffer. No effect if NULL is passed. */ -void blip_delete( blip_t* ); - - -/* Deprecated */ -typedef blip_t blip_buffer_t; - -#ifdef __cplusplus - } -#endif - -#endif diff --git a/waterbox/gpgx/core/sound/eq.c b/waterbox/gpgx/core/sound/eq.c deleted file mode 100644 index 40c8f1c01f..0000000000 --- a/waterbox/gpgx/core/sound/eq.c +++ /dev/null @@ -1,132 +0,0 @@ -/*---------------------------------------------------------------------------- -// -// 3 Band EQ :) -// -// EQ.C - Main Source file for 3 band EQ -// -// (c) Neil C / Etanza Systems / 2K6 -// -// Shouts / Loves / Moans = etanza at lycos dot co dot uk -// -// This work is hereby placed in the public domain for all purposes, including -// use in commercial applications. -// -// The author assumes NO RESPONSIBILITY for any problems caused by the use of -// this software. -// -//----------------------------------------------------------------------------*/ - -/* NOTES : -// -// - Original filter code by Paul Kellet (musicdsp.pdf) -// -// - Uses 4 first order filters in series, should give 24dB per octave -// -// - Now with P4 Denormal fix :) - - -//----------------------------------------------------------------------------*/ - -/* ---------- -//| Includes | -// ----------*/ -#include -#include -#include -#include "eq.h" -#include "macros.h" - - -/* ----------- -//| Constants | -// -----------*/ - -static double vsa = (1.0 / 4294967295.0); /* Very small amount (Denormal Fix) */ - - -/* --------------- -//| Initialise EQ | -// ---------------*/ - -/* Recommended frequencies are ... -// -// lowfreq = 880 Hz -// highfreq = 5000 Hz -// -// Set mixfreq to whatever rate your system is using (eg 48Khz)*/ - -void init_3band_state(EQSTATE * es, int lowfreq, int highfreq, int mixfreq) -{ - /* Clear state */ - - memset(es, 0, sizeof(EQSTATE)); - - /* Set Low/Mid/High gains to unity */ - - es->lg = 1.0; - es->mg = 1.0; - es->hg = 1.0; - - /* Calculate filter cutoff frequencies */ - - es->lf = 2 * sin(M_PI * ((double) lowfreq / (double) mixfreq)); - es->hf = 2 * sin(M_PI * ((double) highfreq / (double) mixfreq)); -} - - -/* --------------- -//| EQ one sample | -// ---------------*/ - -/* - sample can be any range you like :) -// -// Note that the output will depend on the gain settings for each band -// (especially the bass) so may require clipping before output, but you -// knew that anyway :)*/ - -double do_3band(EQSTATE * es, int sample) -{ - /* Locals */ - - double l, m, h; /* Low / Mid / High - Sample Values */ - - /* Filter #1 (lowpass) */ - - es->f1p0 += (es->lf * ((double) sample - es->f1p0)) + vsa; - es->f1p1 += (es->lf * (es->f1p0 - es->f1p1)); - es->f1p2 += (es->lf * (es->f1p1 - es->f1p2)); - es->f1p3 += (es->lf * (es->f1p2 - es->f1p3)); - - l = es->f1p3; - - /* Filter #2 (highpass) */ - - es->f2p0 += (es->hf * ((double) sample - es->f2p0)) + vsa; - es->f2p1 += (es->hf * (es->f2p0 - es->f2p1)); - es->f2p2 += (es->hf * (es->f2p1 - es->f2p2)); - es->f2p3 += (es->hf * (es->f2p2 - es->f2p3)); - - h = es->sdm3 - es->f2p3; - - /* Calculate midrange (signal - (low + high)) */ - - /* m = es->sdm3 - (h + l); */ - /* fix from http://www.musicdsp.org/showArchiveComment.php?ArchiveID=236 ? */ - m = sample - (h + l); - - /* Scale, Combine and store */ - - l *= es->lg; - m *= es->mg; - h *= es->hg; - - /* Shuffle history buffer */ - - es->sdm3 = es->sdm2; - es->sdm2 = es->sdm1; - es->sdm1 = sample; - - /* Return result */ - - return (int) (l + m + h); -} diff --git a/waterbox/gpgx/core/sound/eq.h b/waterbox/gpgx/core/sound/eq.h deleted file mode 100644 index 4afa747e8d..0000000000 --- a/waterbox/gpgx/core/sound/eq.h +++ /dev/null @@ -1,67 +0,0 @@ -/*--------------------------------------------------------------------------- -// -// 3 Band EQ :) -// -// EQ.H - Header file for 3 band EQ -// -// (c) Neil C / Etanza Systems / 2K6 -// -// Shouts / Loves / Moans = etanza at lycos dot co dot uk -// -// This work is hereby placed in the public domain for all purposes, including -// use in commercial applications. -// -// The author assumes NO RESPONSIBILITY for any problems caused by the use of -// this software. -// -//----------------------------------------------------------------------------*/ - -#ifndef __EQ3BAND__ -#define __EQ3BAND__ - -/* ------------ -//| Structures | -// ------------*/ - -typedef struct { - /* Filter #1 (Low band) */ - - double lf; /* Frequency */ - double f1p0; /* Poles ... */ - double f1p1; - double f1p2; - double f1p3; - - /* Filter #2 (High band) */ - - double hf; /* Frequency */ - double f2p0; /* Poles ... */ - double f2p1; - double f2p2; - double f2p3; - - /* Sample history buffer */ - - double sdm1; /* Sample data minus 1 */ - double sdm2; /* 2 */ - double sdm3; /* 3 */ - - /* Gain Controls */ - - double lg; /* low gain */ - double mg; /* mid gain */ - double hg; /* high gain */ - -} EQSTATE; - - -/* --------- -//| Exports | -// ---------*/ - -extern void init_3band_state(EQSTATE * es, int lowfreq, int highfreq, - int mixfreq); -extern double do_3band(EQSTATE * es, int sample); - - -#endif /* #ifndef __EQ3BAND__ */ diff --git a/waterbox/gpgx/core/sound/sn76489.c b/waterbox/gpgx/core/sound/sn76489.c deleted file mode 100644 index 439ea68a86..0000000000 --- a/waterbox/gpgx/core/sound/sn76489.c +++ /dev/null @@ -1,451 +0,0 @@ -/* - SN76489 emulation - by Maxim in 2001 and 2002 - converted from my original Delphi implementation - - I'm a C newbie so I'm sure there are loads of stupid things - in here which I'll come back to some day and redo - - Includes: - - Super-high quality tone channel "oversampling" by calculating fractional positions on transitions - - Noise output pattern reverse engineered from actual SMS output - - Volume levels taken from actual SMS output - - 07/08/04 Charles MacDonald - Modified for use with SMS Plus: - - Added support for multiple PSG chips. - - Added reset/config/update routines. - - Added context management routines. - - Removed SN76489_GetValues(). - - Removed some unused variables. - - 25/04/07 Eke-Eke (Genesis Plus GX) - - Removed stereo GG support (unused) - - Made SN76489_Update outputs 16bits mono samples - - Replaced volume table with VGM plugin's one - - 05/01/09 Eke-Eke (Genesis Plus GX) - - Modified Cut-Off frequency (according to Steve Snake: http://www.smspower.org/forums/viewtopic.php?t=1746) - - 24/08/10 Eke-Eke (Genesis Plus GX) - - Removed multichip support (unused) - - Removed alternate volume table, panning & mute support (unused) - - Removed configurable Feedback and Shift Register Width (always use Sega ones) - - Added linear resampling using Blip Buffer (based on Blargg's implementation: http://www.smspower.org/forums/viewtopic.php?t=11376) - - 01/09/12 Eke-Eke (Genesis Plus GX) - - Added generic Blip-Buffer support internally, using common Master Clock as timebase - - Re-added stereo GG support - - Re-added configurable Feedback and Shift Register Width - - Rewrote core with various optimizations -*/ - -#include "shared.h" - -#define PSG_MCYCLES_RATIO (16 * 15) - -/* Initial state of shift register */ -#define NoiseInitialState 0x8000 - -/* Value below which PSG does not output */ -/*#define PSG_CUTOFF 0x6*/ -#define PSG_CUTOFF 0x1 - -/* original Texas Instruments TMS SN76489AN (rev. A) used in SG-1000, SC-3000H & SF-7000 computers */ -#define FB_DISCRETE 0x0006 -#define SRW_DISCRETE 15 - -/* SN76489AN clone integrated in Sega's VDP chips (315-5124, 315-5246, 315-5313, Game Gear) */ -#define FB_SEGAVDP 0x0009 -#define SRW_SEGAVDP 16 - -typedef struct -{ - /* Configuration */ - int PreAmp[4][2]; /* stereo channels pre-amplification ratio (%) */ - int NoiseFeedback; - int SRWidth; - - /* PSG registers: */ - int Registers[8]; /* Tone, vol x4 */ - int LatchedRegister; - int NoiseShiftRegister; - int NoiseFreq; /* Noise channel signal generator frequency */ - - /* Output calculation variables */ - int ToneFreqVals[4]; /* Frequency register values (counters) */ - int ToneFreqPos[4]; /* Frequency channel flip-flops */ - int Channel[4][2]; /* current amplitude of each (stereo) channel */ - int ChanOut[4][2]; /* current output value of each (stereo) channel */ - - /* Internal M-clock counter */ - unsigned long clocks; - -} SN76489_Context; - -static const uint16 PSGVolumeValues[16] = -{ - /* These values are taken from a real SMS2's output */ - /*{892,892,892,760,623,497,404,323,257,198,159,123,96,75,60,0}, */ - /* I can't remember why 892... :P some scaling I did at some point */ - /* these values are true volumes for 2dB drops at each step (multiply previous by 10^-0.1) */ - 1516,1205,957,760,603,479,381,303,240,191,152,120,96,76,60,0 -}; - -SN76489_Context SN76489; - -static blip_t* blip[2]; - -void SN76489_Init(blip_t* left, blip_t* right, int type) -{ - int i; - - blip[0] = left; - blip[1] = right; - - for (i=0; i<4; i++) - { - SN76489.PreAmp[i][0] = 100; - SN76489.PreAmp[i][1] = 100; - } - - if (type == SN_DISCRETE) - { - SN76489.NoiseFeedback = FB_DISCRETE; - SN76489.SRWidth = SRW_DISCRETE; - } - else - { - SN76489.NoiseFeedback = FB_SEGAVDP; - SN76489.SRWidth = SRW_SEGAVDP; - } -} - -void SN76489_Reset() -{ - int i; - - for(i = 0; i <= 3; i++) - { - /* Initialise PSG state */ - SN76489.Registers[2*i] = 1; /* tone freq=1 */ - SN76489.Registers[2*i+1] = 0xf; /* vol=off */ - - /* Set counters to 0 */ - SN76489.ToneFreqVals[i] = 0; - - /* Set flip-flops to 1 */ - SN76489.ToneFreqPos[i] = 1; - - /* Clear stereo channels amplitude */ - SN76489.Channel[i][0] = 0; - SN76489.Channel[i][1] = 0; - - /* Clear stereo channel outputs in delta buffer */ - SN76489.ChanOut[i][0] = 0; - SN76489.ChanOut[i][1] = 0; - } - - /* Initialise latched register index */ - SN76489.LatchedRegister = 0; - - /* Initialise noise generator */ - SN76489.NoiseShiftRegister=NoiseInitialState; - SN76489.NoiseFreq = 0x10; - - /* Reset internal M-cycle counter */ - SN76489.clocks = 0; -} - -void *SN76489_GetContextPtr(void) -{ - return (uint8 *)&SN76489; -} - -int SN76489_GetContextSize(void) -{ - return sizeof(SN76489_Context); -} - -/* Updates tone amplitude in delta buffer. Call whenever amplitude might have changed. */ -INLINE void UpdateToneAmplitude(int i, int time) -{ - int delta; - - /* left output */ - delta = (SN76489.Channel[i][0] * SN76489.ToneFreqPos[i]) - SN76489.ChanOut[i][0]; - if (delta != 0) - { - SN76489.ChanOut[i][0] += delta; - blip_add_delta_fast(blip[0], time, delta); - } - - /* right output */ - delta = (SN76489.Channel[i][1] * SN76489.ToneFreqPos[i]) - SN76489.ChanOut[i][1]; - if (delta != 0) - { - SN76489.ChanOut[i][1] += delta; - blip_add_delta_fast(blip[1], time, delta); - } -} - -/* Updates noise amplitude in delta buffer. Call whenever amplitude might have changed. */ -INLINE void UpdateNoiseAmplitude(int time) -{ - int delta; - - /* left output */ - delta = (SN76489.Channel[3][0] * ( SN76489.NoiseShiftRegister & 0x1 )) - SN76489.ChanOut[3][0]; - if (delta != 0) - { - SN76489.ChanOut[3][0] += delta; - blip_add_delta_fast(blip[0], time, delta); - } - - /* right output */ - delta = (SN76489.Channel[3][1] * ( SN76489.NoiseShiftRegister & 0x1 )) - SN76489.ChanOut[3][1]; - if (delta != 0) - { - SN76489.ChanOut[3][1] += delta; - blip_add_delta_fast(blip[1], time, delta); - } -} - -/* Runs tone channel for clock_length clocks */ -static void RunTone(int i, int clocks) -{ - int time; - - /* Update in case a register changed etc. */ - UpdateToneAmplitude(i, SN76489.clocks); - - /* Time of next transition */ - time = SN76489.ToneFreqVals[i]; - - /* Process any transitions that occur within clocks we're running */ - while (time < clocks) - { - if (SN76489.Registers[i*2]>PSG_CUTOFF) { - /* Flip the flip-flop */ - SN76489.ToneFreqPos[i] = -SN76489.ToneFreqPos[i]; - } else { - /* stuck value */ - SN76489.ToneFreqPos[i] = 1; - } - UpdateToneAmplitude(i, time); - - /* Advance to time of next transition */ - time += SN76489.Registers[i*2] * PSG_MCYCLES_RATIO; - } - - /* Update channel tone counter */ - SN76489.ToneFreqVals[i] = time; -} - -/* Runs noise channel for clock_length clocks */ -static void RunNoise(int clocks) -{ - int time; - - /* Noise channel: match to tone2 if in slave mode */ - int NoiseFreq = SN76489.NoiseFreq; - if (NoiseFreq == 0x80) - { - NoiseFreq = SN76489.Registers[2*2]; - SN76489.ToneFreqVals[3] = SN76489.ToneFreqVals[2]; - } - - /* Update in case a register changed etc. */ - UpdateNoiseAmplitude(SN76489.clocks); - - /* Time of next transition */ - time = SN76489.ToneFreqVals[3]; - - /* Process any transitions that occur within clocks we're running */ - while (time < clocks) - { - /* Flip the flip-flop */ - SN76489.ToneFreqPos[3] = -SN76489.ToneFreqPos[3]; - if (SN76489.ToneFreqPos[3] == 1) - { - /* On the positive edge of the square wave (only once per cycle) */ - int Feedback = SN76489.NoiseShiftRegister; - if ( SN76489.Registers[6] & 0x4 ) - { - /* White noise */ - /* Calculate parity of fed-back bits for feedback */ - /* Do some optimised calculations for common (known) feedback values */ - /* If two bits fed back, I can do Feedback=(nsr & fb) && (nsr & fb ^ fb) */ - /* since that's (one or more bits set) && (not all bits set) */ - Feedback = ((Feedback & SN76489.NoiseFeedback) && ((Feedback & SN76489.NoiseFeedback) ^ SN76489.NoiseFeedback)); - } - else /* Periodic noise */ - Feedback = Feedback & 1; - - SN76489.NoiseShiftRegister = (SN76489.NoiseShiftRegister >> 1) | (Feedback << (SN76489.SRWidth - 1)); - UpdateNoiseAmplitude(time); - } - - /* Advance to time of next transition */ - time += NoiseFreq * PSG_MCYCLES_RATIO; - } - - /* Update channel tone counter */ - SN76489.ToneFreqVals[3] = time; -} - -static void SN76489_RunUntil(unsigned int clocks) -{ - int i; - - /* Run noise first, since it might use current value of third tone frequency counter */ - RunNoise(clocks); - - /* Run tone channels */ - for (i=0; i<3; ++i) - { - RunTone(i, clocks); - } -} - -void SN76489_Config(unsigned int clocks, int preAmp, int boostNoise, int stereo) -{ - int i; - - /* cycle-accurate Game Gear stereo */ - if (clocks > SN76489.clocks) - { - /* Run chip until current timestamp */ - SN76489_RunUntil(clocks); - - /* Update internal M-cycle counter */ - SN76489.clocks += ((clocks - SN76489.clocks + PSG_MCYCLES_RATIO - 1) / PSG_MCYCLES_RATIO) * PSG_MCYCLES_RATIO; - } - - for (i=0; i<4; i++) - { - /* stereo channel pre-amplification */ - SN76489.PreAmp[i][0] = preAmp * ((stereo >> (i + 4)) & 1); - SN76489.PreAmp[i][1] = preAmp * ((stereo >> (i + 0)) & 1); - - /* noise channel boost */ - if (i == 3) - { - SN76489.PreAmp[3][0] = SN76489.PreAmp[3][0] << boostNoise; - SN76489.PreAmp[3][1] = SN76489.PreAmp[3][1] << boostNoise; - } - - /* update stereo channel amplitude */ - SN76489.Channel[i][0]= (PSGVolumeValues[SN76489.Registers[i*2 + 1]] * SN76489.PreAmp[i][0]) / 100; - SN76489.Channel[i][1]= (PSGVolumeValues[SN76489.Registers[i*2 + 1]] * SN76489.PreAmp[i][1]) / 100; - } -} - -void SN76489_Update(unsigned int clocks) -{ - int i; - - if (clocks > SN76489.clocks) - { - /* Run chip until current timestamp */ - SN76489_RunUntil(clocks); - - /* Update internal M-cycle counter */ - SN76489.clocks += ((clocks - SN76489.clocks + PSG_MCYCLES_RATIO - 1) / PSG_MCYCLES_RATIO) * PSG_MCYCLES_RATIO; - } - - /* Adjust internal M-cycle counter for next frame */ - SN76489.clocks -= clocks; - - /* Adjust channel time counters for new frame */ - for (i=0; i<4; ++i) - { - SN76489.ToneFreqVals[i] -= clocks; - } -} - -void SN76489_Write(unsigned int clocks, unsigned int data) -{ - unsigned int index; - - if (clocks > SN76489.clocks) - { - /* run chip until current timestamp */ - SN76489_RunUntil(clocks); - - /* update internal M-cycle counter */ - SN76489.clocks += ((clocks - SN76489.clocks + PSG_MCYCLES_RATIO - 1) / PSG_MCYCLES_RATIO) * PSG_MCYCLES_RATIO; - } - - if (data & 0x80) - { - /* latch byte %1 cc t dddd */ - SN76489.LatchedRegister = index = (data >> 4) & 0x07; - } - else - { - /* restore latched register index */ - index = SN76489.LatchedRegister; - } - - switch (index) - { - case 0: - case 2: - case 4: /* Tone Channels frequency */ - { - if (data & 0x80) - { - /* Data byte %1 cc t dddd */ - SN76489.Registers[index] = (SN76489.Registers[index] & 0x3f0) | (data & 0xf); - } - else - { - /* Data byte %0 - dddddd */ - SN76489.Registers[index] = (SN76489.Registers[index] & 0x00f) | ((data & 0x3f) << 4); - } - - /* zero frequency behaves the same as a value of 1 */ - if (SN76489.Registers[index] == 0) - { - SN76489.Registers[index] = 1; - } - break; - } - - case 1: - case 3: - case 5: /* Tone Channels attenuation */ - { - data &= 0x0f; - SN76489.Registers[index] = data; - data = PSGVolumeValues[data]; - index >>= 1; - SN76489.Channel[index][0] = (data * SN76489.PreAmp[index][0]) / 100; - SN76489.Channel[index][1] = (data * SN76489.PreAmp[index][1]) / 100; - break; - } - - case 6: /* Noise control */ - { - SN76489.Registers[6] = data & 0x0f; - - /* reset shift register */ - SN76489.NoiseShiftRegister = NoiseInitialState; - - /* set noise signal generator frequency */ - SN76489.NoiseFreq = 0x10 << (data&0x3); - break; - } - - case 7: /* Noise attenuation */ - { - data &= 0x0f; - SN76489.Registers[7] = data; - data = PSGVolumeValues[data]; - SN76489.Channel[3][0] = (data * SN76489.PreAmp[3][0]) / 100; - SN76489.Channel[3][1] = (data * SN76489.PreAmp[3][1]) / 100; - break; - } - } -} diff --git a/waterbox/gpgx/core/sound/sn76489.h b/waterbox/gpgx/core/sound/sn76489.h deleted file mode 100644 index 9e54a57684..0000000000 --- a/waterbox/gpgx/core/sound/sn76489.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - SN76489 emulation - by Maxim in 2001 and 2002 -*/ - -#ifndef _SN76489_H_ -#define _SN76489_H_ - -#include "blip_buf.h" - -#define SN_DISCRETE 0 -#define SN_INTEGRATED 1 - -/* Function prototypes */ -extern void SN76489_Init(blip_t* left, blip_t* right, int type); -extern void SN76489_Reset(void); -extern void SN76489_Config(unsigned int clocks, int preAmp, int boostNoise, int stereo); -extern void SN76489_Write(unsigned int clocks, unsigned int data); -extern void SN76489_Update(unsigned int cycles); -extern void *SN76489_GetContextPtr(void); -extern int SN76489_GetContextSize(void); - -#endif /* _SN76489_H_ */ diff --git a/waterbox/gpgx/core/sound/sound.c b/waterbox/gpgx/core/sound/sound.c deleted file mode 100644 index fbec7be3f4..0000000000 --- a/waterbox/gpgx/core/sound/sound.c +++ /dev/null @@ -1,233 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sound Hardware - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "blip_buf.h" - -/* FM output buffer (large enough to hold a whole frame at original chips rate) */ -int fm_buffer[1080 * 2]; -int fm_last[2]; -int *fm_ptr; - -/* Cycle-accurate FM samples */ -uint32 fm_cycles_ratio; -uint32 fm_cycles_start; -uint32 fm_cycles_count; - -/* YM chip function pointers */ -void (*YM_Reset)(void); -void (*YM_Update)(int *buffer, int length); -void (*YM_Write)(unsigned int a, unsigned int v); - -/* Run FM chip until required M-cycles */ -INLINE void fm_update(unsigned int cycles) -{ - if (cycles > fm_cycles_count) - { - /* number of samples to run */ - unsigned int samples = (cycles - fm_cycles_count + fm_cycles_ratio - 1) / fm_cycles_ratio; - - /* run FM chip to sample buffer */ - YM_Update(fm_ptr, samples); - - /* update FM buffer pointer */ - fm_ptr += (samples << 1); - - /* update FM cycle counter */ - fm_cycles_count += samples * fm_cycles_ratio; - } -} - -void sound_init( void ) -{ - /* Initialize FM chip */ - if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) - { - /* YM2612 */ - YM2612Init(); - YM2612Config(config.dac_bits); - YM_Reset = YM2612ResetChip; - YM_Update = YM2612Update; - YM_Write = YM2612Write; - - /* chip is running a VCLK / 144 = MCLK / 7 / 144 */ - fm_cycles_ratio = 144 * 7; - } - else - { - /* YM2413 */ - YM2413Init(); - YM_Reset = YM2413ResetChip; - YM_Update = YM2413Update; - YM_Write = YM2413Write; - - /* chip is running a ZCLK / 72 = MCLK / 15 / 72 */ - fm_cycles_ratio = 72 * 15; - } - - /* Initialize PSG chip */ - SN76489_Config(0, config.psg_preamp, config.psgBoostNoise, 0xff); -} - -void sound_reset(void) -{ - /* reset sound chips */ - YM_Reset(); - SN76489_Reset(); - - /* reset FM buffer ouput */ - fm_last[0] = fm_last[1] = 0; - - /* reset FM buffer pointer */ - fm_ptr = fm_buffer; - - /* reset FM cycle counters */ - fm_cycles_start = fm_cycles_count = 0; -} - -int sound_update(unsigned int cycles) -{ - int delta, preamp, time, l, r, *ptr; - - /* Run PSG & FM chips until end of frame */ - SN76489_Update(cycles); - fm_update(cycles); - - /* FM output pre-amplification */ - preamp = config.fm_preamp; - - /* FM frame initial timestamp */ - time = fm_cycles_start; - - /* Restore last FM outputs from previous frame */ - l = fm_last[0]; - r = fm_last[1]; - - /* FM buffer start pointer */ - ptr = fm_buffer; - - /* flush FM samples */ - if (config.hq_fm) - { - /* high-quality Band-Limited synthesis */ - do - { - /* left channel */ - delta = ((*ptr++ * preamp) / 100) - l; - l += delta; - blip_add_delta(snd.blips[0][0], time, delta); - - /* right channel */ - delta = ((*ptr++ * preamp) / 100) - r; - r += delta; - blip_add_delta(snd.blips[0][1], time, delta); - - /* increment time counter */ - time += fm_cycles_ratio; - } - while (time < cycles); - } - else - { - /* faster Linear Interpolation */ - do - { - /* left channel */ - delta = ((*ptr++ * preamp) / 100) - l; - l += delta; - blip_add_delta_fast(snd.blips[0][0], time, delta); - - /* right channel */ - delta = ((*ptr++ * preamp) / 100) - r; - r += delta; - blip_add_delta_fast(snd.blips[0][1], time, delta); - - /* increment time counter */ - time += fm_cycles_ratio; - } - while (time < cycles); - } - - /* reset FM buffer pointer */ - fm_ptr = fm_buffer; - - /* save last FM output for next frame */ - fm_last[0] = l; - fm_last[1] = r; - - /* adjust FM cycle counters for next frame */ - fm_cycles_count = fm_cycles_start = time - cycles; - - /* end of blip buffers time frame */ - blip_end_frame(snd.blips[0][0], cycles); - blip_end_frame(snd.blips[0][1], cycles); - - /* return number of available samples */ - return blip_samples_avail(snd.blips[0][0]); -} - -void fm_reset(unsigned int cycles) -{ - /* synchronize FM chip with CPU */ - fm_update(cycles); - - /* reset FM chip */ - YM_Reset(); -} - -void fm_write(unsigned int cycles, unsigned int address, unsigned int data) -{ - /* synchronize FM chip with CPU (on data port write only) */ - if (address & 1) - { - fm_update(cycles); - } - - /* write FM register */ - YM_Write(address, data); -} - -unsigned int fm_read(unsigned int cycles, unsigned int address) -{ - /* synchronize FM chip with CPU */ - fm_update(cycles); - - /* read FM status (YM2612 only) */ - return YM2612Read(); -} diff --git a/waterbox/gpgx/core/sound/sound.h b/waterbox/gpgx/core/sound/sound.h deleted file mode 100644 index e22fe7764d..0000000000 --- a/waterbox/gpgx/core/sound/sound.h +++ /dev/null @@ -1,53 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Sound Hardware - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _SOUND_H_ -#define _SOUND_H_ - -/* Function prototypes */ -extern void sound_init(void); -extern void sound_reset(void); -extern int sound_context_save(uint8 *state); -extern int sound_context_load(uint8 *state); -extern int sound_update(unsigned int cycles); -extern void fm_reset(unsigned int cycles); -extern void fm_write(unsigned int cycles, unsigned int address, unsigned int data); -extern unsigned int fm_read(unsigned int cycles, unsigned int address); - -#endif /* _SOUND_H_ */ diff --git a/waterbox/gpgx/core/sound/ym2413.c b/waterbox/gpgx/core/sound/ym2413.c deleted file mode 100644 index aa460050e7..0000000000 --- a/waterbox/gpgx/core/sound/ym2413.c +++ /dev/null @@ -1,1722 +0,0 @@ -/* -** -** File: ym2413.c - software implementation of YM2413 -** FM sound generator type OPLL -** -** Copyright (C) 2002 Jarek Burczynski -** -** Version 1.0 -** -** - -to do: - -- make sure of the sinus amplitude bits - -- make sure of the EG resolution bits (looks like the biggest - modulation index generated by the modulator is 123, 124 = no modulation) -- find proper algorithm for attack phase of EG - -- tune up instruments ROM - -- support sample replay in test mode (it is NOT as simple as setting bit 0 - in register 0x0f and using register 0x10 for sample data). - Which games use this feature ? - -*/ - -/** EkeEke (2011): removed multiple chips support, cleaned code & added FM board interface for Genesis Plus GX **/ - -#include "shared.h" -#include - -#define FREQ_SH 16 /* 16.16 fixed point (frequency calculations) */ -#define EG_SH 16 /* 16.16 fixed point (EG timing) */ -#define LFO_SH 24 /* 8.24 fixed point (LFO calculations) */ - -#define FREQ_MASK ((1<>KSR */ - UINT8 mul; /* multiple: mul_tab[ML] */ - - /* Phase Generator */ - UINT32 phase; /* frequency counter */ - UINT32 freq; /* frequency counter step */ - UINT8 fb_shift; /* feedback shift value */ - INT32 op1_out[2]; /* slot1 output for feedback */ - - /* Envelope Generator */ - UINT8 eg_type; /* percussive/nonpercussive mode */ - UINT8 state; /* phase type */ - UINT32 TL; /* total level: TL << 2 */ - INT32 TLL; /* adjusted now TL */ - INT32 volume; /* envelope counter */ - UINT32 sl; /* sustain level: sl_tab[SL] */ - - UINT8 eg_sh_dp; /* (dump state) */ - UINT8 eg_sel_dp; /* (dump state) */ - UINT8 eg_sh_ar; /* (attack state) */ - UINT8 eg_sel_ar; /* (attack state) */ - UINT8 eg_sh_dr; /* (decay state) */ - UINT8 eg_sel_dr; /* (decay state) */ - UINT8 eg_sh_rr; /* (release state for non-perc.) */ - UINT8 eg_sel_rr; /* (release state for non-perc.) */ - UINT8 eg_sh_rs; /* (release state for perc.mode) */ - UINT8 eg_sel_rs; /* (release state for perc.mode) */ - - UINT32 key; /* 0 = KEY OFF, >0 = KEY ON */ - - /* LFO */ - UINT32 AMmask; /* LFO Amplitude Modulation enable mask */ - UINT8 vib; /* LFO Phase Modulation enable flag (active high)*/ - - /* waveform select */ - unsigned int wavetable; -} YM2413_OPLL_SLOT; - -typedef struct -{ - YM2413_OPLL_SLOT SLOT[2]; - - /* phase generator state */ - UINT32 block_fnum; /* block+fnum */ - UINT32 fc; /* Freq. freqement base */ - UINT32 ksl_base; /* KeyScaleLevel Base step */ - UINT8 kcode; /* key code (for key scaling) */ - UINT8 sus; /* sus on/off (release speed in percussive mode) */ -} YM2413_OPLL_CH; - -/* chip state */ -typedef struct { - YM2413_OPLL_CH P_CH[9]; /* OPLL chips have 9 channels */ - UINT8 instvol_r[9]; /* instrument/volume (or volume/volume in percussive mode) */ - - UINT32 eg_cnt; /* global envelope generator counter */ - UINT32 eg_timer; /* global envelope generator counter works at frequency = chipclock/72 */ - UINT32 eg_timer_add; /* step of eg_timer */ - UINT32 eg_timer_overflow; /* envelope generator timer overlfows every 1 sample (on real chip) */ - - UINT8 rhythm; /* Rhythm mode */ - - /* LFO */ - UINT32 lfo_am_cnt; - UINT32 lfo_am_inc; - UINT32 lfo_pm_cnt; - UINT32 lfo_pm_inc; - - UINT32 noise_rng; /* 23 bit noise shift register */ - UINT32 noise_p; /* current noise 'phase' */ - UINT32 noise_f; /* current noise period */ - - -/* instrument settings */ -/* - 0-user instrument - 1-15 - fixed instruments - 16 -bass drum settings - 17,18 - other percussion instruments -*/ - UINT8 inst_tab[19][8]; - - UINT32 fn_tab[1024]; /* fnumber->increment counter */ - - UINT8 address; /* address register */ - UINT8 status; /* status flag */ - - double clock; /* master clock (Hz) */ - int rate; /* sampling rate (Hz) */ -} YM2413; - -/* key scale level */ -/* table is 3dB/octave, DV converts this into 6dB/octave */ -/* 0.1875 is bit 0 weight of the envelope counter (volume) expressed in the 'decibel' scale */ -#define DV (0.1875/1.0) -static const UINT32 ksl_tab[8*16]= -{ - /* OCT 0 */ - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - /* OCT 1 */ - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.750/DV, 1.125/DV, 1.500/DV, - 1.875/DV, 2.250/DV, 2.625/DV, 3.000/DV, - /* OCT 2 */ - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 1.125/DV, 1.875/DV, 2.625/DV, - 3.000/DV, 3.750/DV, 4.125/DV, 4.500/DV, - 4.875/DV, 5.250/DV, 5.625/DV, 6.000/DV, - /* OCT 3 */ - 0.000/DV, 0.000/DV, 0.000/DV, 1.875/DV, - 3.000/DV, 4.125/DV, 4.875/DV, 5.625/DV, - 6.000/DV, 6.750/DV, 7.125/DV, 7.500/DV, - 7.875/DV, 8.250/DV, 8.625/DV, 9.000/DV, - /* OCT 4 */ - 0.000/DV, 0.000/DV, 3.000/DV, 4.875/DV, - 6.000/DV, 7.125/DV, 7.875/DV, 8.625/DV, - 9.000/DV, 9.750/DV,10.125/DV,10.500/DV, - 10.875/DV,11.250/DV,11.625/DV,12.000/DV, - /* OCT 5 */ - 0.000/DV, 3.000/DV, 6.000/DV, 7.875/DV, - 9.000/DV,10.125/DV,10.875/DV,11.625/DV, - 12.000/DV,12.750/DV,13.125/DV,13.500/DV, - 13.875/DV,14.250/DV,14.625/DV,15.000/DV, - /* OCT 6 */ - 0.000/DV, 6.000/DV, 9.000/DV,10.875/DV, - 12.000/DV,13.125/DV,13.875/DV,14.625/DV, - 15.000/DV,15.750/DV,16.125/DV,16.500/DV, - 16.875/DV,17.250/DV,17.625/DV,18.000/DV, - /* OCT 7 */ - 0.000/DV, 9.000/DV,12.000/DV,13.875/DV, - 15.000/DV,16.125/DV,16.875/DV,17.625/DV, - 18.000/DV,18.750/DV,19.125/DV,19.500/DV, - 19.875/DV,20.250/DV,20.625/DV,21.000/DV -}; -#undef DV - -/* sustain level table (3dB per step) */ -/* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,45 (dB)*/ -#define SC(db) (UINT32) ( db * (1.0/ENV_STEP) ) -static const UINT32 sl_tab[16]={ - SC( 0),SC( 1),SC( 2),SC(3 ),SC(4 ),SC(5 ),SC(6 ),SC( 7), - SC( 8),SC( 9),SC(10),SC(11),SC(12),SC(13),SC(14),SC(15) -}; -#undef SC - - -#define RATE_STEPS (8) -static const unsigned char eg_inc[15*RATE_STEPS]={ - -/*cycle:0 1 2 3 4 5 6 7*/ - -/* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..12 0 (increment by 0 or 1) */ -/* 1 */ 0,1, 0,1, 1,1, 0,1, /* rates 00..12 1 */ -/* 2 */ 0,1, 1,1, 0,1, 1,1, /* rates 00..12 2 */ -/* 3 */ 0,1, 1,1, 1,1, 1,1, /* rates 00..12 3 */ - -/* 4 */ 1,1, 1,1, 1,1, 1,1, /* rate 13 0 (increment by 1) */ -/* 5 */ 1,1, 1,2, 1,1, 1,2, /* rate 13 1 */ -/* 6 */ 1,2, 1,2, 1,2, 1,2, /* rate 13 2 */ -/* 7 */ 1,2, 2,2, 1,2, 2,2, /* rate 13 3 */ - -/* 8 */ 2,2, 2,2, 2,2, 2,2, /* rate 14 0 (increment by 2) */ -/* 9 */ 2,2, 2,4, 2,2, 2,4, /* rate 14 1 */ -/*10 */ 2,4, 2,4, 2,4, 2,4, /* rate 14 2 */ -/*11 */ 2,4, 4,4, 2,4, 4,4, /* rate 14 3 */ - -/*12 */ 4,4, 4,4, 4,4, 4,4, /* rates 15 0, 15 1, 15 2, 15 3 (increment by 4) */ -/*13 */ 8,8, 8,8, 8,8, 8,8, /* rates 15 2, 15 3 for attack */ -/*14 */ 0,0, 0,0, 0,0, 0,0, /* infinity rates for attack and decay(s) */ -}; - - -#define O(a) (a*RATE_STEPS) - -/*note that there is no O(13) in this table - it's directly in the code */ -static const unsigned char eg_rate_select[16+64+16]={ /* Envelope Generator rates (16 + 64 rates + 16 RKS) */ -/* 16 infinite time rates */ -O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14), -O(14),O(14),O(14),O(14),O(14),O(14),O(14),O(14), - -/* rates 00-12 */ -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), - -/* rate 13 */ -O( 4),O( 5),O( 6),O( 7), - -/* rate 14 */ -O( 8),O( 9),O(10),O(11), - -/* rate 15 */ -O(12),O(12),O(12),O(12), - -/* 16 dummy rates (same as 15 3) */ -O(12),O(12),O(12),O(12),O(12),O(12),O(12),O(12), -O(12),O(12),O(12),O(12),O(12),O(12),O(12),O(12), - -}; -#undef O - -/*rate 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 */ -/*shift 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0 */ -/*mask 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0 */ - -#define O(a) (a*1) -static const unsigned char eg_rate_shift[16+64+16]={ /* Envelope Generator counter shifts (16 + 64 rates + 16 RKS) */ -/* 16 infinite time rates */ -O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), -O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), - -/* rates 00-12 */ -O(13),O(13),O(13),O(13), -O(12),O(12),O(12),O(12), -O(11),O(11),O(11),O(11), -O(10),O(10),O(10),O(10), -O( 9),O( 9),O( 9),O( 9), -O( 8),O( 8),O( 8),O( 8), -O( 7),O( 7),O( 7),O( 7), -O( 6),O( 6),O( 6),O( 6), -O( 5),O( 5),O( 5),O( 5), -O( 4),O( 4),O( 4),O( 4), -O( 3),O( 3),O( 3),O( 3), -O( 2),O( 2),O( 2),O( 2), -O( 1),O( 1),O( 1),O( 1), - -/* rate 13 */ -O( 0),O( 0),O( 0),O( 0), - -/* rate 14 */ -O( 0),O( 0),O( 0),O( 0), - -/* rate 15 */ -O( 0),O( 0),O( 0),O( 0), - -/* 16 dummy rates (same as 15 3) */ -O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), -O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), - -}; -#undef O - - -/* multiple table */ -#define ML 2 -static const UINT8 mul_tab[16]= { -/* 1/2, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,10,12,12,15,15 */ - 0.50*ML, 1.00*ML, 2.00*ML, 3.00*ML, 4.00*ML, 5.00*ML, 6.00*ML, 7.00*ML, - 8.00*ML, 9.00*ML,10.00*ML,10.00*ML,12.00*ML,12.00*ML,15.00*ML,15.00*ML -}; -#undef ML - -/* TL_TAB_LEN is calculated as: -* 11 - sinus amplitude bits (Y axis) -* 2 - sinus sign bit (Y axis) -* TL_RES_LEN - sinus resolution (X axis) -*/ -#define TL_TAB_LEN (11*2*TL_RES_LEN) -ECL_SEALED static signed int tl_tab[TL_TAB_LEN]; - -#define ENV_QUIET (TL_TAB_LEN>>5) - -/* sin waveform table in 'decibel' scale */ -/* two waveforms on OPLL type chips */ -static unsigned int sin_tab[SIN_LEN * 2]; - - -/* LFO Amplitude Modulation table (verified on real YM3812) - 27 output levels (triangle waveform); 1 level takes one of: 192, 256 or 448 samples - - Length: 210 elements. - - Each of the elements has to be repeated - exactly 64 times (on 64 consecutive samples). - The whole table takes: 64 * 210 = 13440 samples. - -We use data>>1, until we find what it really is on real chip... - -*/ - -#define LFO_AM_TAB_ELEMENTS 210 - -static const UINT8 lfo_am_table[LFO_AM_TAB_ELEMENTS] = { -0,0,0,0,0,0,0, -1,1,1,1, -2,2,2,2, -3,3,3,3, -4,4,4,4, -5,5,5,5, -6,6,6,6, -7,7,7,7, -8,8,8,8, -9,9,9,9, -10,10,10,10, -11,11,11,11, -12,12,12,12, -13,13,13,13, -14,14,14,14, -15,15,15,15, -16,16,16,16, -17,17,17,17, -18,18,18,18, -19,19,19,19, -20,20,20,20, -21,21,21,21, -22,22,22,22, -23,23,23,23, -24,24,24,24, -25,25,25,25, -26,26,26, -25,25,25,25, -24,24,24,24, -23,23,23,23, -22,22,22,22, -21,21,21,21, -20,20,20,20, -19,19,19,19, -18,18,18,18, -17,17,17,17, -16,16,16,16, -15,15,15,15, -14,14,14,14, -13,13,13,13, -12,12,12,12, -11,11,11,11, -10,10,10,10, -9,9,9,9, -8,8,8,8, -7,7,7,7, -6,6,6,6, -5,5,5,5, -4,4,4,4, -3,3,3,3, -2,2,2,2, -1,1,1,1 -}; - -/* LFO Phase Modulation table (verified on real YM2413) */ -static const INT8 lfo_pm_table[8*8] = { - -/* FNUM2/FNUM = 0 00xxxxxx (0x0000) */ -0, 0, 0, 0, 0, 0, 0, 0, - -/* FNUM2/FNUM = 0 01xxxxxx (0x0040) */ -1, 0, 0, 0,-1, 0, 0, 0, - -/* FNUM2/FNUM = 0 10xxxxxx (0x0080) */ -2, 1, 0,-1,-2,-1, 0, 1, - -/* FNUM2/FNUM = 0 11xxxxxx (0x00C0) */ -3, 1, 0,-1,-3,-1, 0, 1, - -/* FNUM2/FNUM = 1 00xxxxxx (0x0100) */ -4, 2, 0,-2,-4,-2, 0, 2, - -/* FNUM2/FNUM = 1 01xxxxxx (0x0140) */ -5, 2, 0,-2,-5,-2, 0, 2, - -/* FNUM2/FNUM = 1 10xxxxxx (0x0180) */ -6, 3, 0,-3,-6,-3, 0, 3, - -/* FNUM2/FNUM = 1 11xxxxxx (0x01C0) */ -7, 3, 0,-3,-7,-3, 0, 3, -}; - - -/* This is not 100% perfect yet but very close */ -/* - - multi parameters are 100% correct (instruments and drums) - - LFO PM and AM enable are 100% correct - - waveform DC and DM select are 100% correct -*/ - -static unsigned char table[19][8] = { -/* MULT MULT modTL DcDmFb AR/DR AR/DR SL/RR SL/RR */ -/* 0 1 2 3 4 5 6 7 */ - {0x49, 0x4c, 0x4c, 0x12, 0x00, 0x00, 0x00, 0x00 }, /* 0 */ - - {0x61, 0x61, 0x1e, 0x17, 0xf0, 0x78, 0x00, 0x17 }, /* 1 */ - {0x13, 0x41, 0x1e, 0x0d, 0xd7, 0xf7, 0x13, 0x13 }, /* 2 */ - {0x13, 0x01, 0x99, 0x04, 0xf2, 0xf4, 0x11, 0x23 }, /* 3 */ - {0x21, 0x61, 0x1b, 0x07, 0xaf, 0x64, 0x40, 0x27 }, /* 4 */ - -/*{0x22, 0x21, 0x1e, 0x09, 0xf0, 0x76, 0x08, 0x28 }, */ /* 5 */ - {0x22, 0x21, 0x1e, 0x06, 0xf0, 0x75, 0x08, 0x18 }, /* 5 */ - -/*{0x31, 0x22, 0x16, 0x09, 0x90, 0x7f, 0x00, 0x08 }, */ /* 6 */ - {0x31, 0x22, 0x16, 0x05, 0x90, 0x71, 0x00, 0x13 }, /* 6 */ - - {0x21, 0x61, 0x1d, 0x07, 0x82, 0x80, 0x10, 0x17 }, /* 7 */ - {0x23, 0x21, 0x2d, 0x16, 0xc0, 0x70, 0x07, 0x07 }, /* 8 */ - {0x61, 0x61, 0x1b, 0x06, 0x64, 0x65, 0x10, 0x17 }, /* 9 */ - -/* {0x61, 0x61, 0x0c, 0x08, 0x85, 0xa0, 0x79, 0x07 }, */ /* A */ - {0x61, 0x61, 0x0c, 0x18, 0x85, 0xf0, 0x70, 0x07 }, /* A */ - - {0x23, 0x01, 0x07, 0x11, 0xf0, 0xa4, 0x00, 0x22 }, /* B */ - {0x97, 0xc1, 0x24, 0x07, 0xff, 0xf8, 0x22, 0x12 }, /* C */ - -/* {0x61, 0x10, 0x0c, 0x08, 0xf2, 0xc4, 0x40, 0xc8 }, */ /* D */ - {0x61, 0x10, 0x0c, 0x05, 0xf2, 0xf4, 0x40, 0x44 }, /* D */ - - {0x01, 0x01, 0x55, 0x03, 0xf3, 0x92, 0xf3, 0xf3 }, /* E */ - {0x61, 0x41, 0x89, 0x03, 0xf1, 0xf4, 0xf0, 0x13 }, /* F */ - -/* drum instruments definitions */ -/* MULTI MULTI modTL xxx AR/DR AR/DR SL/RR SL/RR */ -/* 0 1 2 3 4 5 6 7 */ - {0x01, 0x01, 0x16, 0x00, 0xfd, 0xf8, 0x2f, 0x6d },/* BD(multi verified, modTL verified, mod env - verified(close), carr. env verifed) */ - {0x01, 0x01, 0x00, 0x00, 0xd8, 0xd8, 0xf9, 0xf8 },/* HH(multi verified), SD(multi not used) */ - {0x05, 0x01, 0x00, 0x00, 0xf8, 0xba, 0x49, 0x55 },/* TOM(multi,env verified), TOP CYM(multi verified, env verified) */ -}; - -static signed int output[2]; - -static UINT32 LFO_AM; -static INT32 LFO_PM; - -/* emulated chip */ -YM2413 ym2413; - -/* advance LFO to next sample */ -INLINE void advance_lfo(void) -{ - /* LFO */ - ym2413.lfo_am_cnt += ym2413.lfo_am_inc; - if (ym2413.lfo_am_cnt >= (LFO_AM_TAB_ELEMENTS<> LFO_SH ] >> 1; - - ym2413.lfo_pm_cnt += ym2413.lfo_pm_inc; - LFO_PM = (ym2413.lfo_pm_cnt>>LFO_SH) & 7; -} - -/* advance to next sample */ -INLINE void advance(void) -{ - YM2413_OPLL_CH *CH; - YM2413_OPLL_SLOT *op; - unsigned int i; - - /* Envelope Generator */ - ym2413.eg_timer += ym2413.eg_timer_add; - - while (ym2413.eg_timer >= ym2413.eg_timer_overflow) - { - ym2413.eg_timer -= ym2413.eg_timer_overflow; - - ym2413.eg_cnt++; - - for (i=0; i<9*2; i++) - { - CH = &ym2413.P_CH[i>>1]; - - op = &CH->SLOT[i&1]; - - switch(op->state) - { - case EG_DMP: /* dump phase */ - /*dump phase is performed by both operators in each channel*/ - /*when CARRIER envelope gets down to zero level, - ** phases in BOTH opearators are reset (at the same time ?) - */ - if ( !(ym2413.eg_cnt & ((1<eg_sh_dp)-1) ) ) - { - op->volume += eg_inc[op->eg_sel_dp + ((ym2413.eg_cnt>>op->eg_sh_dp)&7)]; - - if ( op->volume >= MAX_ATT_INDEX ) - { - op->volume = MAX_ATT_INDEX; - op->state = EG_ATT; - /* restart Phase Generator */ - op->phase = 0; - } - } - break; - - case EG_ATT: /* attack phase */ - if ( !(ym2413.eg_cnt & ((1<eg_sh_ar)-1) ) ) - { - op->volume += (~op->volume * - (eg_inc[op->eg_sel_ar + ((ym2413.eg_cnt>>op->eg_sh_ar)&7)]) - ) >>2; - - if (op->volume <= MIN_ATT_INDEX) - { - op->volume = MIN_ATT_INDEX; - op->state = EG_DEC; - } - } - break; - - case EG_DEC: /* decay phase */ - if ( !(ym2413.eg_cnt & ((1<eg_sh_dr)-1) ) ) - { - op->volume += eg_inc[op->eg_sel_dr + ((ym2413.eg_cnt>>op->eg_sh_dr)&7)]; - - if ( op->volume >= op->sl ) - op->state = EG_SUS; - } - break; - - case EG_SUS: /* sustain phase */ - /* this is important behaviour: - one can change percusive/non-percussive modes on the fly and - the chip will remain in sustain phase - verified on real YM3812 */ - - if(op->eg_type) /* non-percussive mode (sustained tone) */ - { - /* do nothing */ - } - else /* percussive mode */ - { - /* during sustain phase chip adds Release Rate (in percussive mode) */ - if ( !(ym2413.eg_cnt & ((1<eg_sh_rr)-1) ) ) - { - op->volume += eg_inc[op->eg_sel_rr + ((ym2413.eg_cnt>>op->eg_sh_rr)&7)]; - - if ( op->volume >= MAX_ATT_INDEX ) - op->volume = MAX_ATT_INDEX; - } - /* else do nothing in sustain phase */ - } - break; - - case EG_REL: /* release phase */ - /* exclude modulators in melody channels from performing anything in this mode*/ - /* allowed are only carriers in melody mode and rhythm slots in rhythm mode */ - - /*This table shows which operators and on what conditions are allowed to perform EG_REL: - (a) - always perform EG_REL - (n) - never perform EG_REL - (r) - perform EG_REL in Rhythm mode ONLY - 0: 0 (n), 1 (a) - 1: 2 (n), 3 (a) - 2: 4 (n), 5 (a) - 3: 6 (n), 7 (a) - 4: 8 (n), 9 (a) - 5: 10(n), 11(a) - 6: 12(r), 13(a) - 7: 14(r), 15(a) - 8: 16(r), 17(a) - */ - if ( (i&1) || ((ym2413.rhythm&0x20) && (i>=12)) )/* exclude modulators */ - { - if(op->eg_type) /* non-percussive mode (sustained tone) */ - /*this is correct: use RR when SUS = OFF*/ - /*and use RS when SUS = ON*/ - { - if (CH->sus) - { - if ( !(ym2413.eg_cnt & ((1<eg_sh_rs)-1) ) ) - { - op->volume += eg_inc[op->eg_sel_rs + ((ym2413.eg_cnt>>op->eg_sh_rs)&7)]; - if ( op->volume >= MAX_ATT_INDEX ) - { - op->volume = MAX_ATT_INDEX; - op->state = EG_OFF; - } - } - } - else - { - if ( !(ym2413.eg_cnt & ((1<eg_sh_rr)-1) ) ) - { - op->volume += eg_inc[op->eg_sel_rr + ((ym2413.eg_cnt>>op->eg_sh_rr)&7)]; - if ( op->volume >= MAX_ATT_INDEX ) - { - op->volume = MAX_ATT_INDEX; - op->state = EG_OFF; - } - } - } - } - else /* percussive mode */ - { - if ( !(ym2413.eg_cnt & ((1<eg_sh_rs)-1) ) ) - { - op->volume += eg_inc[op->eg_sel_rs + ((ym2413.eg_cnt>>op->eg_sh_rs)&7)]; - if ( op->volume >= MAX_ATT_INDEX ) - { - op->volume = MAX_ATT_INDEX; - op->state = EG_OFF; - } - } - } - } - break; - - default: - break; - } - } - } - - for (i=0; i<9*2; i++) - { - CH = &ym2413.P_CH[i/2]; - op = &CH->SLOT[i&1]; - - /* Phase Generator */ - if(op->vib) - { - UINT8 block; - - unsigned int fnum_lfo = 8*((CH->block_fnum&0x01c0) >> 6); - unsigned int block_fnum = CH->block_fnum * 2; - signed int lfo_fn_table_index_offset = lfo_pm_table[LFO_PM + fnum_lfo ]; - - if (lfo_fn_table_index_offset) /* LFO phase modulation active */ - { - block_fnum += lfo_fn_table_index_offset; - block = (block_fnum&0x1c00) >> 10; - op->phase += (ym2413.fn_tab[block_fnum&0x03ff] >> (7-block)) * op->mul; - } - else /* LFO phase modulation = zero */ - { - op->phase += op->freq; - } - } - else /* LFO phase modulation disabled for this operator */ - { - op->phase += op->freq; - } - } - - /* The Noise Generator of the YM3812 is 23-bit shift register. - * Period is equal to 2^23-2 samples. - * Register works at sampling frequency of the chip, so output - * can change on every sample. - * - * Output of the register and input to the bit 22 is: - * bit0 XOR bit14 XOR bit15 XOR bit22 - * - * Simply use bit 22 as the noise output. - */ - - ym2413.noise_p += ym2413.noise_f; - i = ym2413.noise_p >> FREQ_SH; /* number of events (shifts of the shift register) */ - ym2413.noise_p &= FREQ_MASK; - while (i) - { - /* - UINT32 j; - j = ( (chip->noise_rng) ^ (chip->noise_rng>>14) ^ (chip->noise_rng>>15) ^ (chip->noise_rng>>22) ) & 1; - chip->noise_rng = (j<<22) | (chip->noise_rng>>1); - */ - - /* - Instead of doing all the logic operations above, we - use a trick here (and use bit 0 as the noise output). - The difference is only that the noise bit changes one - step ahead. This doesn't matter since we don't know - what is real state of the noise_rng after the reset. - */ - - if (ym2413.noise_rng & 1) ym2413.noise_rng ^= 0x800302; - ym2413.noise_rng >>= 1; - - i--; - } -} - - -INLINE signed int op_calc(UINT32 phase, unsigned int env, signed int pm, unsigned int wave_tab) -{ - UINT32 p = (env<<5) + sin_tab[wave_tab + ((((signed int)((phase & ~FREQ_MASK) + (pm<<17))) >> FREQ_SH ) & SIN_MASK) ]; - - if (p >= TL_TAB_LEN) - return 0; - return tl_tab[p]; -} - -INLINE signed int op_calc1(UINT32 phase, unsigned int env, signed int pm, unsigned int wave_tab) -{ - UINT32 p = (env<<5) + sin_tab[wave_tab + ((((signed int)((phase & ~FREQ_MASK) + pm)) >> FREQ_SH ) & SIN_MASK) ]; - - if (p >= TL_TAB_LEN) - return 0; - return tl_tab[p]; -} - -#define volume_calc(OP) ((OP)->TLL + ((UINT32)(OP)->volume) + (LFO_AM & (OP)->AMmask)) - -/* calculate output */ -INLINE void chan_calc( YM2413_OPLL_CH *CH ) -{ - YM2413_OPLL_SLOT *SLOT; - unsigned int env; - signed int out; - signed int phase_modulation; /* phase modulation input (SLOT 2) */ - - /* SLOT 1 */ - SLOT = &CH->SLOT[SLOT1]; - env = volume_calc(SLOT); - out = SLOT->op1_out[0] + SLOT->op1_out[1]; - - SLOT->op1_out[0] = SLOT->op1_out[1]; - phase_modulation = SLOT->op1_out[0]; - - SLOT->op1_out[1] = 0; - - if( env < ENV_QUIET ) - { - if (!SLOT->fb_shift) - out = 0; - SLOT->op1_out[1] = op_calc1(SLOT->phase, env, (out<fb_shift), SLOT->wavetable ); - } - - /* SLOT 2 */ - - SLOT++; - env = volume_calc(SLOT); - if( env < ENV_QUIET ) - { - output[0] += op_calc(SLOT->phase, env, phase_modulation, SLOT->wavetable); - } -} - -/* - operators used in the rhythm sounds generation process: - - Envelope Generator: - -channel operator register number Bass High Snare Tom Top -/ slot number TL ARDR SLRR Wave Drum Hat Drum Tom Cymbal - 6 / 0 12 50 70 90 f0 + - 6 / 1 15 53 73 93 f3 + - 7 / 0 13 51 71 91 f1 + - 7 / 1 16 54 74 94 f4 + - 8 / 0 14 52 72 92 f2 + - 8 / 1 17 55 75 95 f5 + - - Phase Generator: - -channel operator register number Bass High Snare Tom Top -/ slot number MULTIPLE Drum Hat Drum Tom Cymbal - 6 / 0 12 30 + - 6 / 1 15 33 + - 7 / 0 13 31 + + + - 7 / 1 16 34 ----- n o t u s e d ----- - 8 / 0 14 32 + - 8 / 1 17 35 + + - -channel operator register number Bass High Snare Tom Top -number number BLK/FNUM2 FNUM Drum Hat Drum Tom Cymbal - 6 12,15 B6 A6 + - - 7 13,16 B7 A7 + + + - - 8 14,17 B8 A8 + + + - -*/ - -/* calculate rhythm */ - -INLINE void rhythm_calc( YM2413_OPLL_CH *CH, unsigned int noise ) -{ - YM2413_OPLL_SLOT *SLOT; - signed int out; - unsigned int env; - signed int phase_modulation; /* phase modulation input (SLOT 2) */ - - - /* Bass Drum (verified on real YM3812): - - depends on the channel 6 'connect' register: - when connect = 0 it works the same as in normal (non-rhythm) mode (op1->op2->out) - when connect = 1 _only_ operator 2 is present on output (op2->out), operator 1 is ignored - - output sample always is multiplied by 2 - */ - - - /* SLOT 1 */ - SLOT = &CH[6].SLOT[SLOT1]; - env = volume_calc(SLOT); - - out = SLOT->op1_out[0] + SLOT->op1_out[1]; - SLOT->op1_out[0] = SLOT->op1_out[1]; - - phase_modulation = SLOT->op1_out[0]; - - SLOT->op1_out[1] = 0; - if( env < ENV_QUIET ) - { - if (!SLOT->fb_shift) - out = 0; - SLOT->op1_out[1] = op_calc1(SLOT->phase, env, (out<fb_shift), SLOT->wavetable ); - } - - /* SLOT 2 */ - SLOT++; - env = volume_calc(SLOT); - if( env < ENV_QUIET ) - output[1] += op_calc(SLOT->phase, env, phase_modulation, SLOT->wavetable); - - - /* Phase generation is based on: */ - /* HH (13) channel 7->slot 1 combined with channel 8->slot 2 (same combination as TOP CYMBAL but different output phases) */ - /* SD (16) channel 7->slot 1 */ - /* TOM (14) channel 8->slot 1 */ - /* TOP (17) channel 7->slot 1 combined with channel 8->slot 2 (same combination as HIGH HAT but different output phases) */ - - /* Envelope generation based on: */ - /* HH channel 7->slot1 */ - /* SD channel 7->slot2 */ - /* TOM channel 8->slot1 */ - /* TOP channel 8->slot2 */ - - - /* The following formulas can be well optimized. - I leave them in direct form for now (in case I've missed something). - */ - - /* High Hat (verified on real YM3812) */ - env = volume_calc(&CH[7].SLOT[SLOT1]); - if( env < ENV_QUIET ) - { - - /* high hat phase generation: - phase = d0 or 234 (based on frequency only) - phase = 34 or 2d0 (based on noise) - */ - - /* base frequency derived from operator 1 in channel 7 */ - unsigned char bit7 = ((CH[7].SLOT[SLOT1].phase>>FREQ_SH)>>7)&1; - unsigned char bit3 = ((CH[7].SLOT[SLOT1].phase>>FREQ_SH)>>3)&1; - unsigned char bit2 = ((CH[7].SLOT[SLOT1].phase>>FREQ_SH)>>2)&1; - - unsigned char res1 = (bit2 ^ bit7) | bit3; - - /* when res1 = 0 phase = 0x000 | 0xd0; */ - /* when res1 = 1 phase = 0x200 | (0xd0>>2); */ - UINT32 phase = res1 ? (0x200|(0xd0>>2)) : 0xd0; - - /* enable gate based on frequency of operator 2 in channel 8 */ - unsigned char bit5e= ((CH[8].SLOT[SLOT2].phase>>FREQ_SH)>>5)&1; - unsigned char bit3e= ((CH[8].SLOT[SLOT2].phase>>FREQ_SH)>>3)&1; - - unsigned char res2 = (bit3e | bit5e); - - /* when res2 = 0 pass the phase from calculation above (res1); */ - /* when res2 = 1 phase = 0x200 | (0xd0>>2); */ - if (res2) - phase = (0x200|(0xd0>>2)); - - - /* when phase & 0x200 is set and noise=1 then phase = 0x200|0xd0 */ - /* when phase & 0x200 is set and noise=0 then phase = 0x200|(0xd0>>2), ie no change */ - if (phase&0x200) - { - if (noise) - phase = 0x200|0xd0; - } - else - /* when phase & 0x200 is clear and noise=1 then phase = 0xd0>>2 */ - /* when phase & 0x200 is clear and noise=0 then phase = 0xd0, ie no change */ - { - if (noise) - phase = 0xd0>>2; - } - - output[1] += op_calc(phase<>FREQ_SH)>>8)&1; - - /* when bit8 = 0 phase = 0x100; */ - /* when bit8 = 1 phase = 0x200; */ - UINT32 phase = bit8 ? 0x200 : 0x100; - - /* Noise bit XOR'es phase by 0x100 */ - /* when noisebit = 0 pass the phase from calculation above */ - /* when noisebit = 1 phase ^= 0x100; */ - /* in other words: phase ^= (noisebit<<8); */ - if (noise) - phase ^= 0x100; - - output[1] += op_calc(phase<>FREQ_SH)>>7)&1; - unsigned char bit3 = ((CH[7].SLOT[SLOT1].phase>>FREQ_SH)>>3)&1; - unsigned char bit2 = ((CH[7].SLOT[SLOT1].phase>>FREQ_SH)>>2)&1; - - unsigned char res1 = (bit2 ^ bit7) | bit3; - - /* when res1 = 0 phase = 0x000 | 0x100; */ - /* when res1 = 1 phase = 0x200 | 0x100; */ - UINT32 phase = res1 ? 0x300 : 0x100; - - /* enable gate based on frequency of operator 2 in channel 8 */ - unsigned char bit5e= ((CH[8].SLOT[SLOT2].phase>>FREQ_SH)>>5)&1; - unsigned char bit3e= ((CH[8].SLOT[SLOT2].phase>>FREQ_SH)>>3)&1; - - unsigned char res2 = (bit3e | bit5e); - /* when res2 = 0 pass the phase from calculation above (res1); */ - /* when res2 = 1 phase = 0x200 | 0x100; */ - if (res2) - phase = 0x300; - - output[1] += op_calc(phase<>= 4; /* 12 bits here */ - if (n&1) /* round to nearest */ - n = (n>>1)+1; - else - n = n>>1; - /* 11 bits here (rounded) */ - tl_tab[ x*2 + 0 ] = n; - tl_tab[ x*2 + 1 ] = -tl_tab[ x*2 + 0 ]; - - for (i=1; i<11; i++) - { - tl_tab[ x*2+0 + i*2*TL_RES_LEN ] = tl_tab[ x*2+0 ]>>i; - tl_tab[ x*2+1 + i*2*TL_RES_LEN ] = -tl_tab[ x*2+0 + i*2*TL_RES_LEN ]; - } - } - - for (i=0; i0.0) - o = 8*log(1.0/m)/log(2); /* convert to 'decibels' */ - else - o = 8*log(-1.0/m)/log(2); /* convert to 'decibels' */ - - o = o / (ENV_STEP/4); - - n = (int)(2.0*o); - if (n&1) /* round to nearest */ - n = (n>>1)+1; - else - n = n>>1; - - /* waveform 0: standard sinus */ - sin_tab[ i ] = n*2 + (m>=0.0? 0: 1 ); - - /* waveform 1: __ __ */ - /* / \____/ \____*/ - /* output only first half of the sinus waveform (positive one) */ - if (i & (1<<(SIN_BITS-1)) ) - sin_tab[1*SIN_LEN+i] = TL_TAB_LEN; - else - sin_tab[1*SIN_LEN+i] = sin_tab[i]; - } - - return 1; -} - - -static void OPLL_initalize(void) -{ - int i; - - /* YM2413 always running at original frequency */ - double freqbase = 1.0; - - /* make fnumber -> increment counter table */ - for( i = 0 ; i < 1024; i++ ) - { - /* OPLL (YM2413) phase increment counter = 18bit */ - ym2413.fn_tab[i] = (UINT32)( (double)i * 64 * freqbase * (1<<(FREQ_SH-10)) ); /* -10 because chip works with 10.10 fixed point, while we use 16.16 */ - } - - /* Amplitude modulation: 27 output levels (triangle waveform); 1 level takes one of: 192, 256 or 448 samples */ - /* One entry from LFO_AM_TABLE lasts for 64 samples */ - ym2413.lfo_am_inc = (1.0 / 64.0 ) * (1<key ) - { - /* do NOT restart Phase Generator (verified on real YM2413)*/ - /* phase -> Dump */ - SLOT->state = EG_DMP; - } - SLOT->key |= key_set; -} - -INLINE void KEY_OFF(YM2413_OPLL_SLOT *SLOT, UINT32 key_clr) -{ - if( SLOT->key ) - { - SLOT->key &= key_clr; - - if( !SLOT->key ) - { - /* phase -> Release */ - if (SLOT->state>EG_REL) - SLOT->state = EG_REL; - } - } -} - -/* update phase increment counter of operator (also update the EG rates if necessary) */ -INLINE void CALC_FCSLOT(YM2413_OPLL_CH *CH,YM2413_OPLL_SLOT *SLOT) -{ - int ksr; - UINT32 SLOT_rs; - UINT32 SLOT_dp; - - /* (frequency) phase increment counter */ - SLOT->freq = CH->fc * SLOT->mul; - ksr = CH->kcode >> SLOT->KSR; - - if( SLOT->ksr != ksr ) - { - SLOT->ksr = ksr; - - /* calculate envelope generator rates */ - if ((SLOT->ar + SLOT->ksr) < 16+62) - { - SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ]; - SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ]; - } - else - { - SLOT->eg_sh_ar = 0; - SLOT->eg_sel_ar = 13*RATE_STEPS; - } - SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ]; - SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ]; - SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ]; - SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ]; - - } - - if (CH->sus) - SLOT_rs = 16 + (5<<2); - else - SLOT_rs = 16 + (7<<2); - - SLOT->eg_sh_rs = eg_rate_shift [SLOT_rs + SLOT->ksr ]; - SLOT->eg_sel_rs = eg_rate_select[SLOT_rs + SLOT->ksr ]; - - SLOT_dp = 16 + (13<<2); - SLOT->eg_sh_dp = eg_rate_shift [SLOT_dp + SLOT->ksr ]; - SLOT->eg_sel_dp = eg_rate_select[SLOT_dp + SLOT->ksr ]; -} - -/* set multi,am,vib,EG-TYP,KSR,mul */ -INLINE void set_mul(int slot,int v) -{ - YM2413_OPLL_CH *CH = &ym2413.P_CH[slot/2]; - YM2413_OPLL_SLOT *SLOT = &CH->SLOT[slot&1]; - - SLOT->mul = mul_tab[v&0x0f]; - SLOT->KSR = (v&0x10) ? 0 : 2; - SLOT->eg_type = (v&0x20); - SLOT->vib = (v&0x40); - SLOT->AMmask = (v&0x80) ? ~0 : 0; - CALC_FCSLOT(CH,SLOT); -} - -/* set ksl, tl */ -INLINE void set_ksl_tl(int chan,int v) -{ - YM2413_OPLL_CH *CH = &ym2413.P_CH[chan]; - /* modulator */ - YM2413_OPLL_SLOT *SLOT = &CH->SLOT[SLOT1]; - - int ksl = v>>6; /* 0 / 1.5 / 3.0 / 6.0 dB/OCT */ - - SLOT->ksl = ksl ? 3-ksl : 31; - SLOT->TL = (v&0x3f)<<(ENV_BITS-2-7); /* 7 bits TL (bit 6 = always 0) */ - SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); -} - -/* set ksl , waveforms, feedback */ -INLINE void set_ksl_wave_fb(int chan,int v) -{ - YM2413_OPLL_CH *CH = &ym2413.P_CH[chan]; - /* modulator */ - YM2413_OPLL_SLOT *SLOT = &CH->SLOT[SLOT1]; - SLOT->wavetable = ((v&0x08)>>3)*SIN_LEN; - SLOT->fb_shift = (v&7) ? (v&7) + 8 : 0; - - /*carrier*/ - SLOT = &CH->SLOT[SLOT2]; - SLOT->wavetable = ((v&0x10)>>4)*SIN_LEN; - v >>= 6; /* 0 / 1.5 / 3.0 / 6.0 dB/OCT */ - SLOT->ksl = v ? 3-v : 31; - SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); -} - -/* set attack rate & decay rate */ -INLINE void set_ar_dr(int slot,int v) -{ - YM2413_OPLL_CH *CH = &ym2413.P_CH[slot/2]; - YM2413_OPLL_SLOT *SLOT = &CH->SLOT[slot&1]; - - SLOT->ar = (v>>4) ? 16 + ((v>>4) <<2) : 0; - - if ((SLOT->ar + SLOT->ksr) < 16+62) - { - SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ]; - SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ]; - } - else - { - SLOT->eg_sh_ar = 0; - SLOT->eg_sel_ar = 13*RATE_STEPS; - } - - SLOT->dr = (v&0x0f)? 16 + ((v&0x0f)<<2) : 0; - SLOT->eg_sh_dr = eg_rate_shift [SLOT->dr + SLOT->ksr ]; - SLOT->eg_sel_dr = eg_rate_select[SLOT->dr + SLOT->ksr ]; -} - -/* set sustain level & release rate */ -INLINE void set_sl_rr(int slot,int v) -{ - YM2413_OPLL_CH *CH = &ym2413.P_CH[slot/2]; - YM2413_OPLL_SLOT *SLOT = &CH->SLOT[slot&1]; - - SLOT->sl = sl_tab[ v>>4 ]; - - SLOT->rr = (v&0x0f)? 16 + ((v&0x0f)<<2) : 0; - SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr ]; - SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr ]; -} - -static void load_instrument(UINT32 chan, UINT32 slot, UINT8* inst ) -{ - set_mul(slot, inst[0]); - set_mul(slot+1, inst[1]); - set_ksl_tl(chan, inst[2]); - set_ksl_wave_fb(chan, inst[3]); - set_ar_dr(slot, inst[4]); - set_ar_dr(slot+1, inst[5]); - set_sl_rr(slot, inst[6]); - set_sl_rr(slot+1, inst[7]); -} - -static void update_instrument_zero(UINT8 r) -{ - UINT8* inst = &ym2413.inst_tab[0][0]; /* point to user instrument */ - UINT32 chan; - - UINT32 chan_max = 9; - if (ym2413.rhythm & 0x20) - chan_max=6; - - switch(r&7) - { - case 0: - for (chan=0; chanSLOT[SLOT1]; /* modulator envelope is HH */ - SLOT->TL = ((ym2413.instvol_r[7]>>4)<<2)<<(ENV_BITS-2-7); /* 7 bits TL (bit 6 = always 0) */ - SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); - - /* Load instrument settings for channel nine. (Tom-tom and top cymbal) */ - load_instrument(8, 16, &ym2413.inst_tab[18][0]); - - CH = &ym2413.P_CH[8]; - SLOT = &CH->SLOT[SLOT1]; /* modulator envelope is TOM */ - SLOT->TL = ((ym2413.instvol_r[8]>>4)<<2)<<(ENV_BITS-2-7); /* 7 bits TL (bit 6 = always 0) */ - SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); - } - - /* BD key on/off */ - if(v&0x10) - { - KEY_ON (&ym2413.P_CH[6].SLOT[SLOT1], 2); - KEY_ON (&ym2413.P_CH[6].SLOT[SLOT2], 2); - } - else - { - KEY_OFF(&ym2413.P_CH[6].SLOT[SLOT1],~2); - KEY_OFF(&ym2413.P_CH[6].SLOT[SLOT2],~2); - } - - /* HH key on/off */ - if(v&0x01) KEY_ON (&ym2413.P_CH[7].SLOT[SLOT1], 2); - else KEY_OFF(&ym2413.P_CH[7].SLOT[SLOT1],~2); - - /* SD key on/off */ - if(v&0x08) KEY_ON (&ym2413.P_CH[7].SLOT[SLOT2], 2); - else KEY_OFF(&ym2413.P_CH[7].SLOT[SLOT2],~2); - - /* TOM key on/off */ - if(v&0x04) KEY_ON (&ym2413.P_CH[8].SLOT[SLOT1], 2); - else KEY_OFF(&ym2413.P_CH[8].SLOT[SLOT1],~2); - - /* TOP-CY key on/off */ - if(v&0x02) KEY_ON (&ym2413.P_CH[8].SLOT[SLOT2], 2); - else KEY_OFF(&ym2413.P_CH[8].SLOT[SLOT2],~2); - } - else - { - /* rhythm ON to OFF */ - if (ym2413.rhythm&0x20) - { - /* Load instrument settings for channel seven(chan=6 since we're zero based).*/ - load_instrument(6, 12, &ym2413.inst_tab[ym2413.instvol_r[6]>>4][0]); - - /* Load instrument settings for channel eight.*/ - load_instrument(7, 14, &ym2413.inst_tab[ym2413.instvol_r[7]>>4][0]); - - /* Load instrument settings for channel nine.*/ - load_instrument(8, 16, &ym2413.inst_tab[ym2413.instvol_r[8]>>4][0]); - } - - /* BD key off */ - KEY_OFF(&ym2413.P_CH[6].SLOT[SLOT1],~2); - KEY_OFF(&ym2413.P_CH[6].SLOT[SLOT2],~2); - - /* HH key off */ - KEY_OFF(&ym2413.P_CH[7].SLOT[SLOT1],~2); - - /* SD key off */ - KEY_OFF(&ym2413.P_CH[7].SLOT[SLOT2],~2); - - /* TOM key off */ - KEY_OFF(&ym2413.P_CH[8].SLOT[SLOT1],~2); - - /* TOP-CY off */ - KEY_OFF(&ym2413.P_CH[8].SLOT[SLOT2],~2); - } - - ym2413.rhythm = v&0x3f; - break; - } - } - - break; - } - - case 0x10: - case 0x20: - { - int block_fnum; - - int chan = r&0x0f; - - if (chan >= 9) - chan -= 9; /* verified on real YM2413 */ - - CH = &ym2413.P_CH[chan]; - - if(r&0x10) - { - /* 10-18: FNUM 0-7 */ - block_fnum = (CH->block_fnum&0x0f00) | v; - } - else - { - /* 20-28: suson, keyon, block, FNUM 8 */ - block_fnum = ((v&0x0f)<<8) | (CH->block_fnum&0xff); - - if(v&0x10) - { - KEY_ON (&CH->SLOT[SLOT1], 1); - KEY_ON (&CH->SLOT[SLOT2], 1); - } - else - { - KEY_OFF(&CH->SLOT[SLOT1],~1); - KEY_OFF(&CH->SLOT[SLOT2],~1); - } - - CH->sus = v & 0x20; - } - - /* update */ - if(CH->block_fnum != block_fnum) - { - UINT8 block; - CH->block_fnum = block_fnum; - - /* BLK 2,1,0 bits -> bits 3,2,1 of kcode, FNUM MSB -> kcode LSB */ - CH->kcode = (block_fnum&0x0f00)>>8; - - CH->ksl_base = ksl_tab[block_fnum>>5]; - - block_fnum = block_fnum * 2; - block = (block_fnum&0x1c00) >> 10; - CH->fc = ym2413.fn_tab[block_fnum&0x03ff] >> (7-block); - - /* refresh Total Level in both SLOTs of this channel */ - CH->SLOT[SLOT1].TLL = CH->SLOT[SLOT1].TL + (CH->ksl_base>>CH->SLOT[SLOT1].ksl); - CH->SLOT[SLOT2].TLL = CH->SLOT[SLOT2].TL + (CH->ksl_base>>CH->SLOT[SLOT2].ksl); - - /* refresh frequency counter in both SLOTs of this channel */ - CALC_FCSLOT(CH,&CH->SLOT[SLOT1]); - CALC_FCSLOT(CH,&CH->SLOT[SLOT2]); - } - - break; - } - - case 0x30: /* inst 4 MSBs, VOL 4 LSBs */ - { - int chan = r&0x0f; - - if (chan >= 9) - chan -= 9; /* verified on real YM2413 */ - - CH = &ym2413.P_CH[chan]; - SLOT = &CH->SLOT[SLOT2]; /* carrier */ - SLOT->TL = ((v&0x0f)<<2)<<(ENV_BITS-2-7); /* 7 bits TL (bit 6 = always 0) */ - SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); - - /*check wether we are in rhythm mode and handle instrument/volume register accordingly*/ - if ((chan>=6) && (ym2413.rhythm&0x20)) - { - /* we're in rhythm mode*/ - - if (chan>=7) /* only for channel 7 and 8 (channel 6 is handled in usual way)*/ - { - SLOT = &CH->SLOT[SLOT1]; /* modulator envelope is HH(chan=7) or TOM(chan=8) */ - SLOT->TL = ((v>>4)<<2)<<(ENV_BITS-2-7); /* 7 bits TL (bit 6 = always 0) */ - SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); - } - } - else - { - if ((ym2413.instvol_r[chan]&0xf0) != (v&0xf0)) - { - ym2413.instvol_r[chan] = v; /* store for later use */ - load_instrument(chan, chan * 2, &ym2413.inst_tab[v>>4][0]); - } - } - - break; - } - - default: - break; - } -} - - -void YM2413Init(void) -{ - init_tables(); - - /* clear */ - memset(&ym2413,0,sizeof(YM2413)); - - /* init global tables */ - OPLL_initalize(); -} - -void YM2413ResetChip(void) -{ - int c,s; - int i; - - ym2413.eg_timer = 0; - ym2413.eg_cnt = 0; - - ym2413.noise_rng = 1; /* noise shift register */ - - - /* setup instruments table */ - for (i=0; i<19; i++) - { - for (c=0; c<8; c++) - { - ym2413.inst_tab[i][c] = table[i][c]; - } - } - - - /* reset with register write */ - OPLLWriteReg(0x0f,0); /*test reg*/ - for(i = 0x3f ; i >= 0x10 ; i-- ) OPLLWriteReg(i,0x00); - - /* reset operator parameters */ - for( c = 0 ; c < 9 ; c++ ) - { - YM2413_OPLL_CH *CH = &ym2413.P_CH[c]; - for(s = 0 ; s < 2 ; s++ ) - { - /* wave table */ - CH->SLOT[s].wavetable = 0; - CH->SLOT[s].state = EG_OFF; - CH->SLOT[s].volume = MAX_ATT_INDEX; - } - } -} - -/* YM2413 I/O interface */ - -void YM2413Write(unsigned int a, unsigned int v) -{ - if( !(a&2) ) - { - if( !(a&1) ) - { - /* address port */ - ym2413.address = v & 0xff; - } - else - { - /* data port */ - OPLLWriteReg(ym2413.address,v); - } - } - else - { - /* latched bit (Master System specific) */ - ym2413.status = v & 0x01; - } -} - -unsigned int YM2413Read(unsigned int a) -{ - /* D0=latched bit, D1-D2 need to be zero (Master System specific) */ - return 0xF8 | ym2413.status; -} - -void YM2413Update(int *buffer, int length) -{ - int i, out; - - for( i=0; i < length ; i++ ) - { - output[0] = 0; - output[1] = 0; - - advance_lfo(); - - /* FM part */ - chan_calc(&ym2413.P_CH[0]); - chan_calc(&ym2413.P_CH[1]); - chan_calc(&ym2413.P_CH[2]); - chan_calc(&ym2413.P_CH[3]); - chan_calc(&ym2413.P_CH[4]); - chan_calc(&ym2413.P_CH[5]); - - if(!(ym2413.rhythm&0x20)) - { - chan_calc(&ym2413.P_CH[6]); - chan_calc(&ym2413.P_CH[7]); - chan_calc(&ym2413.P_CH[8]); - } - else /* Rhythm part */ - { - rhythm_calc(&ym2413.P_CH[0], (ym2413.noise_rng>>0)&1 ); - } - - /* Melody (MO) & Rythm (RO) outputs mixing & amplification (latched bit controls FM output) */ - out = (output[0] + (output[1] * 2)) * 2 * ym2413.status; - - /* Store to stereo sound buffer */ - *buffer++ = out; - *buffer++ = out; - - advance(); - } -} - -unsigned char *YM2413GetContextPtr(void) -{ - return (unsigned char *)&ym2413; -} - -unsigned int YM2413GetContextSize(void) -{ - return sizeof(YM2413); -} diff --git a/waterbox/gpgx/core/sound/ym2413.h b/waterbox/gpgx/core/sound/ym2413.h deleted file mode 100644 index 55a6e09c09..0000000000 --- a/waterbox/gpgx/core/sound/ym2413.h +++ /dev/null @@ -1,23 +0,0 @@ -/* -** -** File: ym2413.c - software implementation of YM2413 -** FM sound generator type OPLL -** -** Copyright (C) 2002 Jarek Burczynski -** -** Version 1.0 -** -*/ - -#ifndef _H_YM2413_ -#define _H_YM2413_ - -extern void YM2413Init(void); -extern void YM2413ResetChip(void); -extern void YM2413Update(int *buffer, int length); -extern void YM2413Write(unsigned int a, unsigned int v); -extern unsigned int YM2413Read(unsigned int a); -extern unsigned char *YM2413GetContextPtr(void); -extern unsigned int YM2413GetContextSize(void); - -#endif /*_H_YM2413_*/ diff --git a/waterbox/gpgx/core/sound/ym2612.c b/waterbox/gpgx/core/sound/ym2612.c deleted file mode 100644 index 75bab1e4f9..0000000000 --- a/waterbox/gpgx/core/sound/ym2612.c +++ /dev/null @@ -1,2126 +0,0 @@ -/* -** -** software implementation of Yamaha FM sound generator (YM2612/YM3438) -** -** Original code (MAME fm.c) -** -** Copyright (C) 2001, 2002, 2003 Jarek Burczynski (bujar at mame dot net) -** Copyright (C) 1998 Tatsuyuki Satoh , MultiArcadeMachineEmulator development -** -** Version 1.4 (final beta) -** -** Additional code & fixes by Eke-Eke for Genesis Plus GX -** -** Huge thanks to Nemesis, most of those fixes came from his tests on Sega Genesis hardware -** More informations at http://gendev.spritesmind.net/forum/viewtopic.php?t=386 -** -** TODO: -** - better documentation -** - BUSY flag emulation -*/ - -/* -** CHANGELOG: -** -** 01-09-2012 Eke-Eke (Genesis Plus GX): -** - removed input clock / output samplerate frequency ratio, chip now always run at (original) internal sample frequency -** - removed now uneeded extra bits of precision -** -** 2006~2012 Eke-Eke (Genesis Plus GX): -** - removed unused multichip support -** - added YM2612 Context external access functions -** - fixed LFO implementation: -** .added support for CH3 special mode: fixes various sound effects (birds in Warlock, bug sound in Aladdin...) -** .inverted LFO AM waveform: fixes Spider-Man & Venom : Separation Anxiety (intro), California Games (surfing event) -** .improved LFO timing accuracy: now updated AFTER sample output, like EG/PG updates, and without any precision loss anymore. -** - improved internal timers emulation -** - adjusted lowest EG rates increment values -** - fixed Attack Rate not being updated in some specific cases (Batman & Robin intro) -** - fixed EG behavior when Attack Rate is maximal -** - fixed EG behavior when SL=0 (Mega Turrican tracks 03,09...) or/and Key ON occurs at minimal attenuation -** - implemented EG output immediate changes on register writes -** - fixed YM2612 initial values (after the reset): fixes missing intro in B.O.B -** - implemented Detune overflow (Ariel, Comix Zone, Shaq Fu, Spiderman & many other games using GEMS sound engine) -** - implemented accurate CSM mode emulation -** - implemented accurate SSG-EG emulation (Asterix, Beavis&Butthead, Bubba'n Stix & many other games) -** - implemented accurate address/data ports behavior -** - added preliminar support for DAC precision -** -** 03-08-2003 Jarek Burczynski: -** - fixed YM2608 initial values (after the reset) -** - fixed flag and irqmask handling (YM2608) -** - fixed BUFRDY flag handling (YM2608) -** -** 14-06-2003 Jarek Burczynski: -** - implemented all of the YM2608 status register flags -** - implemented support for external memory read/write via YM2608 -** - implemented support for deltat memory limit register in YM2608 emulation -** -** 22-05-2003 Jarek Burczynski: -** - fixed LFO PM calculations (copy&paste bugfix) -** -** 08-05-2003 Jarek Burczynski: -** - fixed SSG support -** -** 22-04-2003 Jarek Burczynski: -** - implemented 100% correct LFO generator (verified on real YM2610 and YM2608) -** -** 15-04-2003 Jarek Burczynski: -** - added support for YM2608's register 0x110 - status mask -** -** 01-12-2002 Jarek Burczynski: -** - fixed register addressing in YM2608, YM2610, YM2610B chips. (verified on real YM2608) -** The addressing patch used for early Neo-Geo games can be removed now. -** -** 26-11-2002 Jarek Burczynski, Nicola Salmoria: -** - recreated YM2608 ADPCM ROM using data from real YM2608's output which leads to: -** - added emulation of YM2608 drums. -** - output of YM2608 is two times lower now - same as YM2610 (verified on real YM2608) -** -** 16-08-2002 Jarek Burczynski: -** - binary exact Envelope Generator (verified on real YM2203); -** identical to YM2151 -** - corrected 'off by one' error in feedback calculations (when feedback is off) -** - corrected connection (algorithm) calculation (verified on real YM2203 and YM2610) -** -** 18-12-2001 Jarek Burczynski: -** - added SSG-EG support (verified on real YM2203) -** -** 12-08-2001 Jarek Burczynski: -** - corrected sin_tab and tl_tab data (verified on real chip) -** - corrected feedback calculations (verified on real chip) -** - corrected phase generator calculations (verified on real chip) -** - corrected envelope generator calculations (verified on real chip) -** - corrected FM volume level (YM2610 and YM2610B). -** - changed YMxxxUpdateOne() functions (YM2203, YM2608, YM2610, YM2610B, YM2612) : -** this was needed to calculate YM2610 FM channels output correctly. -** (Each FM channel is calculated as in other chips, but the output of the channel -** gets shifted right by one *before* sending to accumulator. That was impossible to do -** with previous implementation). -** -** 23-07-2001 Jarek Burczynski, Nicola Salmoria: -** - corrected YM2610 ADPCM type A algorithm and tables (verified on real chip) -** -** 11-06-2001 Jarek Burczynski: -** - corrected end of sample bug in ADPCMA_calc_cha(). -** Real YM2610 checks for equality between current and end addresses (only 20 LSB bits). -** -** 08-12-98 hiro-shi: -** rename ADPCMA -> ADPCMB, ADPCMB -> ADPCMA -** move ROM limit check.(CALC_CH? -> 2610Write1/2) -** test program (ADPCMB_TEST) -** move ADPCM A/B end check. -** ADPCMB repeat flag(no check) -** change ADPCM volume rate (8->16) (32->48). -** -** 09-12-98 hiro-shi: -** change ADPCM volume. (8->16, 48->64) -** replace ym2610 ch0/3 (YM-2610B) -** change ADPCM_SHIFT (10->8) missing bank change 0x4000-0xffff. -** add ADPCM_SHIFT_MASK -** change ADPCMA_DECODE_MIN/MAX. -*/ - -/************************************************************************/ -/* comment of hiro-shi(Hiromitsu Shioya) */ -/* YM2610(B) = OPN-B */ -/* YM2610 : PSG:3ch FM:4ch ADPCM(18.5KHz):6ch DeltaT ADPCM:1ch */ -/* YM2610B : PSG:3ch FM:6ch ADPCM(18.5KHz):6ch DeltaT ADPCM:1ch */ -/************************************************************************/ - -#include "shared.h" -#include - -/* envelope generator */ -#define ENV_BITS 10 -#define ENV_LEN (1<>3) - -/* sin waveform table in 'decibel' scale */ -static unsigned int sin_tab[SIN_LEN]; - -/* sustain level table (3dB per step) */ -/* bit0, bit1, bit2, bit3, bit4, bit5, bit6 */ -/* 1, 2, 4, 8, 16, 32, 64 (value)*/ -/* 0.75, 1.5, 3, 6, 12, 24, 48 (dB)*/ - -/* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/ -/* attenuation value (10 bits) = (SL << 2) << 3 */ -#define SC(db) (UINT32) ( db * (4.0/ENV_STEP) ) -static const UINT32 sl_table[16]={ - SC( 0),SC( 1),SC( 2),SC(3 ),SC(4 ),SC(5 ),SC(6 ),SC( 7), - SC( 8),SC( 9),SC(10),SC(11),SC(12),SC(13),SC(14),SC(31) -}; -#undef SC - - -#define RATE_STEPS (8) -static const UINT8 eg_inc[19*RATE_STEPS]={ - -/*cycle:0 1 2 3 4 5 6 7*/ - -/* 0 */ 0,1, 0,1, 0,1, 0,1, /* rates 00..11 0 (increment by 0 or 1) */ -/* 1 */ 0,1, 0,1, 1,1, 0,1, /* rates 00..11 1 */ -/* 2 */ 0,1, 1,1, 0,1, 1,1, /* rates 00..11 2 */ -/* 3 */ 0,1, 1,1, 1,1, 1,1, /* rates 00..11 3 */ - -/* 4 */ 1,1, 1,1, 1,1, 1,1, /* rate 12 0 (increment by 1) */ -/* 5 */ 1,1, 1,2, 1,1, 1,2, /* rate 12 1 */ -/* 6 */ 1,2, 1,2, 1,2, 1,2, /* rate 12 2 */ -/* 7 */ 1,2, 2,2, 1,2, 2,2, /* rate 12 3 */ - -/* 8 */ 2,2, 2,2, 2,2, 2,2, /* rate 13 0 (increment by 2) */ -/* 9 */ 2,2, 2,4, 2,2, 2,4, /* rate 13 1 */ -/*10 */ 2,4, 2,4, 2,4, 2,4, /* rate 13 2 */ -/*11 */ 2,4, 4,4, 2,4, 4,4, /* rate 13 3 */ - -/*12 */ 4,4, 4,4, 4,4, 4,4, /* rate 14 0 (increment by 4) */ -/*13 */ 4,4, 4,8, 4,4, 4,8, /* rate 14 1 */ -/*14 */ 4,8, 4,8, 4,8, 4,8, /* rate 14 2 */ -/*15 */ 4,8, 8,8, 4,8, 8,8, /* rate 14 3 */ - -/*16 */ 8,8, 8,8, 8,8, 8,8, /* rates 15 0, 15 1, 15 2, 15 3 (increment by 8) */ -/*17 */ 16,16,16,16,16,16,16,16, /* rates 15 2, 15 3 for attack */ -/*18 */ 0,0, 0,0, 0,0, 0,0, /* infinity rates for attack and decay(s) */ -}; - - -#define O(a) (a*RATE_STEPS) - -/*note that there is no O(17) in this table - it's directly in the code */ -static const UINT8 eg_rate_select[32+64+32]={ /* Envelope Generator rates (32 + 64 rates + 32 RKS) */ -/* 32 infinite time rates (same as Rate 0) */ -O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), -O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), -O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), -O(18),O(18),O(18),O(18),O(18),O(18),O(18),O(18), - -/* rates 00-11 */ -/* -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -*/ -O(18),O(18),O( 0),O( 0), -O( 0),O( 0),O( 2),O( 2), /* Nemesis's tests */ - -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), -O( 0),O( 1),O( 2),O( 3), - -/* rate 12 */ -O( 4),O( 5),O( 6),O( 7), - -/* rate 13 */ -O( 8),O( 9),O(10),O(11), - -/* rate 14 */ -O(12),O(13),O(14),O(15), - -/* rate 15 */ -O(16),O(16),O(16),O(16), - -/* 32 dummy rates (same as 15 3) */ -O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16), -O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16), -O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16), -O(16),O(16),O(16),O(16),O(16),O(16),O(16),O(16) - -}; -#undef O - -/*rate 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15*/ -/*shift 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0 */ -/*mask 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0, 0, 0, 0, 0 */ - -#define O(a) (a*1) -static const UINT8 eg_rate_shift[32+64+32]={ /* Envelope Generator counter shifts (32 + 64 rates + 32 RKS) */ -/* 32 infinite time rates */ -/* O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), -O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), -O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), -O(0),O(0),O(0),O(0),O(0),O(0),O(0),O(0), */ - -/* fixed (should be the same as rate 0, even if it makes no difference since increment value is 0 for these rates) */ -O(11),O(11),O(11),O(11),O(11),O(11),O(11),O(11), -O(11),O(11),O(11),O(11),O(11),O(11),O(11),O(11), -O(11),O(11),O(11),O(11),O(11),O(11),O(11),O(11), -O(11),O(11),O(11),O(11),O(11),O(11),O(11),O(11), - -/* rates 00-11 */ -O(11),O(11),O(11),O(11), -O(10),O(10),O(10),O(10), -O( 9),O( 9),O( 9),O( 9), -O( 8),O( 8),O( 8),O( 8), -O( 7),O( 7),O( 7),O( 7), -O( 6),O( 6),O( 6),O( 6), -O( 5),O( 5),O( 5),O( 5), -O( 4),O( 4),O( 4),O( 4), -O( 3),O( 3),O( 3),O( 3), -O( 2),O( 2),O( 2),O( 2), -O( 1),O( 1),O( 1),O( 1), -O( 0),O( 0),O( 0),O( 0), - -/* rate 12 */ -O( 0),O( 0),O( 0),O( 0), - -/* rate 13 */ -O( 0),O( 0),O( 0),O( 0), - -/* rate 14 */ -O( 0),O( 0),O( 0),O( 0), - -/* rate 15 */ -O( 0),O( 0),O( 0),O( 0), - -/* 32 dummy rates (same as 15 3) */ -O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), -O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), -O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0), -O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0),O( 0) - -}; -#undef O - -static const UINT8 dt_tab[4 * 32]={ -/* this is YM2151 and YM2612 phase increment data (in 10.10 fixed point format)*/ -/* FD=0 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -/* FD=1 */ - 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 8, 8, 8, 8, -/* FD=2 */ - 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, - 5, 6, 6, 7, 8, 8, 9,10,11,12,13,14,16,16,16,16, -/* FD=3 */ - 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, - 8 , 8, 9,10,11,12,13,14,16,17,19,20,22,22,22,22 -}; - - -/* OPN key frequency number -> key code follow table */ -/* fnum higher 4bit -> keycode lower 2bit */ -static const UINT8 opn_fktable[16] = {0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3}; - - -/* 8 LFO speed parameters */ -/* each value represents number of samples that one LFO level will last for */ -static const UINT32 lfo_samples_per_step[8] = {108, 77, 71, 67, 62, 44, 8, 5}; - - -/*There are 4 different LFO AM depths available, they are: - 0 dB, 1.4 dB, 5.9 dB, 11.8 dB - Here is how it is generated (in EG steps): - - 11.8 dB = 0, 2, 4, 6, 8, 10,12,14,16...126,126,124,122,120,118,....4,2,0 - 5.9 dB = 0, 1, 2, 3, 4, 5, 6, 7, 8....63, 63, 62, 61, 60, 59,.....2,1,0 - 1.4 dB = 0, 0, 0, 0, 1, 1, 1, 1, 2,...15, 15, 15, 15, 14, 14,.....0,0,0 - - (1.4 dB is loosing precision as you can see) - - It's implemented as generator from 0..126 with step 2 then a shift - right N times, where N is: - 8 for 0 dB - 3 for 1.4 dB - 1 for 5.9 dB - 0 for 11.8 dB -*/ -static const UINT8 lfo_ams_depth_shift[4] = {8, 3, 1, 0}; - - - -/*There are 8 different LFO PM depths available, they are: - 0, 3.4, 6.7, 10, 14, 20, 40, 80 (cents) - - Modulation level at each depth depends on F-NUMBER bits: 4,5,6,7,8,9,10 - (bits 8,9,10 = FNUM MSB from OCT/FNUM register) - - Here we store only first quarter (positive one) of full waveform. - Full table (lfo_pm_table) containing all 128 waveforms is build - at run (init) time. - - One value in table below represents 4 (four) basic LFO steps - (1 PM step = 4 AM steps). - - For example: - at LFO SPEED=0 (which is 108 samples per basic LFO step) - one value from "lfo_pm_output" table lasts for 432 consecutive - samples (4*108=432) and one full LFO waveform cycle lasts for 13824 - samples (32*432=13824; 32 because we store only a quarter of whole - waveform in the table below) -*/ -static const UINT8 lfo_pm_output[7*8][8]={ -/* 7 bits meaningful (of F-NUMBER), 8 LFO output levels per one depth (out of 32), 8 LFO depths */ -/* FNUM BIT 4: 000 0001xxxx */ -/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 3 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 4 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 5 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 6 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 7 */ {0, 0, 0, 0, 1, 1, 1, 1}, - -/* FNUM BIT 5: 000 0010xxxx */ -/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 3 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 4 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 5 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 6 */ {0, 0, 0, 0, 1, 1, 1, 1}, -/* DEPTH 7 */ {0, 0, 1, 1, 2, 2, 2, 3}, - -/* FNUM BIT 6: 000 0100xxxx */ -/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 3 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 4 */ {0, 0, 0, 0, 0, 0, 0, 1}, -/* DEPTH 5 */ {0, 0, 0, 0, 1, 1, 1, 1}, -/* DEPTH 6 */ {0, 0, 1, 1, 2, 2, 2, 3}, -/* DEPTH 7 */ {0, 0, 2, 3, 4, 4, 5, 6}, - -/* FNUM BIT 7: 000 1000xxxx */ -/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 1 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 2 */ {0, 0, 0, 0, 0, 0, 1, 1}, -/* DEPTH 3 */ {0, 0, 0, 0, 1, 1, 1, 1}, -/* DEPTH 4 */ {0, 0, 0, 1, 1, 1, 1, 2}, -/* DEPTH 5 */ {0, 0, 1, 1, 2, 2, 2, 3}, -/* DEPTH 6 */ {0, 0, 2, 3, 4, 4, 5, 6}, -/* DEPTH 7 */ {0, 0, 4, 6, 8, 8, 0xa, 0xc}, - -/* FNUM BIT 8: 001 0000xxxx */ -/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 1 */ {0, 0, 0, 0, 1, 1, 1, 1}, -/* DEPTH 2 */ {0, 0, 0, 1, 1, 1, 2, 2}, -/* DEPTH 3 */ {0, 0, 1, 1, 2, 2, 3, 3}, -/* DEPTH 4 */ {0, 0, 1, 2, 2, 2, 3, 4}, -/* DEPTH 5 */ {0, 0, 2, 3, 4, 4, 5, 6}, -/* DEPTH 6 */ {0, 0, 4, 6, 8, 8, 0xa, 0xc}, -/* DEPTH 7 */ {0, 0, 8, 0xc,0x10,0x10,0x14,0x18}, - -/* FNUM BIT 9: 010 0000xxxx */ -/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 1 */ {0, 0, 0, 0, 2, 2, 2, 2}, -/* DEPTH 2 */ {0, 0, 0, 2, 2, 2, 4, 4}, -/* DEPTH 3 */ {0, 0, 2, 2, 4, 4, 6, 6}, -/* DEPTH 4 */ {0, 0, 2, 4, 4, 4, 6, 8}, -/* DEPTH 5 */ {0, 0, 4, 6, 8, 8, 0xa, 0xc}, -/* DEPTH 6 */ {0, 0, 8, 0xc,0x10,0x10,0x14,0x18}, -/* DEPTH 7 */ {0, 0,0x10,0x18,0x20,0x20,0x28,0x30}, - -/* FNUM BIT10: 100 0000xxxx */ -/* DEPTH 0 */ {0, 0, 0, 0, 0, 0, 0, 0}, -/* DEPTH 1 */ {0, 0, 0, 0, 4, 4, 4, 4}, -/* DEPTH 2 */ {0, 0, 0, 4, 4, 4, 8, 8}, -/* DEPTH 3 */ {0, 0, 4, 4, 8, 8, 0xc, 0xc}, -/* DEPTH 4 */ {0, 0, 4, 8, 8, 8, 0xc,0x10}, -/* DEPTH 5 */ {0, 0, 8, 0xc,0x10,0x10,0x14,0x18}, -/* DEPTH 6 */ {0, 0,0x10,0x18,0x20,0x20,0x28,0x30}, -/* DEPTH 7 */ {0, 0,0x20,0x30,0x40,0x40,0x50,0x60}, - -}; - -/* all 128 LFO PM waveforms */ -INT32 *ym2612_lfo_pm_table; /* 128 combinations of 7 bits meaningful (of F-NUMBER), 8 LFO depths, 32 LFO output levels per one depth */ -#define lfo_pm_table ym2612_lfo_pm_table - -/* register number to channel number , slot offset */ -#define OPN_CHAN(N) (N&3) -#define OPN_SLOT(N) ((N>>2)&3) - -/* slot number */ -#define SLOT1 0 -#define SLOT2 2 -#define SLOT3 1 -#define SLOT4 3 - -/* struct describing a single operator (SLOT) */ -typedef struct -{ - INT32 *DT; /* detune :dt_tab[DT] */ - UINT8 KSR; /* key scale rate :3-KSR */ - UINT32 ar; /* attack rate */ - UINT32 d1r; /* decay rate */ - UINT32 d2r; /* sustain rate */ - UINT32 rr; /* release rate */ - UINT8 ksr; /* key scale rate :kcode>>(3-KSR) */ - UINT32 mul; /* multiple :ML_TABLE[ML] */ - - /* Phase Generator */ - UINT32 phase; /* phase counter */ - INT32 Incr; /* phase step */ - - /* Envelope Generator */ - UINT8 state; /* phase type */ - UINT32 tl; /* total level: TL << 3 */ - INT32 volume; /* envelope counter */ - UINT32 sl; /* sustain level:sl_table[SL] */ - UINT32 vol_out; /* current output from EG circuit (without AM from LFO) */ - - UINT8 eg_sh_ar; /* (attack state) */ - UINT8 eg_sel_ar; /* (attack state) */ - UINT8 eg_sh_d1r; /* (decay state) */ - UINT8 eg_sel_d1r; /* (decay state) */ - UINT8 eg_sh_d2r; /* (sustain state) */ - UINT8 eg_sel_d2r; /* (sustain state) */ - UINT8 eg_sh_rr; /* (release state) */ - UINT8 eg_sel_rr; /* (release state) */ - - UINT8 ssg; /* SSG-EG waveform */ - UINT8 ssgn; /* SSG-EG negated output */ - - UINT8 key; /* 0=last key was KEY OFF, 1=KEY ON */ - - /* LFO */ - UINT32 AMmask; /* AM enable flag */ - -} FM_SLOT; - -typedef struct -{ - FM_SLOT SLOT[4]; /* four SLOTs (operators) */ - - UINT8 ALGO; /* algorithm */ - UINT8 FB; /* feedback shift */ - INT32 op1_out[2]; /* op1 output for feedback */ - - INT32 *connect1; /* SLOT1 output pointer */ - INT32 *connect3; /* SLOT3 output pointer */ - INT32 *connect2; /* SLOT2 output pointer */ - INT32 *connect4; /* SLOT4 output pointer */ - - INT32 *mem_connect; /* where to put the delayed sample (MEM) */ - INT32 mem_value; /* delayed sample (MEM) value */ - - INT32 pms; /* channel PMS */ - UINT8 ams; /* channel AMS */ - - UINT32 fc; /* fnum,blk */ - UINT8 kcode; /* key code */ - UINT32 block_fnum; /* blk/fnum value (for LFO PM calculations) */ -} FM_CH; - - -typedef struct -{ - UINT16 address; /* address register */ - UINT8 status; /* status flag */ - UINT32 mode; /* mode CSM / 3SLOT */ - UINT8 fn_h; /* freq latch */ - INT32 TA; /* timer a value */ - INT32 TAL; /* timer a base */ - INT32 TAC; /* timer a counter */ - INT32 TB; /* timer b value */ - INT32 TBL; /* timer b base */ - INT32 TBC; /* timer b counter */ - INT32 dt_tab[8][32]; /* DeTune table */ - -} FM_ST; - - -/***********************************************************/ -/* OPN unit */ -/***********************************************************/ - -/* OPN 3slot struct */ -typedef struct -{ - UINT32 fc[3]; /* fnum3,blk3: calculated */ - UINT8 fn_h; /* freq3 latch */ - UINT8 kcode[3]; /* key code */ - UINT32 block_fnum[3]; /* current fnum value for this slot (can be different betweeen slots of one channel in 3slot mode) */ - UINT8 key_csm; /* CSM mode Key-ON flag */ - -} FM_3SLOT; - -/* OPN/A/B common state */ -typedef struct -{ - FM_ST ST; /* general state */ - FM_3SLOT SL3; /* 3 slot mode state */ - unsigned int pan[6*2]; /* fm channels output masks (0xffffffff = enable) */ - - /* EG */ - UINT32 eg_cnt; /* global envelope generator counter */ - UINT32 eg_timer; /* global envelope generator counter works at frequency = chipclock/144/3 */ - - /* LFO */ - UINT8 lfo_cnt; /* current LFO phase (out of 128) */ - UINT32 lfo_timer; /* current LFO phase runs at LFO frequency */ - UINT32 lfo_timer_overflow; /* LFO timer overflows every N samples (depends on LFO frequency) */ - UINT32 LFO_AM; /* current LFO AM step */ - UINT32 LFO_PM; /* current LFO PM step */ - -} FM_OPN; - -/***********************************************************/ -/* YM2612 chip */ -/***********************************************************/ -typedef struct -{ - FM_CH CH[6]; /* channel state */ - UINT8 dacen; /* DAC mode */ - INT32 dacout; /* DAC output */ - FM_OPN OPN; /* OPN state */ - -} YM2612; - -/* emulated chip */ -YM2612 ym2612; - -/* current chip state */ -INT32 m2,c1,c2; /* Phase Modulation input for operators 2,3,4 */ -INT32 mem; /* one sample delay memory */ -INT32 out_fm[8]; /* outputs of working channels */ -UINT32 bitmask; /* working channels output bitmasking (DAC quantization) */ - - -INLINE void FM_KEYON(FM_CH *CH , int s ) -{ - FM_SLOT *SLOT = &CH->SLOT[s]; - - if (!SLOT->key && !ym2612.OPN.SL3.key_csm) - { - /* restart Phase Generator */ - SLOT->phase = 0; - - /* reset SSG-EG inversion flag */ - SLOT->ssgn = 0; - - if ((SLOT->ar + SLOT->ksr) < 94 /*32+62*/) - { - SLOT->state = (SLOT->volume <= MIN_ATT_INDEX) ? ((SLOT->sl == MIN_ATT_INDEX) ? EG_SUS : EG_DEC) : EG_ATT; - } - else - { - /* force attenuation level to 0 */ - SLOT->volume = MIN_ATT_INDEX; - - /* directly switch to Decay (or Sustain) */ - SLOT->state = (SLOT->sl == MIN_ATT_INDEX) ? EG_SUS : EG_DEC; - } - - /* recalculate EG output */ - if ((SLOT->ssg&0x08) && (SLOT->ssgn ^ (SLOT->ssg&0x04))) - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - - SLOT->key = 1; -} - -INLINE void FM_KEYOFF(FM_CH *CH , int s ) -{ - FM_SLOT *SLOT = &CH->SLOT[s]; - - if (SLOT->key && !ym2612.OPN.SL3.key_csm) - { - if (SLOT->state>EG_REL) - { - SLOT->state = EG_REL; /* phase -> Release */ - - /* SSG-EG specific update */ - if (SLOT->ssg&0x08) - { - /* convert EG attenuation level */ - if (SLOT->ssgn ^ (SLOT->ssg&0x04)) - SLOT->volume = (0x200 - SLOT->volume); - - /* force EG attenuation level */ - if (SLOT->volume >= 0x200) - { - SLOT->volume = MAX_ATT_INDEX; - SLOT->state = EG_OFF; - } - - /* recalculate EG output */ - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - } - } - - SLOT->key = 0; -} - -INLINE void FM_KEYON_CSM(FM_CH *CH , int s ) -{ - FM_SLOT *SLOT = &CH->SLOT[s]; - - if (!SLOT->key && !ym2612.OPN.SL3.key_csm) - { - /* restart Phase Generator */ - SLOT->phase = 0; - - /* reset SSG-EG inversion flag */ - SLOT->ssgn = 0; - - if ((SLOT->ar + SLOT->ksr) < 94 /*32+62*/) - { - SLOT->state = (SLOT->volume <= MIN_ATT_INDEX) ? ((SLOT->sl == MIN_ATT_INDEX) ? EG_SUS : EG_DEC) : EG_ATT; - } - else - { - /* force attenuation level to 0 */ - SLOT->volume = MIN_ATT_INDEX; - - /* directly switch to Decay (or Sustain) */ - SLOT->state = (SLOT->sl == MIN_ATT_INDEX) ? EG_SUS : EG_DEC; - } - - /* recalculate EG output */ - if ((SLOT->ssg&0x08) && (SLOT->ssgn ^ (SLOT->ssg&0x04))) - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } -} - -INLINE void FM_KEYOFF_CSM(FM_CH *CH , int s ) -{ - FM_SLOT *SLOT = &CH->SLOT[s]; - if (!SLOT->key) - { - if (SLOT->state>EG_REL) - { - SLOT->state = EG_REL; /* phase -> Release */ - - /* SSG-EG specific update */ - if (SLOT->ssg&0x08) - { - /* convert EG attenuation level */ - if (SLOT->ssgn ^ (SLOT->ssg&0x04)) - SLOT->volume = (0x200 - SLOT->volume); - - /* force EG attenuation level */ - if (SLOT->volume >= 0x200) - { - SLOT->volume = MAX_ATT_INDEX; - SLOT->state = EG_OFF; - } - - /* recalculate EG output */ - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - } - } -} - -/* CSM Key Controll */ -INLINE void CSMKeyControll(FM_CH *CH) -{ - /* all key ON (verified by Nemesis on real hardware) */ - FM_KEYON_CSM(CH,SLOT1); - FM_KEYON_CSM(CH,SLOT2); - FM_KEYON_CSM(CH,SLOT3); - FM_KEYON_CSM(CH,SLOT4); - ym2612.OPN.SL3.key_csm = 1; -} - -INLINE void INTERNAL_TIMER_A() -{ - if (ym2612.OPN.ST.mode & 0x01) - { - ym2612.OPN.ST.TAC--; - if (ym2612.OPN.ST.TAC <= 0) - { - /* set status (if enabled) */ - if (ym2612.OPN.ST.mode & 0x04) - ym2612.OPN.ST.status |= 0x01; - - /* reload the counter */ - ym2612.OPN.ST.TAC = ym2612.OPN.ST.TAL; - - /* CSM mode auto key on */ - if ((ym2612.OPN.ST.mode & 0xC0) == 0x80) - CSMKeyControll(&ym2612.CH[2]); - } - } -} - -INLINE void INTERNAL_TIMER_B(int step) -{ - if (ym2612.OPN.ST.mode & 0x02) - { - ym2612.OPN.ST.TBC-=step; - if (ym2612.OPN.ST.TBC <= 0) - { - /* set status (if enabled) */ - if (ym2612.OPN.ST.mode & 0x08) - ym2612.OPN.ST.status |= 0x02; - - /* reload the counter */ - if (ym2612.OPN.ST.TBL) - ym2612.OPN.ST.TBC += ym2612.OPN.ST.TBL; - else - ym2612.OPN.ST.TBC = ym2612.OPN.ST.TBL; - } - } -} - -/* OPN Mode Register Write */ -INLINE void set_timers(int v ) -{ - /* b7 = CSM MODE */ - /* b6 = 3 slot mode */ - /* b5 = reset b */ - /* b4 = reset a */ - /* b3 = timer enable b */ - /* b2 = timer enable a */ - /* b1 = load b */ - /* b0 = load a */ - - if ((ym2612.OPN.ST.mode ^ v) & 0xC0) - { - /* phase increment need to be recalculated */ - ym2612.CH[2].SLOT[SLOT1].Incr=-1; - - /* CSM mode disabled and CSM key ON active*/ - if (((v & 0xC0) != 0x80) && ym2612.OPN.SL3.key_csm) - { - /* CSM Mode Key OFF (verified by Nemesis on real hardware) */ - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT1); - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT2); - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT3); - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT4); - ym2612.OPN.SL3.key_csm = 0; - } - } - - /* reload Timers */ - if ((v&1) && !(ym2612.OPN.ST.mode&1)) - ym2612.OPN.ST.TAC = ym2612.OPN.ST.TAL; - if ((v&2) && !(ym2612.OPN.ST.mode&2)) - ym2612.OPN.ST.TBC = ym2612.OPN.ST.TBL; - - /* reset Timers flags */ - ym2612.OPN.ST.status &= (~v >> 4); - - ym2612.OPN.ST.mode = v; -} - -/* set algorithm connection */ -INLINE void setup_connection( FM_CH *CH, int ch ) -{ - INT32 *carrier = &out_fm[ch]; - - INT32 **om1 = &CH->connect1; - INT32 **om2 = &CH->connect3; - INT32 **oc1 = &CH->connect2; - - INT32 **memc = &CH->mem_connect; - - switch( CH->ALGO ){ - case 0: - /* M1---C1---MEM---M2---C2---OUT */ - *om1 = &c1; - *oc1 = &mem; - *om2 = &c2; - *memc= &m2; - break; - case 1: - /* M1------+-MEM---M2---C2---OUT */ - /* C1-+ */ - *om1 = &mem; - *oc1 = &mem; - *om2 = &c2; - *memc= &m2; - break; - case 2: - /* M1-----------------+-C2---OUT */ - /* C1---MEM---M2-+ */ - *om1 = &c2; - *oc1 = &mem; - *om2 = &c2; - *memc= &m2; - break; - case 3: - /* M1---C1---MEM------+-C2---OUT */ - /* M2-+ */ - *om1 = &c1; - *oc1 = &mem; - *om2 = &c2; - *memc= &c2; - break; - case 4: - /* M1---C1-+-OUT */ - /* M2---C2-+ */ - /* MEM: not used */ - *om1 = &c1; - *oc1 = carrier; - *om2 = &c2; - *memc= &mem; /* store it anywhere where it will not be used */ - break; - case 5: - /* +----C1----+ */ - /* M1-+-MEM---M2-+-OUT */ - /* +----C2----+ */ - *om1 = 0; /* special mark */ - *oc1 = carrier; - *om2 = carrier; - *memc= &m2; - break; - case 6: - /* M1---C1-+ */ - /* M2-+-OUT */ - /* C2-+ */ - /* MEM: not used */ - *om1 = &c1; - *oc1 = carrier; - *om2 = carrier; - *memc= &mem; /* store it anywhere where it will not be used */ - break; - case 7: - /* M1-+ */ - /* C1-+-OUT */ - /* M2-+ */ - /* C2-+ */ - /* MEM: not used*/ - *om1 = carrier; - *oc1 = carrier; - *om2 = carrier; - *memc= &mem; /* store it anywhere where it will not be used */ - break; - } - - CH->connect4 = carrier; -} - -/* set detune & multiple */ -INLINE void set_det_mul(FM_CH *CH,FM_SLOT *SLOT,int v) -{ - SLOT->mul = (v&0x0f)? (v&0x0f)*2 : 1; - SLOT->DT = ym2612.OPN.ST.dt_tab[(v>>4)&7]; - CH->SLOT[SLOT1].Incr=-1; -} - -/* set total level */ -INLINE void set_tl(FM_SLOT *SLOT , int v) -{ - SLOT->tl = (v&0x7f)<<(ENV_BITS-7); /* 7bit TL */ - - /* recalculate EG output */ - if ((SLOT->ssg&0x08) && (SLOT->ssgn ^ (SLOT->ssg&0x04)) && (SLOT->state > EG_REL)) - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; -} - -/* set attack rate & key scale */ -INLINE void set_ar_ksr(FM_CH *CH,FM_SLOT *SLOT,int v) -{ - UINT8 old_KSR = SLOT->KSR; - - SLOT->ar = (v&0x1f) ? 32 + ((v&0x1f)<<1) : 0; - - SLOT->KSR = 3-(v>>6); - if (SLOT->KSR != old_KSR) - { - CH->SLOT[SLOT1].Incr=-1; - } - - /* Even if it seems unnecessary to do it here, it could happen that KSR and KC */ - /* are modified but the resulted SLOT->ksr value (kc >> SLOT->KSR) remains unchanged. */ - /* In such case, Attack Rate would not be recalculated by "refresh_fc_eg_slot". */ - /* This actually fixes the intro of "The Adventures of Batman & Robin" (Eke-Eke) */ - if ((SLOT->ar + SLOT->ksr) < (32+62)) - { - SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + SLOT->ksr ]; - SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + SLOT->ksr ]; - } - else - { - /* verified by Nemesis on real hardware (Attack phase is blocked) */ - SLOT->eg_sh_ar = 0; - SLOT->eg_sel_ar = 18*RATE_STEPS; - } - } - -/* set decay rate */ -INLINE void set_dr(FM_SLOT *SLOT,int v) -{ - SLOT->d1r = (v&0x1f) ? 32 + ((v&0x1f)<<1) : 0; - - SLOT->eg_sh_d1r = eg_rate_shift [SLOT->d1r + SLOT->ksr]; - SLOT->eg_sel_d1r= eg_rate_select[SLOT->d1r + SLOT->ksr]; - -} - -/* set sustain rate */ -INLINE void set_sr(FM_SLOT *SLOT,int v) -{ - SLOT->d2r = (v&0x1f) ? 32 + ((v&0x1f)<<1) : 0; - - SLOT->eg_sh_d2r = eg_rate_shift [SLOT->d2r + SLOT->ksr]; - SLOT->eg_sel_d2r= eg_rate_select[SLOT->d2r + SLOT->ksr]; -} - -/* set release rate */ -INLINE void set_sl_rr(FM_SLOT *SLOT,int v) -{ - SLOT->sl = sl_table[ v>>4 ]; - - /* check EG state changes */ - if ((SLOT->state == EG_DEC) && (SLOT->volume >= (INT32)(SLOT->sl))) - SLOT->state = EG_SUS; - - SLOT->rr = 34 + ((v&0x0f)<<2); - - SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + SLOT->ksr]; - SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + SLOT->ksr]; -} - -/* advance LFO to next sample */ -INLINE void advance_lfo() -{ - if (ym2612.OPN.lfo_timer_overflow) /* LFO enabled ? */ - { - /* increment LFO timer (every samples) */ - ym2612.OPN.lfo_timer ++; - - /* when LFO is enabled, one level will last for 108, 77, 71, 67, 62, 44, 8 or 5 samples */ - if (ym2612.OPN.lfo_timer >= ym2612.OPN.lfo_timer_overflow) - { - ym2612.OPN.lfo_timer = 0; - - /* There are 128 LFO steps */ - ym2612.OPN.lfo_cnt = ( ym2612.OPN.lfo_cnt + 1 ) & 127; - - /* triangle (inverted) */ - /* AM: from 126 to 0 step -2, 0 to 126 step +2 */ - if (ym2612.OPN.lfo_cnt<64) - ym2612.OPN.LFO_AM = (ym2612.OPN.lfo_cnt ^ 63) << 1; - else - ym2612.OPN.LFO_AM = (ym2612.OPN.lfo_cnt & 63) << 1; - - /* PM works with 4 times slower clock */ - ym2612.OPN.LFO_PM = ym2612.OPN.lfo_cnt >> 2; - } - } -} - - -INLINE void advance_eg_channels(FM_CH *CH, unsigned int eg_cnt) -{ - unsigned int i = 6; /* six channels */ - unsigned int j; - FM_SLOT *SLOT; - - do - { - SLOT = &CH->SLOT[SLOT1]; - j = 4; /* four operators per channel */ - do - { - switch(SLOT->state) - { - case EG_ATT: /* attack phase */ - { - if (!(eg_cnt & ((1<eg_sh_ar)-1))) - { - /* update attenuation level */ - SLOT->volume += (~SLOT->volume * (eg_inc[SLOT->eg_sel_ar + ((eg_cnt>>SLOT->eg_sh_ar)&7)]))>>4; - - /* check phase transition*/ - if (SLOT->volume <= MIN_ATT_INDEX) - { - SLOT->volume = MIN_ATT_INDEX; - SLOT->state = (SLOT->sl == MIN_ATT_INDEX) ? EG_SUS : EG_DEC; /* special case where SL=0 */ - } - - /* recalculate EG output */ - if ((SLOT->ssg&0x08) && (SLOT->ssgn ^ (SLOT->ssg&0x04))) /* SSG-EG Output Inversion */ - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - break; - } - - case EG_DEC: /* decay phase */ - { - if (!(eg_cnt & ((1<eg_sh_d1r)-1))) - { - /* SSG EG type */ - if (SLOT->ssg&0x08) - { - /* update attenuation level */ - if (SLOT->volume < 0x200) - { - SLOT->volume += 4 * eg_inc[SLOT->eg_sel_d1r + ((eg_cnt>>SLOT->eg_sh_d1r)&7)]; - - /* recalculate EG output */ - if (SLOT->ssgn ^ (SLOT->ssg&0x04)) /* SSG-EG Output Inversion */ - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - } - else - { - /* update attenuation level */ - SLOT->volume += eg_inc[SLOT->eg_sel_d1r + ((eg_cnt>>SLOT->eg_sh_d1r)&7)]; - - /* recalculate EG output */ - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - - /* check phase transition*/ - if (SLOT->volume >= (INT32)(SLOT->sl)) - SLOT->state = EG_SUS; - } - break; - } - - case EG_SUS: /* sustain phase */ - { - if (!(eg_cnt & ((1<eg_sh_d2r)-1))) - { - /* SSG EG type */ - if (SLOT->ssg&0x08) - { - /* update attenuation level */ - if (SLOT->volume < 0x200) - { - SLOT->volume += 4 * eg_inc[SLOT->eg_sel_d2r + ((eg_cnt>>SLOT->eg_sh_d2r)&7)]; - - /* recalculate EG output */ - if (SLOT->ssgn ^ (SLOT->ssg&0x04)) /* SSG-EG Output Inversion */ - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - } - else - { - /* update attenuation level */ - SLOT->volume += eg_inc[SLOT->eg_sel_d2r + ((eg_cnt>>SLOT->eg_sh_d2r)&7)]; - - /* check phase transition*/ - if ( SLOT->volume >= MAX_ATT_INDEX ) - SLOT->volume = MAX_ATT_INDEX; - /* do not change SLOT->state (verified on real chip) */ - - /* recalculate EG output */ - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - } - break; - } - - case EG_REL: /* release phase */ - { - if (!(eg_cnt & ((1<eg_sh_rr)-1))) - { - /* SSG EG type */ - if (SLOT->ssg&0x08) - { - /* update attenuation level */ - if (SLOT->volume < 0x200) - SLOT->volume += 4 * eg_inc[SLOT->eg_sel_rr + ((eg_cnt>>SLOT->eg_sh_rr)&7)]; - - /* check phase transition */ - if (SLOT->volume >= 0x200) - { - SLOT->volume = MAX_ATT_INDEX; - SLOT->state = EG_OFF; - } - } - else - { - /* update attenuation level */ - SLOT->volume += eg_inc[SLOT->eg_sel_rr + ((eg_cnt>>SLOT->eg_sh_rr)&7)]; - - /* check phase transition*/ - if (SLOT->volume >= MAX_ATT_INDEX) - { - SLOT->volume = MAX_ATT_INDEX; - SLOT->state = EG_OFF; - } - } - - /* recalculate EG output */ - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - - } - break; - } - } - - /* next slot */ - SLOT++; - } while (--j); - - /* next channel */ - CH++; - } while (--i); -} - -/* SSG-EG update process */ -/* The behavior is based upon Nemesis tests on real hardware */ -/* This is actually executed before each samples */ -INLINE void update_ssg_eg_channels(FM_CH *CH) -{ - unsigned int i = 6; /* six channels */ - unsigned int j; - FM_SLOT *SLOT; - - do - { - j = 4; /* four operators per channel */ - SLOT = &CH->SLOT[SLOT1]; - - do - { - /* detect SSG-EG transition */ - /* this is not required during release phase as the attenuation has been forced to MAX and output invert flag is not used */ - /* if an Attack Phase is programmed, inversion can occur on each sample */ - if ((SLOT->ssg & 0x08) && (SLOT->volume >= 0x200) && (SLOT->state > EG_REL)) - { - if (SLOT->ssg & 0x01) /* bit 0 = hold SSG-EG */ - { - /* set inversion flag */ - if (SLOT->ssg & 0x02) - SLOT->ssgn = 4; - - /* force attenuation level during decay phases */ - if ((SLOT->state != EG_ATT) && !(SLOT->ssgn ^ (SLOT->ssg & 0x04))) - SLOT->volume = MAX_ATT_INDEX; - } - else /* loop SSG-EG */ - { - /* toggle output inversion flag or reset Phase Generator */ - if (SLOT->ssg & 0x02) - SLOT->ssgn ^= 4; - else - SLOT->phase = 0; - - /* same as Key ON */ - if (SLOT->state != EG_ATT) - { - if ((SLOT->ar + SLOT->ksr) < 94 /*32+62*/) - { - SLOT->state = (SLOT->volume <= MIN_ATT_INDEX) ? ((SLOT->sl == MIN_ATT_INDEX) ? EG_SUS : EG_DEC) : EG_ATT; - } - else - { - /* Attack Rate is maximal: directly switch to Decay or Substain */ - SLOT->volume = MIN_ATT_INDEX; - SLOT->state = (SLOT->sl == MIN_ATT_INDEX) ? EG_SUS : EG_DEC; - } - } - } - - /* recalculate EG output */ - if (SLOT->ssgn ^ (SLOT->ssg&0x04)) - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - - /* next slot */ - SLOT++; - } while (--j); - - /* next channel */ - CH++; - } while (--i); -} - -INLINE void update_phase_lfo_slot(FM_SLOT *SLOT, INT32 pms, UINT32 block_fnum) -{ - INT32 lfo_fn_table_index_offset = lfo_pm_table[(((block_fnum & 0x7f0) >> 4) << 8) + pms + ym2612.OPN.LFO_PM]; - - if (lfo_fn_table_index_offset) /* LFO phase modulation active */ - { - UINT8 blk; - unsigned int kc, fc; - - /* there are 2048 FNUMs that can be generated using FNUM/BLK registers - but LFO works with one more bit of a precision so we really need 4096 elements */ - block_fnum = block_fnum*2 + lfo_fn_table_index_offset; - blk = (block_fnum&0x7000) >> 12; - block_fnum = block_fnum & 0xfff; - - /* keyscale code */ - kc = (blk<<2) | opn_fktable[block_fnum >> 8]; - - /* (frequency) phase increment counter */ - fc = (((block_fnum << 5) >> (7 - blk)) + SLOT->DT[kc]) & DT_MASK; - - /* update phase */ - SLOT->phase += (fc * SLOT->mul) >> 1; - } - else /* LFO phase modulation = zero */ - { - SLOT->phase += SLOT->Incr; - } -} - -INLINE void update_phase_lfo_channel(FM_CH *CH) -{ - UINT32 block_fnum = CH->block_fnum; - - INT32 lfo_fn_table_index_offset = lfo_pm_table[(((block_fnum & 0x7f0) >> 4) << 8) + CH->pms + ym2612.OPN.LFO_PM]; - - if (lfo_fn_table_index_offset) /* LFO phase modulation active */ - { - UINT8 blk; - unsigned int kc, fc, finc; - - /* there are 2048 FNUMs that can be generated using FNUM/BLK registers - but LFO works with one more bit of a precision so we really need 4096 elements */ - block_fnum = block_fnum*2 + lfo_fn_table_index_offset; - blk = (block_fnum&0x7000) >> 12; - block_fnum = block_fnum & 0xfff; - - /* keyscale code */ - kc = (blk<<2) | opn_fktable[block_fnum >> 8]; - - /* (frequency) phase increment counter */ - fc = (block_fnum << 5) >> (7 - blk); - - /* apply DETUNE & MUL operator specific values */ - finc = (fc + CH->SLOT[SLOT1].DT[kc]) & DT_MASK; - CH->SLOT[SLOT1].phase += (finc*CH->SLOT[SLOT1].mul) >> 1; - - finc = (fc + CH->SLOT[SLOT2].DT[kc]) & DT_MASK; - CH->SLOT[SLOT2].phase += (finc*CH->SLOT[SLOT2].mul) >> 1; - - finc = (fc + CH->SLOT[SLOT3].DT[kc]) & DT_MASK; - CH->SLOT[SLOT3].phase += (finc*CH->SLOT[SLOT3].mul) >> 1; - - finc = (fc + CH->SLOT[SLOT4].DT[kc]) & DT_MASK; - CH->SLOT[SLOT4].phase += (finc*CH->SLOT[SLOT4].mul) >> 1; - } - else /* LFO phase modulation = zero */ - { - CH->SLOT[SLOT1].phase += CH->SLOT[SLOT1].Incr; - CH->SLOT[SLOT2].phase += CH->SLOT[SLOT2].Incr; - CH->SLOT[SLOT3].phase += CH->SLOT[SLOT3].Incr; - CH->SLOT[SLOT4].phase += CH->SLOT[SLOT4].Incr; - } -} - -/* update phase increment and envelope generator */ -INLINE void refresh_fc_eg_slot(FM_SLOT *SLOT , unsigned int fc , unsigned int kc ) -{ - /* add detune value */ - fc += SLOT->DT[kc]; - - /* (frequency) phase overflow (credits to Nemesis) */ - fc &= DT_MASK; - - /* (frequency) phase increment counter */ - SLOT->Incr = (fc * SLOT->mul) >> 1; - - /* ksr */ - kc = kc >> SLOT->KSR; - - if( SLOT->ksr != kc ) - { - SLOT->ksr = kc; - - /* recalculate envelope generator rates */ - if ((SLOT->ar + kc) < (32+62)) - { - SLOT->eg_sh_ar = eg_rate_shift [SLOT->ar + kc ]; - SLOT->eg_sel_ar = eg_rate_select[SLOT->ar + kc ]; - } - else - { - /* verified by Nemesis on real hardware (Attack phase is blocked) */ - SLOT->eg_sh_ar = 0; - SLOT->eg_sel_ar = 18*RATE_STEPS; - } - - SLOT->eg_sh_d1r = eg_rate_shift [SLOT->d1r + kc]; - SLOT->eg_sel_d1r= eg_rate_select[SLOT->d1r + kc]; - - SLOT->eg_sh_d2r = eg_rate_shift [SLOT->d2r + kc]; - SLOT->eg_sel_d2r= eg_rate_select[SLOT->d2r + kc]; - - SLOT->eg_sh_rr = eg_rate_shift [SLOT->rr + kc]; - SLOT->eg_sel_rr = eg_rate_select[SLOT->rr + kc]; - } -} - -/* update phase increment counters */ -INLINE void refresh_fc_eg_chan(FM_CH *CH ) -{ - if( CH->SLOT[SLOT1].Incr==-1) - { - int fc = CH->fc; - int kc = CH->kcode; - refresh_fc_eg_slot(&CH->SLOT[SLOT1] , fc , kc ); - refresh_fc_eg_slot(&CH->SLOT[SLOT2] , fc , kc ); - refresh_fc_eg_slot(&CH->SLOT[SLOT3] , fc , kc ); - refresh_fc_eg_slot(&CH->SLOT[SLOT4] , fc , kc ); - } -} - -#define volume_calc(OP) ((OP)->vol_out + (AM & (OP)->AMmask)) - -INLINE signed int op_calc(UINT32 phase, unsigned int env, unsigned int pm) -{ - UINT32 p = (env<<3) + sin_tab[ ( (phase >> SIN_BITS) + (pm >> 1) ) & SIN_MASK ]; - - if (p >= TL_TAB_LEN) - return 0; - return tl_tab[p]; -} - -INLINE signed int op_calc1(UINT32 phase, unsigned int env, unsigned int pm) -{ - UINT32 p = (env<<3) + sin_tab[ ( (phase + pm ) >> SIN_BITS ) & SIN_MASK ]; - - if (p >= TL_TAB_LEN) - return 0; - return tl_tab[p]; -} - -INLINE void chan_calc(FM_CH *CH, int num) -{ - do - { - UINT32 AM = ym2612.OPN.LFO_AM >> CH->ams; - unsigned int eg_out = volume_calc(&CH->SLOT[SLOT1]); - - m2 = c1 = c2 = mem = 0; - - *CH->mem_connect = CH->mem_value; /* restore delayed sample (MEM) value to m2 or c2 */ - { - INT32 out = CH->op1_out[0] + CH->op1_out[1]; - CH->op1_out[0] = CH->op1_out[1]; - - if( !CH->connect1 ){ - /* algorithm 5 */ - mem = c1 = c2 = CH->op1_out[0]; - }else{ - /* other algorithms */ - *CH->connect1 += CH->op1_out[0]; - } - - CH->op1_out[1] = 0; - if( eg_out < ENV_QUIET ) /* SLOT 1 */ - { - if (!CH->FB) - out=0; - - CH->op1_out[1] = op_calc1(CH->SLOT[SLOT1].phase, eg_out, (out<FB) ); - } - } - - eg_out = volume_calc(&CH->SLOT[SLOT3]); - if( eg_out < ENV_QUIET ) /* SLOT 3 */ - *CH->connect3 += op_calc(CH->SLOT[SLOT3].phase, eg_out, m2); - - eg_out = volume_calc(&CH->SLOT[SLOT2]); - if( eg_out < ENV_QUIET ) /* SLOT 2 */ - *CH->connect2 += op_calc(CH->SLOT[SLOT2].phase, eg_out, c1); - - eg_out = volume_calc(&CH->SLOT[SLOT4]); - if( eg_out < ENV_QUIET ) /* SLOT 4 */ - *CH->connect4 += op_calc(CH->SLOT[SLOT4].phase, eg_out, c2); - - - /* store current MEM */ - CH->mem_value = mem; - - /* update phase counters AFTER output calculations */ - if(CH->pms) - { - /* add support for 3 slot mode */ - if ((ym2612.OPN.ST.mode & 0xC0) && (CH == &ym2612.CH[2])) - { - update_phase_lfo_slot(&CH->SLOT[SLOT1], CH->pms, ym2612.OPN.SL3.block_fnum[1]); - update_phase_lfo_slot(&CH->SLOT[SLOT2], CH->pms, ym2612.OPN.SL3.block_fnum[2]); - update_phase_lfo_slot(&CH->SLOT[SLOT3], CH->pms, ym2612.OPN.SL3.block_fnum[0]); - update_phase_lfo_slot(&CH->SLOT[SLOT4], CH->pms, CH->block_fnum); - } - else - { - update_phase_lfo_channel(CH); - } - } - else /* no LFO phase modulation */ - { - CH->SLOT[SLOT1].phase += CH->SLOT[SLOT1].Incr; - CH->SLOT[SLOT2].phase += CH->SLOT[SLOT2].Incr; - CH->SLOT[SLOT3].phase += CH->SLOT[SLOT3].Incr; - CH->SLOT[SLOT4].phase += CH->SLOT[SLOT4].Incr; - } - - /* next channel */ - CH++; - } while (--num); -} - -/* write a OPN mode register 0x20-0x2f */ -INLINE void OPNWriteMode(int r, int v) -{ - UINT8 c; - FM_CH *CH; - - switch(r){ - case 0x21: /* Test */ - break; - - case 0x22: /* LFO FREQ (YM2608/YM2610/YM2610B/ym2612) */ - if (v&8) /* LFO enabled ? */ - { - ym2612.OPN.lfo_timer_overflow = lfo_samples_per_step[v&7]; - } - else - { - /* hold LFO waveform in reset state */ - ym2612.OPN.lfo_timer_overflow = 0; - ym2612.OPN.lfo_timer = 0; - ym2612.OPN.lfo_cnt = 0; - ym2612.OPN.LFO_PM = 0; - ym2612.OPN.LFO_AM = 126; - } - break; - case 0x24: /* timer A High 8*/ - ym2612.OPN.ST.TA = (ym2612.OPN.ST.TA & 0x03)|(((int)v)<<2); - ym2612.OPN.ST.TAL = 1024 - ym2612.OPN.ST.TA; - break; - case 0x25: /* timer A Low 2*/ - ym2612.OPN.ST.TA = (ym2612.OPN.ST.TA & 0x3fc)|(v&3); - ym2612.OPN.ST.TAL = 1024 - ym2612.OPN.ST.TA; - break; - case 0x26: /* timer B */ - ym2612.OPN.ST.TB = v; - ym2612.OPN.ST.TBL = (256 - v) << 4; - break; - case 0x27: /* mode, timer control */ - set_timers(v); - break; - case 0x28: /* key on / off */ - c = v & 0x03; - if( c == 3 ) break; - if (v&0x04) c+=3; /* CH 4-6 */ - CH = &ym2612.CH[c]; - - if (v&0x10) FM_KEYON(CH,SLOT1); else FM_KEYOFF(CH,SLOT1); - if (v&0x20) FM_KEYON(CH,SLOT2); else FM_KEYOFF(CH,SLOT2); - if (v&0x40) FM_KEYON(CH,SLOT3); else FM_KEYOFF(CH,SLOT3); - if (v&0x80) FM_KEYON(CH,SLOT4); else FM_KEYOFF(CH,SLOT4); - break; - } -} - -/* write a OPN register (0x30-0xff) */ -INLINE void OPNWriteReg(int r, int v) -{ - FM_CH *CH; - FM_SLOT *SLOT; - - UINT8 c = OPN_CHAN(r); - - if (c == 3) return; /* 0xX3,0xX7,0xXB,0xXF */ - - if (r >= 0x100) c+=3; - - CH = &ym2612.CH[c]; - - SLOT = &(CH->SLOT[OPN_SLOT(r)]); - - switch( r & 0xf0 ) { - case 0x30: /* DET , MUL */ - set_det_mul(CH,SLOT,v); - break; - - case 0x40: /* TL */ - set_tl(SLOT,v); - break; - - case 0x50: /* KS, AR */ - set_ar_ksr(CH,SLOT,v); - break; - - case 0x60: /* bit7 = AM ENABLE, DR */ - set_dr(SLOT,v); - SLOT->AMmask = (v&0x80) ? ~0 : 0; - break; - - case 0x70: /* SR */ - set_sr(SLOT,v); - break; - - case 0x80: /* SL, RR */ - set_sl_rr(SLOT,v); - break; - - case 0x90: /* SSG-EG */ - SLOT->ssg = v&0x0f; - - /* recalculate EG output */ - if (SLOT->state > EG_REL) - { - if ((SLOT->ssg&0x08) && (SLOT->ssgn ^ (SLOT->ssg&0x04))) - SLOT->vol_out = ((UINT32)(0x200 - SLOT->volume) & MAX_ATT_INDEX) + SLOT->tl; - else - SLOT->vol_out = (UINT32)SLOT->volume + SLOT->tl; - } - - /* SSG-EG envelope shapes : - - E AtAlH - 1 0 0 0 \\\\ - - 1 0 0 1 \___ - - 1 0 1 0 \/\/ - ___ - 1 0 1 1 \ - - 1 1 0 0 //// - ___ - 1 1 0 1 / - - 1 1 1 0 /\/\ - - 1 1 1 1 /___ - - - E = SSG-EG enable - - - The shapes are generated using Attack, Decay and Sustain phases. - - Each single character in the diagrams above represents this whole - sequence: - - - when KEY-ON = 1, normal Attack phase is generated (*without* any - difference when compared to normal mode), - - - later, when envelope level reaches minimum level (max volume), - the EG switches to Decay phase (which works with bigger steps - when compared to normal mode - see below), - - - later when envelope level passes the SL level, - the EG swithes to Sustain phase (which works with bigger steps - when compared to normal mode - see below), - - - finally when envelope level reaches maximum level (min volume), - the EG switches to Attack phase again (depends on actual waveform). - - Important is that when switch to Attack phase occurs, the phase counter - of that operator will be zeroed-out (as in normal KEY-ON) but not always. - (I havent found the rule for that - perhaps only when the output level is low) - - The difference (when compared to normal Envelope Generator mode) is - that the resolution in Decay and Sustain phases is 4 times lower; - this results in only 256 steps instead of normal 1024. - In other words: - when SSG-EG is disabled, the step inside of the EG is one, - when SSG-EG is enabled, the step is four (in Decay and Sustain phases). - - Times between the level changes are the same in both modes. - - - Important: - Decay 1 Level (so called SL) is compared to actual SSG-EG output, so - it is the same in both SSG and no-SSG modes, with this exception: - - when the SSG-EG is enabled and is generating raising levels - (when the EG output is inverted) the SL will be found at wrong level !!! - For example, when SL=02: - 0 -6 = -6dB in non-inverted EG output - 96-6 = -90dB in inverted EG output - Which means that EG compares its level to SL as usual, and that the - output is simply inverted afterall. - - - The Yamaha's manuals say that AR should be set to 0x1f (max speed). - That is not necessary, but then EG will be generating Attack phase. - - */ - - - break; - - case 0xa0: - switch( OPN_SLOT(r) ){ - case 0: /* 0xa0-0xa2 : FNUM1 */ - { - UINT32 fn = (((UINT32)((ym2612.OPN.ST.fn_h)&7))<<8) + v; - UINT8 blk = ym2612.OPN.ST.fn_h>>3; - /* keyscale code */ - CH->kcode = (blk<<2) | opn_fktable[fn >> 7]; - /* phase increment counter */ - CH->fc = (fn << 6) >> (7 - blk); - - /* store fnum in clear form for LFO PM calculations */ - CH->block_fnum = (blk<<11) | fn; - - CH->SLOT[SLOT1].Incr=-1; - break; - } - case 1: /* 0xa4-0xa6 : FNUM2,BLK */ - ym2612.OPN.ST.fn_h = v&0x3f; - break; - case 2: /* 0xa8-0xaa : 3CH FNUM1 */ - if(r < 0x100) - { - UINT32 fn = (((UINT32)(ym2612.OPN.SL3.fn_h&7))<<8) + v; - UINT8 blk = ym2612.OPN.SL3.fn_h>>3; - /* keyscale code */ - ym2612.OPN.SL3.kcode[c]= (blk<<2) | opn_fktable[fn >> 7]; - /* phase increment counter */ - ym2612.OPN.SL3.fc[c] = (fn << 6) >> (7 - blk); - ym2612.OPN.SL3.block_fnum[c] = (blk<<11) | fn; - ym2612.CH[2].SLOT[SLOT1].Incr=-1; - } - break; - case 3: /* 0xac-0xae : 3CH FNUM2,BLK */ - if(r < 0x100) - ym2612.OPN.SL3.fn_h = v&0x3f; - break; - } - break; - - case 0xb0: - switch( OPN_SLOT(r) ){ - case 0: /* 0xb0-0xb2 : FB,ALGO */ - { - CH->ALGO = v&7; - CH->FB = (v>>3)&7; - setup_connection( CH, c ); - break; - } - case 1: /* 0xb4-0xb6 : L , R , AMS , PMS */ - /* b0-2 PMS */ - CH->pms = (v & 7) * 32; /* CH->pms = PM depth * 32 (index in lfo_pm_table) */ - - /* b4-5 AMS */ - CH->ams = lfo_ams_depth_shift[(v>>4) & 0x03]; - - /* PAN : b7 = L, b6 = R */ - ym2612.OPN.pan[ c*2 ] = (v & 0x80) ? bitmask : 0; - ym2612.OPN.pan[ c*2+1 ] = (v & 0x40) ? bitmask : 0; - break; - } - break; - } -} - -static void reset_channels(FM_CH *CH , int num ) -{ - int c,s; - - for( c = 0 ; c < num ; c++ ) - { - CH[c].mem_value = 0; - CH[c].op1_out[0] = 0; - CH[c].op1_out[1] = 0; - for(s = 0 ; s < 4 ; s++ ) - { - CH[c].SLOT[s].Incr = -1; - CH[c].SLOT[s].key = 0; - CH[c].SLOT[s].phase = 0; - CH[c].SLOT[s].ssgn = 0; - CH[c].SLOT[s].state = EG_OFF; - CH[c].SLOT[s].volume = MAX_ATT_INDEX; - CH[c].SLOT[s].vol_out = MAX_ATT_INDEX; - } - } -} - -/* initialize generic tables */ -static void init_tables(void) -{ - signed int d,i,x; - signed int n; - double o,m; - - /* build Linear Power Table */ - for (x=0; x>= 4; /* 12 bits here */ - if (n&1) /* round to nearest */ - n = (n>>1)+1; - else - n = n>>1; - /* 11 bits here (rounded) */ - n <<= 2; /* 13 bits here (as in real chip) */ - - /* 14 bits (with sign bit) */ - tl_tab[ x*2 + 0 ] = n; - tl_tab[ x*2 + 1 ] = -tl_tab[ x*2 + 0 ]; - - /* one entry in the 'Power' table use the following format, xxxxxyyyyyyyys with: */ - /* s = sign bit */ - /* yyyyyyyy = 8-bits decimal part (0-TL_RES_LEN) */ - /* xxxxx = 5-bits integer 'shift' value (0-31) but, since Power table output is 13 bits, */ - /* any value above 13 (included) would be discarded. */ - for (i=1; i<13; i++) - { - tl_tab[ x*2+0 + i*2*TL_RES_LEN ] = tl_tab[ x*2+0 ]>>i; - tl_tab[ x*2+1 + i*2*TL_RES_LEN ] = -tl_tab[ x*2+0 + i*2*TL_RES_LEN ]; - } - } - - /* build Logarithmic Sinus table */ - for (i=0; i0.0) - o = 8*log(1.0/m)/log(2); /* convert to 'decibels' */ - else - o = 8*log(-1.0/m)/log(2); /* convert to 'decibels' */ - - o = o / (ENV_STEP/4); - - n = (int)(2.0*o); - if (n&1) /* round to nearest */ - n = (n>>1)+1; - else - n = n>>1; - - /* 13-bits (8.5) value is formatted for above 'Power' table */ - sin_tab[ i ] = n*2 + (m>=0.0? 0: 1 ); - } - - /* build LFO PM modulation table */ - for(i = 0; i < 8; i++) /* 8 PM depths */ - { - UINT8 fnum; - for (fnum=0; fnum<128; fnum++) /* 7 bits meaningful of F-NUMBER */ - { - UINT8 value; - UINT8 step; - UINT32 offset_depth = i; - UINT32 offset_fnum_bit; - UINT32 bit_tmp; - - for (step=0; step<8; step++) - { - value = 0; - for (bit_tmp=0; bit_tmp<7; bit_tmp++) /* 7 bits */ - { - if (fnum & (1<= 0xb4 ; i-- ) - { - OPNWriteReg(i ,0xc0); - OPNWriteReg(i|0x100,0xc0); - } - for(i = 0xb2 ; i >= 0x30 ; i-- ) - { - OPNWriteReg(i ,0); - OPNWriteReg(i|0x100,0); - } -} - -/* ym2612 write */ -/* n = number */ -/* a = address */ -/* v = value */ -void YM2612Write(unsigned int a, unsigned int v) -{ - v &= 0xff; /* adjust to 8 bit bus */ - - switch( a ) - { - case 0: /* address port 0 */ - ym2612.OPN.ST.address = v; - break; - - case 2: /* address port 1 */ - ym2612.OPN.ST.address = v | 0x100; - break; - - default: /* data port */ - { - int addr = ym2612.OPN.ST.address; /* verified by Nemesis on real YM2612 */ - switch( addr & 0x1f0 ) - { - case 0x20: /* 0x20-0x2f Mode */ - switch( addr ) - { - case 0x2a: /* DAC data (ym2612) */ - ym2612.dacout = ((int)v - 0x80) << 6; /* convert to 14-bit output */ - break; - case 0x2b: /* DAC Sel (ym2612) */ - /* b7 = dac enable */ - ym2612.dacen = v & 0x80; - break; - default: /* OPN section */ - /* write register */ - OPNWriteMode(addr,v); - } - break; - default: /* 0x30-0xff OPN section */ - /* write register */ - OPNWriteReg(addr,v); - } - break; - } - } -} - -unsigned int YM2612Read(void) -{ - return ym2612.OPN.ST.status & 0xff; -} - -/* Generate samples for ym2612 */ -void YM2612Update(int *buffer, int length) -{ - int i; - int lt,rt; - - /* refresh PG increments and EG rates if required */ - refresh_fc_eg_chan(&ym2612.CH[0]); - refresh_fc_eg_chan(&ym2612.CH[1]); - - if (!(ym2612.OPN.ST.mode & 0xC0)) - { - refresh_fc_eg_chan(&ym2612.CH[2]); - } - else - { - /* 3SLOT MODE (operator order is 0,1,3,2) */ - if(ym2612.CH[2].SLOT[SLOT1].Incr==-1) - { - refresh_fc_eg_slot(&ym2612.CH[2].SLOT[SLOT1] , ym2612.OPN.SL3.fc[1] , ym2612.OPN.SL3.kcode[1] ); - refresh_fc_eg_slot(&ym2612.CH[2].SLOT[SLOT2] , ym2612.OPN.SL3.fc[2] , ym2612.OPN.SL3.kcode[2] ); - refresh_fc_eg_slot(&ym2612.CH[2].SLOT[SLOT3] , ym2612.OPN.SL3.fc[0] , ym2612.OPN.SL3.kcode[0] ); - refresh_fc_eg_slot(&ym2612.CH[2].SLOT[SLOT4] , ym2612.CH[2].fc , ym2612.CH[2].kcode ); - } - } - - refresh_fc_eg_chan(&ym2612.CH[3]); - refresh_fc_eg_chan(&ym2612.CH[4]); - refresh_fc_eg_chan(&ym2612.CH[5]); - - /* buffering */ - for(i=0; i < length ; i++) - { - /* clear outputs */ - out_fm[0] = 0; - out_fm[1] = 0; - out_fm[2] = 0; - out_fm[3] = 0; - out_fm[4] = 0; - out_fm[5] = 0; - - /* update SSG-EG output */ - update_ssg_eg_channels(&ym2612.CH[0]); - - /* calculate FM */ - if (!ym2612.dacen) - { - chan_calc(&ym2612.CH[0],6); - } - else - { - /* DAC Mode */ - out_fm[5] = ym2612.dacout; - chan_calc(&ym2612.CH[0],5); - } - - /* advance LFO */ - advance_lfo(); - - /* advance envelope generator */ - ym2612.OPN.eg_timer ++; - - /* EG is updated every 3 samples */ - if (ym2612.OPN.eg_timer >= 3) - { - ym2612.OPN.eg_timer = 0; - ym2612.OPN.eg_cnt++; - advance_eg_channels(&ym2612.CH[0], ym2612.OPN.eg_cnt); - } - - /* 14-bit accumulator channels outputs (range is -8192;+8192) */ - if (out_fm[0] > 8192) out_fm[0] = 8192; - else if (out_fm[0] < -8192) out_fm[0] = -8192; - if (out_fm[1] > 8192) out_fm[1] = 8192; - else if (out_fm[1] < -8192) out_fm[1] = -8192; - if (out_fm[2] > 8192) out_fm[2] = 8192; - else if (out_fm[2] < -8192) out_fm[2] = -8192; - if (out_fm[3] > 8192) out_fm[3] = 8192; - else if (out_fm[3] < -8192) out_fm[3] = -8192; - if (out_fm[4] > 8192) out_fm[4] = 8192; - else if (out_fm[4] < -8192) out_fm[4] = -8192; - if (out_fm[5] > 8192) out_fm[5] = 8192; - else if (out_fm[5] < -8192) out_fm[5] = -8192; - - /* stereo DAC channels outputs mixing */ - lt = ((out_fm[0]) & ym2612.OPN.pan[0]); - rt = ((out_fm[0]) & ym2612.OPN.pan[1]); - lt += ((out_fm[1]) & ym2612.OPN.pan[2]); - rt += ((out_fm[1]) & ym2612.OPN.pan[3]); - lt += ((out_fm[2]) & ym2612.OPN.pan[4]); - rt += ((out_fm[2]) & ym2612.OPN.pan[5]); - lt += ((out_fm[3]) & ym2612.OPN.pan[6]); - rt += ((out_fm[3]) & ym2612.OPN.pan[7]); - lt += ((out_fm[4]) & ym2612.OPN.pan[8]); - rt += ((out_fm[4]) & ym2612.OPN.pan[9]); - lt += ((out_fm[5]) & ym2612.OPN.pan[10]); - rt += ((out_fm[5]) & ym2612.OPN.pan[11]); - - /* buffering */ - *buffer++ = lt; - *buffer++ = rt; - - /* CSM mode: if CSM Key ON has occured, CSM Key OFF need to be sent */ - /* only if Timer A does not overflow again (i.e CSM Key ON not set again) */ - ym2612.OPN.SL3.key_csm <<= 1; - - /* timer A control */ - INTERNAL_TIMER_A(); - - /* CSM Mode Key ON still disabled */ - if (ym2612.OPN.SL3.key_csm & 2) - { - /* CSM Mode Key OFF (verified by Nemesis on real hardware) */ - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT1); - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT2); - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT3); - FM_KEYOFF_CSM(&ym2612.CH[2],SLOT4); - ym2612.OPN.SL3.key_csm = 0; - } - } - - /* timer B control */ - INTERNAL_TIMER_B(length); -} - -void YM2612Config(unsigned char dac_bits) -{ - int i; - - /* DAC precision (normally 9-bit on real hardware, implemented through simple 14-bit channel output bitmasking) */ - bitmask = ~((1 << (TL_BITS - dac_bits)) - 1); - - /* update L/R panning bitmasks */ - for (i=0; i<2*6; i++) - { - if (ym2612.OPN.pan[i]) - { - ym2612.OPN.pan[i] = bitmask; - } - } -} diff --git a/waterbox/gpgx/core/sound/ym2612.h b/waterbox/gpgx/core/sound/ym2612.h deleted file mode 100644 index c9105a8561..0000000000 --- a/waterbox/gpgx/core/sound/ym2612.h +++ /dev/null @@ -1,28 +0,0 @@ -/* -** -** software implementation of Yamaha FM sound generator (YM2612/YM3438) -** -** Original code (MAME fm.c) -** -** Copyright (C) 2001, 2002, 2003 Jarek Burczynski (bujar at mame dot net) -** Copyright (C) 1998 Tatsuyuki Satoh , MultiArcadeMachineEmulator development -** -** Version 1.4 (final beta) -** -** Additional code & fixes by Eke-Eke for Genesis Plus GX -** -*/ - -#ifndef _H_YM2612_ -#define _H_YM2612_ - -extern void YM2612Init(void); -extern void YM2612Config(unsigned char dac_bits); -extern void YM2612ResetChip(void); -extern void YM2612Update(int *buffer, int length); -extern void YM2612Write(unsigned int a, unsigned int v); -extern unsigned int YM2612Read(void); - -extern INT32 *ym2612_lfo_pm_table; - -#endif /* _YM2612_ */ diff --git a/waterbox/gpgx/core/system.c b/waterbox/gpgx/core/system.c deleted file mode 100644 index 01931ad4c1..0000000000 --- a/waterbox/gpgx/core/system.c +++ /dev/null @@ -1,1385 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Virtual System emulation - * - * Support for "Genesis", "Genesis + CD" & "Master System" modes - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "eq.h" - -/* Global variables */ -t_bitmap bitmap; -t_snd snd; -uint32 mcycles_vdp; -uint8 system_hw; -uint8 system_bios; -uint32 system_clock; -const int16 SVP_cycles = 800; - -uint8 pause_b; -static EQSTATE eq[2]; -int16 llp,rrp; - -/******************************************************************************************/ -/* Audio subsystem */ -/******************************************************************************************/ - -int audio_init(int samplerate, double framerate) -{ - /* Number of M-cycles executed per second. */ - /* All emulated chips are kept in sync by using a common oscillator (MCLOCK) */ - /* */ - /* The original console would run exactly 53693175 M-cycles per sec (53203424 for PAL), */ - /* 3420 M-cycles per line and 262 (313 for PAL) lines per frame, which gives an exact */ - /* framerate of 59.92 (49.70 for PAL) frames per second. */ - /* */ - /* Since audio samples are generated at the end of the frame, to prevent audio skipping */ - /* or lag between emulated frames, number of samples rendered per frame must be set to */ - /* output samplerate (number of samples played per second) divided by input framerate */ - /* (number of frames emulated per seconds). */ - /* */ - /* On some systems, we may want to achieve 100% smooth video rendering by synchronizing */ - /* frame emulation with VSYNC, which frequency is generally not exactly those values. */ - /* In that case, input framerate (number of frames emulated per seconds) is the same as */ - /* output framerate (number of frames rendered per seconds) by the host video hardware. */ - /* */ - /* When no framerate is specified, base clock is set to original master clock value. */ - /* Otherwise, it is set to number of M-cycles emulated per line (fixed) multiplied by */ - /* number of lines per frame (VDP mode specific) multiplied by input framerate. */ - /* */ - double mclk = framerate ? (MCYCLES_PER_LINE * (vdp_pal ? 313 : 262) * framerate) : system_clock; - - /* Shutdown first */ - audio_shutdown(); - - /* Clear the sound data context */ - memset(&snd, 0, sizeof (snd)); - - /* Initialize audio rates */ - snd.sample_rate = samplerate; - snd.frame_rate = framerate; - - /* Initialize Blip Buffers */ - snd.blips[0][0] = blip_new(samplerate / 10); - snd.blips[0][1] = blip_new(samplerate / 10); - if (!snd.blips[0][0] || !snd.blips[0][1]) - { - audio_shutdown(); - return -1; - } - - /* For maximal accuracy, sound chips are running at their original rate using common */ - /* master clock timebase so they remain perfectly synchronized together, while still */ - /* being synchronized with 68K and Z80 CPUs as well. Mixed sound chip output is then */ - /* resampled to desired rate at the end of each frame, using Blip Buffer. */ - blip_set_rates(snd.blips[0][0], mclk, samplerate); - blip_set_rates(snd.blips[0][1], mclk, samplerate); - - /* Initialize PSG core */ - SN76489_Init(snd.blips[0][0], snd.blips[0][1], (system_hw < SYSTEM_MARKIII) ? SN_DISCRETE : SN_INTEGRATED); - - /* Mega CD sound hardware */ - if (system_hw == SYSTEM_MCD) - { - /* allocate blip buffers */ - snd.blips[1][0] = blip_new(samplerate / 10); - snd.blips[1][1] = blip_new(samplerate / 10); - snd.blips[2][0] = blip_new(samplerate / 10); - snd.blips[2][1] = blip_new(samplerate / 10); - if (!snd.blips[1][0] || !snd.blips[1][1] || !snd.blips[2][0] || !snd.blips[2][1]) - { - audio_shutdown(); - return -1; - } - - /* Initialize PCM core */ - pcm_init(snd.blips[1][0], snd.blips[1][1]); - - /* Initialize CDD core */ - cdd_init(snd.blips[2][0], snd.blips[2][1]); - } - - /* Set audio enable flag */ - snd.enabled = 1; - - /* Reset audio */ - audio_reset(); - - return (0); -} - -void audio_reset(void) -{ - int i,j; - - /* Clear blip buffers */ - for (i=0; i<3; i++) - { - for (j=0; j<2; j++) - { - if (snd.blips[i][j]) - { - blip_clear(snd.blips[i][j]); - } - } - } - - /* Low-Pass filter */ - llp = 0; - rrp = 0; - - /* 3 band EQ */ - audio_set_equalizer(); -} - -void audio_set_equalizer(void) -{ - init_3band_state(&eq[0],config.low_freq,config.high_freq,snd.sample_rate); - init_3band_state(&eq[1],config.low_freq,config.high_freq,snd.sample_rate); - eq[0].lg = eq[1].lg = (double)(config.lg) / 100.0; - eq[0].mg = eq[1].mg = (double)(config.mg) / 100.0; - eq[0].hg = eq[1].hg = (double)(config.hg) / 100.0; -} - -void audio_shutdown(void) -{ - int i,j; - - /* Delete blip buffers */ - for (i=0; i<3; i++) - { - for (j=0; j<2; j++) - { - blip_delete(snd.blips[i][j]); - snd.blips[i][j] = 0; - } - } -} - -int audio_update(int16 *buffer) -{ - /* run sound chips until end of frame */ - int size = sound_update(mcycles_vdp); - - /* Mega CD specific */ - if (system_hw == SYSTEM_MCD) - { - /* sync PCM chip with other sound chips */ - pcm_update(size); - - /* read CDDA samples */ - cdd_read_audio(size); - } - -#ifdef ALIGN_SND - /* return an aligned number of samples if required */ - size &= ALIGN_SND; -#endif - - /* resample FM & PSG mixed stream to output buffer */ -#ifdef LSB_FIRST - blip_read_samples(snd.blips[0][0], buffer, size); - blip_read_samples(snd.blips[0][1], buffer + 1, size); -#else - blip_read_samples(snd.blips[0][0], buffer + 1, size); - blip_read_samples(snd.blips[0][1], buffer, size); -#endif - - /* Mega CD specific */ - if (system_hw == SYSTEM_MCD) - { - /* resample PCM & CD-DA streams to output buffer */ -#ifdef LSB_FIRST - blip_mix_samples(snd.blips[1][0], buffer, size); - blip_mix_samples(snd.blips[1][1], buffer + 1, size); - blip_mix_samples(snd.blips[2][0], buffer, size); - blip_mix_samples(snd.blips[2][1], buffer + 1, size); -#else - blip_mix_samples(snd.blips[1][0], buffer + 1, size); - blip_mix_samples(snd.blips[1][1], buffer, size); - blip_mix_samples(snd.blips[2][0], buffer + 1, size); - blip_mix_samples(snd.blips[2][1], buffer, size); -#endif - } - - /* Audio filtering */ - if (config.filter) - { - int samples = size; - int16 *out = buffer; - int32 l, r; - - if (config.filter & 1) - { - /* single-pole low-pass filter (6 dB/octave) */ - uint32 factora = config.lp_range; - uint32 factorb = 0x10000 - factora; - - /* restore previous sample */ - l = llp; - r = rrp; - - do - { - /* apply low-pass filter */ - l = l*factora + out[0]*factorb; - r = r*factora + out[1]*factorb; - - /* 16.16 fixed point */ - l >>= 16; - r >>= 16; - - /* update sound buffer */ - *out++ = l; - *out++ = r; - } - while (--samples); - - /* save last samples for next frame */ - llp = l; - rrp = r; - } - else if (config.filter & 2) - { - do - { - /* 3 Band EQ */ - l = do_3band(&eq[0],out[0]); - r = do_3band(&eq[1],out[1]); - - /* clipping (16-bit samples) */ - if (l > 32767) l = 32767; - else if (l < -32768) l = -32768; - if (r > 32767) r = 32767; - else if (r < -32768) r = -32768; - - /* update sound buffer */ - *out++ = l; - *out++ = r; - } - while (--samples); - } - } - - /* Mono output mixing */ - if (config.mono) - { - int16 out; - int samples = size; - do - { - out = (buffer[0] + buffer[1]) / 2; - *buffer++ = out; - *buffer++ = out; - } - while (--samples); - } - -#ifdef LOGSOUND - error("%d samples returned\n\n",size); -#endif - - return size; -} - -/**************************************************************** - * Virtual System emulation - ****************************************************************/ -void system_init(void) -{ - gen_init(); - io_init(); - vdp_init(); - render_init(); - sound_init(); -} - -void system_reset(void) -{ - gen_reset(1); - io_reset(); - render_reset(); - vdp_reset(); - sound_reset(); - audio_reset(); -} - -void system_frame_gen(int do_skip) -{ - /* line counters */ - int start, end, line = 0; - - /* Z80 interrupt flag */ - int zirq = 1; - - /* reload H Counter */ - int h_counter = reg[10]; - - /* reset frame cycle counter */ - mcycles_vdp = 0; - - /* reload V Counter */ - v_counter = lines_per_frame - 1; - - /* reset VDP FIFO */ - fifo_write_cnt = 0; - fifo_slots = 0; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* display changed during VBLANK */ - if (bitmap.viewport.changed & 2) - { - /* interlaced modes */ - int old_interlaced = interlaced; - interlaced = (reg[12] & 0x02) >> 1; - - if (old_interlaced != interlaced) - { - /* double resolution mode */ - im2_flag = ((reg[12] & 0x06) == 0x06); - - /* reset field status flag */ - odd_frame = 1; - - /* video mode has changed */ - bitmap.viewport.changed = 5; - - /* update rendering mode */ - if (reg[1] & 0x04) - { - if (im2_flag) - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_im2_vs : render_bg_m5_im2; - render_obj = (reg[12] & 0x08) ? render_obj_m5_im2_ste : render_obj_m5_im2; - } - else - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_vs : render_bg_m5; - render_obj = (reg[12] & 0x08) ? render_obj_m5_ste : render_obj_m5; - } - } - } - else - { - /* clear flag */ - bitmap.viewport.changed &= ~2; - } - - /* active screen height */ - if (reg[1] & 0x04) - { - /* Mode 5 */ - if (reg[1] & 0x08) - { - /* 240 active lines */ - bitmap.viewport.h = 240; - bitmap.viewport.y = (config.overscan & 1) * 24 * vdp_pal; - } - else - { - /* 224 active lines */ - bitmap.viewport.h = 224; - bitmap.viewport.y = (config.overscan & 1) * (8 + (24 * vdp_pal)); - } - } - else - { - /* Mode 4 (192 active lines) */ - bitmap.viewport.h = 192; - bitmap.viewport.y = (config.overscan & 1) * 24 * (vdp_pal + 1); - } - - /* active screen width */ - bitmap.viewport.w = 256 + ((reg[12] & 0x01) << 6); - } - - /* clear VBLANK, DMA, FIFO FULL & field flags */ - status &= 0xFEE5; - - /* set FIFO EMPTY flag */ - status |= 0x0200; - - /* even/odd field flag (interlaced modes only) */ - odd_frame ^= 1; - if (interlaced) - { - status |= (odd_frame << 4); - } - - /* update VDP DMA */ - if (dma_length) - { - vdp_dma_update(0); - } - - /* render last line of overscan */ - if (bitmap.viewport.y > 0) - { - blank_line(v_counter, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* parse first line of sprites */ - if (reg[1] & 0x40) - { - parse_satb(-1); - } - - /* run 68k & Z80 */ - m68k_run(MCYCLES_PER_LINE); - if (zstate == 1) - { - z80_run(MCYCLES_PER_LINE); - } - else - { - Z80.cycles = MCYCLES_PER_LINE; - } - - /* run SVP chip */ - if (svp) - { - ssp1601_run(SVP_cycles); - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - - /* Active Display */ - do - { - /* update V Counter */ - v_counter = line; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* H Interrupt */ - if(--h_counter < 0) - { - /* reload H Counter */ - h_counter = reg[10]; - - /* interrupt level 4 */ - hint_pending = 0x10; - if (reg[0] & 0x10) - { - m68k_update_irq(4); - } - } - - /* update VDP DMA */ - if (dma_length) - { - vdp_dma_update(mcycles_vdp); - } - - /* render scanline */ - if (!do_skip) - { - render_line(line); - } - - /* run 68k & Z80 */ - m68k_run(mcycles_vdp + MCYCLES_PER_LINE); - if (zstate == 1) - { - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - } - else - { - Z80.cycles = mcycles_vdp + MCYCLES_PER_LINE; - } - - /* run SVP chip */ - if (svp) - { - ssp1601_run(SVP_cycles); - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - } - while (++line < bitmap.viewport.h); - - /* end of active display */ - v_counter = line; - - /* set VBLANK flag */ - status |= 0x08; - - /* overscan area */ - start = lines_per_frame - bitmap.viewport.y; - end = bitmap.viewport.h + bitmap.viewport.y; - - /* check viewport changes */ - if ((bitmap.viewport.w != bitmap.viewport.ow) || (bitmap.viewport.h != bitmap.viewport.oh)) - { - bitmap.viewport.ow = bitmap.viewport.w; - bitmap.viewport.oh = bitmap.viewport.h; - bitmap.viewport.changed |= 1; - } - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* H Interrupt */ - if(--h_counter < 0) - { - /* reload H Counter */ - h_counter = reg[10]; - - /* interrupt level 4 */ - hint_pending = 0x10; - if (reg[0] & 0x10) - { - m68k_update_irq(4); - } - } - - /* update VDP DMA */ - if (dma_length) - { - vdp_dma_update(mcycles_vdp); - } - - /* render overscan */ - if (line < end) - { - blank_line(line, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* update inputs before VINT (Warriors of Eternal Sun) */ - osd_input_update(); - - /* delay between VINT flag & V Interrupt (Ex-Mutants, Tyrant) */ - m68k_run(mcycles_vdp + 588); - status |= 0x80; - - /* delay between VBLANK flag & V Interrupt (Dracula, OutRunners, VR Troopers) */ - m68k_run(mcycles_vdp + 788); - if (zstate == 1) - { - z80_run(mcycles_vdp + 788); - } - else - { - Z80.cycles = mcycles_vdp + 788; - } - - /* V Interrupt */ - vint_pending = 0x20; - if (reg[1] & 0x20) - { - m68k_set_irq(6); - } - - /* assert Z80 interrupt */ - Z80.irq_state = ASSERT_LINE; - - /* run 68k & Z80 until end of line */ - m68k_run(mcycles_vdp + MCYCLES_PER_LINE); - if (zstate == 1) - { - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - } - else - { - Z80.cycles = mcycles_vdp + MCYCLES_PER_LINE; - } - - /* run SVP chip */ - if (svp) - { - ssp1601_run(SVP_cycles); - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - - /* increment line count */ - line++; - - /* Vertical Blanking */ - do - { - /* update V Counter */ - v_counter = line; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* render overscan */ - if ((line < end) || (line >= start)) - { - blank_line(line, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - if (zirq) - { - /* Z80 interrupt is asserted exactly for one line */ - m68k_run(mcycles_vdp + 788); - if (zstate == 1) - { - z80_run(mcycles_vdp + 788); - } - else - { - Z80.cycles = mcycles_vdp + 788; - } - - /* clear Z80 interrupt */ - Z80.irq_state = CLEAR_LINE; - zirq = 0; - } - - /* run 68k & Z80 */ - m68k_run(mcycles_vdp + MCYCLES_PER_LINE); - if (zstate == 1) - { - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - } - else - { - Z80.cycles = mcycles_vdp + MCYCLES_PER_LINE; - } - - /* run SVP chip */ - if (svp) - { - ssp1601_run(SVP_cycles); - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - } - while (++line < (lines_per_frame - 1)); - - /* adjust CPU cycle counters for next frame */ - m68k.cycles -= mcycles_vdp; - Z80.cycles -= mcycles_vdp; -} - -void system_frame_scd(int do_skip) -{ - /* line counters */ - int start, end, line = 0; - - /* Z80 interrupt flag */ - int zirq = 1; - - /* reload H Counter */ - int h_counter = reg[10]; - - /* reset frame cycle counters */ - mcycles_vdp = 0; - scd.cycles = 0; - - /* reload V Counter */ - v_counter = lines_per_frame - 1; - - /* reset VDP FIFO */ - fifo_write_cnt = 0; - fifo_slots = 0; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* display changed during VBLANK */ - if (bitmap.viewport.changed & 2) - { - /* interlaced modes */ - int old_interlaced = interlaced; - interlaced = (reg[12] & 0x02) >> 1; - - if (old_interlaced != interlaced) - { - /* double resolution mode */ - im2_flag = ((reg[12] & 0x06) == 0x06); - - /* reset field status flag */ - odd_frame = 1; - - /* video mode has changed */ - bitmap.viewport.changed = 5; - - /* update rendering mode */ - if (reg[1] & 0x04) - { - if (im2_flag) - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_im2_vs : render_bg_m5_im2; - render_obj = (reg[12] & 0x08) ? render_obj_m5_im2_ste : render_obj_m5_im2; - } - else - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_vs : render_bg_m5; - render_obj = (reg[12] & 0x08) ? render_obj_m5_ste : render_obj_m5; - } - } - } - else - { - /* clear flag */ - bitmap.viewport.changed &= ~2; - } - - /* active screen height */ - if (reg[1] & 0x04) - { - bitmap.viewport.h = 224 + ((reg[1] & 0x08) << 1); - bitmap.viewport.y = (config.overscan & 1) * ((240 + 48*vdp_pal - bitmap.viewport.h) >> 1); - } - else - { - bitmap.viewport.h = 192; - bitmap.viewport.y = (config.overscan & 1) * 24 * (vdp_pal + 1); - } - - /* active screen width */ - bitmap.viewport.w = 256 + ((reg[12] & 0x01) << 6); - } - - /* clear VBLANK, DMA, FIFO FULL & field flags */ - status &= 0xFEE5; - - /* set FIFO EMPTY flag */ - status |= 0x0200; - - /* even/odd field flag (interlaced modes only) */ - odd_frame ^= 1; - if (interlaced) - { - status |= (odd_frame << 4); - } - - /* update VDP DMA */ - if (dma_length) - { - vdp_dma_update(0); - } - - /* render last line of overscan */ - if (bitmap.viewport.y > 0) - { - blank_line(v_counter, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* parse first line of sprites */ - if (reg[1] & 0x40) - { - parse_satb(-1); - } - - /* run both 68k & CD hardware */ - scd_update(MCYCLES_PER_LINE); - - /* run Z80 */ - if (zstate == 1) - { - z80_run(MCYCLES_PER_LINE); - } - else - { - Z80.cycles = MCYCLES_PER_LINE; - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - - /* Active Display */ - do - { - /* update V Counter */ - v_counter = line; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* H Interrupt */ - if(--h_counter < 0) - { - /* reload H Counter */ - h_counter = reg[10]; - - /* interrupt level 4 */ - hint_pending = 0x10; - if (reg[0] & 0x10) - { - m68k_update_irq(4); - } - } - - /* update VDP DMA */ - if (dma_length) - { - vdp_dma_update(mcycles_vdp); - } - - /* render scanline */ - if (!do_skip) - { - render_line(line); - } - - /* run both 68k & CD hardware */ - scd_update(mcycles_vdp + MCYCLES_PER_LINE); - - /* run Z80 */ - if (zstate == 1) - { - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - } - else - { - Z80.cycles = mcycles_vdp + MCYCLES_PER_LINE; - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - } - while (++line < bitmap.viewport.h); - - /* end of active display */ - v_counter = line; - - /* set VBLANK flag */ - status |= 0x08; - - /* overscan area */ - start = lines_per_frame - bitmap.viewport.y; - end = bitmap.viewport.h + bitmap.viewport.y; - - /* check viewport changes */ - if ((bitmap.viewport.w != bitmap.viewport.ow) || (bitmap.viewport.h != bitmap.viewport.oh)) - { - bitmap.viewport.ow = bitmap.viewport.w; - bitmap.viewport.oh = bitmap.viewport.h; - bitmap.viewport.changed |= 1; - } - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* H Interrupt */ - if(--h_counter < 0) - { - /* reload H Counter */ - h_counter = reg[10]; - - /* interrupt level 4 */ - hint_pending = 0x10; - if (reg[0] & 0x10) - { - m68k_update_irq(4); - } - } - - /* update VDP DMA */ - if (dma_length) - { - vdp_dma_update(mcycles_vdp); - } - - /* render overscan */ - if (line < end) - { - blank_line(line, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* update inputs before VINT (Warriors of Eternal Sun) */ - osd_input_update(); - - /* delay between VINT flag & V Interrupt (Ex-Mutants, Tyrant) */ - m68k_run(mcycles_vdp + 588); - status |= 0x80; - - /* delay between VBLANK flag & V Interrupt (Dracula, OutRunners, VR Troopers) */ - m68k_run(mcycles_vdp + 788); - if (zstate == 1) - { - z80_run(mcycles_vdp + 788); - } - else - { - Z80.cycles = mcycles_vdp + 788; - } - - /* V Interrupt */ - vint_pending = 0x20; - if (reg[1] & 0x20) - { - m68k_set_irq(6); - } - - /* assert Z80 interrupt */ - Z80.irq_state = ASSERT_LINE; - - /* run both 68k & CD hardware */ - scd_update(mcycles_vdp + MCYCLES_PER_LINE); - - /* run Z80 until end of line */ - if (zstate == 1) - { - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - } - else - { - Z80.cycles = mcycles_vdp + MCYCLES_PER_LINE; - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - - /* increment line count */ - line++; - - /* Vertical Blanking */ - do - { - /* update V Counter */ - v_counter = line; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* render overscan */ - if ((line < end) || (line >= start)) - { - blank_line(line, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - if (zirq) - { - /* Z80 interrupt is asserted exactly for one line */ - m68k_run(mcycles_vdp + 788); - if (zstate == 1) - { - z80_run(mcycles_vdp + 788); - } - else - { - Z80.cycles = mcycles_vdp + 788; - } - - /* clear Z80 interrupt */ - Z80.irq_state = CLEAR_LINE; - zirq = 0; - } - - /* run both 68k & CD hardware */ - scd_update(mcycles_vdp + MCYCLES_PER_LINE); - - /* run Z80 */ - if (zstate == 1) - { - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - } - else - { - Z80.cycles = mcycles_vdp + MCYCLES_PER_LINE; - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - } - while (++line < (lines_per_frame - 1)); - - /* prepare for next SCD frame */ - scd_end_frame(scd.cycles); - - /* adjust CPU cycle counters for next frame */ - Z80.cycles -= mcycles_vdp; - m68k.cycles -= mcycles_vdp; -} - -void system_frame_sms(int do_skip) -{ - /* line counter */ - int start, end, line = 0; - - /* reload H Counter */ - int h_counter = reg[10]; - - /* reset line master cycle count */ - mcycles_vdp = 0; - - /* reload V Counter */ - v_counter = lines_per_frame - 1; - - /* reset VDP FIFO */ - fifo_write_cnt = 0; - fifo_slots = 0; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* display changed during VBLANK */ - if (bitmap.viewport.changed & 2) - { - bitmap.viewport.changed &= ~2; - - if (system_hw & SYSTEM_MD) - { - /* interlaced mode */ - int old_interlaced = interlaced; - interlaced = (reg[12] & 0x02) >> 1; - if (old_interlaced != interlaced) - { - im2_flag = ((reg[12] & 0x06) == 0x06); - odd_frame = 1; - bitmap.viewport.changed = 5; - - /* update rendering mode */ - if (reg[1] & 0x04) - { - if (im2_flag) - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_im2_vs : render_bg_m5_im2; - render_obj = render_obj_m5_im2; - - } - else - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_vs : render_bg_m5; - render_obj = render_obj_m5; - } - } - } - - /* active screen height */ - if (reg[1] & 0x04) - { - bitmap.viewport.h = 224 + ((reg[1] & 0x08) << 1); - bitmap.viewport.y = (config.overscan & 1) * ((240 + 48*vdp_pal - bitmap.viewport.h) >> 1); - } - else - { - bitmap.viewport.h = 192; - bitmap.viewport.y = (config.overscan & 1) * 24 * (vdp_pal + 1); - } - - /* active screen width */ - bitmap.viewport.w = 256 + ((reg[12] & 0x01) << 6); - } - else - { - /* check for VDP extended modes */ - int mode = (reg[0] & 0x06) | (reg[1] & 0x18); - - /* update active height */ - if (mode == 0x0E) - { - bitmap.viewport.h = 240; - } - else if (mode == 0x16) - { - bitmap.viewport.h = 224; - } - else - { - bitmap.viewport.h = 192; - } - - /* update vertical overscan */ - if (config.overscan & 1) - { - bitmap.viewport.y = (240 + 48*vdp_pal - bitmap.viewport.h) >> 1; - } - else - { - if ((system_hw == SYSTEM_GG) && !config.gg_extra) - { - /* Display area reduced to 160x144 */ - bitmap.viewport.y = (144 - bitmap.viewport.h) / 2; - } - else - { - bitmap.viewport.y = 0; - } - } - } - } - - /* Detect pause button input (in Game Gear Mode, NMI is not generated) */ - if (system_hw != SYSTEM_GG) - { - if (input.pad[0] & INPUT_START) - { - /* NMI is edge-triggered */ - if (!pause_b) - { - pause_b = 1; - z80_set_nmi_line(ASSERT_LINE); - z80_set_nmi_line(CLEAR_LINE); - } - } - else - { - pause_b = 0; - } - } - - /* 3-D glasses faking: skip rendering of left lens frame */ - do_skip |= (work_ram[0x1ffb] & cart.special & HW_3D_GLASSES); - - /* Mega Drive VDP specific */ - if (system_hw & SYSTEM_MD) - { - /* clear VBLANK, DMA & field flags */ - status &= 0xE5; - - /* even/odd field flag (interlaced modes only) */ - odd_frame ^= 1; - if (interlaced) - { - status |= (odd_frame << 4); - } - - /* update VDP DMA */ - if (dma_length) - { - vdp_dma_update(0); - } - } - - /* Master System & Game Gear VDP specific */ - if (system_hw < SYSTEM_MD) - { - /* Sprites are still processed during vertical borders */ - if (reg[1] & 0x40) - { - render_obj(1); - } - } - - /* render last line of overscan */ - if (bitmap.viewport.y > 0) - { - blank_line(v_counter, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* parse first line of sprites (on Master System VDP, pre-processing still occurs when display is disabled) */ - if ((reg[1] & 0x40) || (system_hw < SYSTEM_MD)) - { - parse_satb(-1); - } - - /* run Z80 */ - z80_run(MCYCLES_PER_LINE); - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - - /* latch Vertical Scroll register */ - vscroll = reg[0x09]; - - /* Active Display */ - do - { - /* update VDP DMA (Mega Drive VDP specific) */ - if (dma_length) - { - vdp_dma_update(mcycles_vdp); - } - - /* make sure we didn't already render that line */ - if (v_counter != line) - { - /* update V Counter */ - v_counter = line; - - /* render scanline */ - if (!do_skip) - { - render_line(line); - } - } - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* H Interrupt */ - if(--h_counter < 0) - { - /* reload H Counter */ - h_counter = reg[10]; - - /* interrupt level 4 */ - hint_pending = 0x10; - if (reg[0] & 0x10) - { - /* cycle-accurate HINT */ - /* IRQ line is latched between instructions, during instruction last cycle. */ - /* This means that if Z80 cycle count is exactly a multiple of MCYCLES_PER_LINE, */ - /* interrupt should be triggered AFTER the next instruction. */ - if ((Z80.cycles % MCYCLES_PER_LINE) == 0) - { - z80_run(Z80.cycles + 1); - } - - Z80.irq_state = ASSERT_LINE; - } - } - - /* run Z80 */ - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - } - while (++line < bitmap.viewport.h); - - /* end of active display */ - v_counter = line; - - /* Mega Drive VDP specific */ - if (system_hw & SYSTEM_MD) - { - /* set VBLANK flag */ - status |= 0x08; - } - - /* overscan area */ - start = lines_per_frame - bitmap.viewport.y; - end = bitmap.viewport.h + bitmap.viewport.y; - - /* check viewport changes */ - if ((bitmap.viewport.w != bitmap.viewport.ow) || (bitmap.viewport.h != bitmap.viewport.oh)) - { - bitmap.viewport.ow = bitmap.viewport.w; - bitmap.viewport.oh = bitmap.viewport.h; - bitmap.viewport.changed |= 1; - } - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* H Interrupt */ - if(--h_counter < 0) - { - /* reload H Counter */ - h_counter = reg[10]; - - /* interrupt level 4 */ - hint_pending = 0x10; - if (reg[0] & 0x10) - { - /* cycle-accurate HINT */ - if ((Z80.cycles % MCYCLES_PER_LINE) == 0) - { - z80_run(Z80.cycles + 1); - } - - Z80.irq_state = ASSERT_LINE; - } - } - - /* update VDP DMA (Mega Drive VDP specific) */ - if (dma_length) - { - vdp_dma_update(mcycles_vdp); - } - - /* render overscan */ - if (line < end) - { - blank_line(line, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* update inputs before VINT */ - osd_input_update(); - - /* run Z80 until end of line */ - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - - /* make sure VINT flag was not cleared by last instruction */ - if (v_counter == line) - { - /* Set VINT flag */ - status |= 0x80; - - /* V Interrupt */ - vint_pending = 0x20; - if (reg[1] & 0x20) - { - Z80.irq_state = ASSERT_LINE; - } - } - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - - /* increment line count */ - line++; - - /* Vertical Blanking */ - do - { - /* update V Counter */ - v_counter = line; - - /* update 6-Buttons & Lightguns */ - input_refresh(); - - /* Master System & Game Gear VDP specific */ - if ((system_hw < SYSTEM_MD) && (line > (lines_per_frame - 16))) - { - /* Sprites are still processed during top border */ - render_obj((line - lines_per_frame) & 1); - parse_satb(line - lines_per_frame); - } - - /* render overscan */ - if ((line < end) || (line >= start)) - { - blank_line(line, -bitmap.viewport.x, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* run Z80 */ - z80_run(mcycles_vdp + MCYCLES_PER_LINE); - - /* update line cycle count */ - mcycles_vdp += MCYCLES_PER_LINE; - } - while (++line < (lines_per_frame - 1)); - - /* adjust Z80 cycle count for next frame */ - Z80.cycles -= mcycles_vdp; -} diff --git a/waterbox/gpgx/core/system.h b/waterbox/gpgx/core/system.h deleted file mode 100644 index 9d408b0232..0000000000 --- a/waterbox/gpgx/core/system.h +++ /dev/null @@ -1,119 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Virtual System emulation - * - * Support for "Genesis", "Genesis + CD" & "Master System" modes - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _SYSTEM_H_ -#define _SYSTEM_H_ - -#include "blip_buf.h" - -/* Supported hardware models */ -#define SYSTEM_SG 0x10 -#define SYSTEM_MARKIII 0x11 -#define SYSTEM_SMS 0x20 -#define SYSTEM_SMS2 0x21 -#define SYSTEM_GG 0x40 -#define SYSTEM_GGMS 0x41 -#define SYSTEM_MD 0x80 -#define SYSTEM_PBC 0x81 -#define SYSTEM_PICO 0x82 -#define SYSTEM_MCD 0x84 - -/* NTSC & PAL Master Clock frequencies */ -#define MCLOCK_NTSC 53693175 -#define MCLOCK_PAL 53203424 - -/* Number of M-Cycles executed per line */ -#define MCYCLES_PER_LINE 3420 - -/* Horizontal timing offsets when running in Z80 mode */ -#define SMS_CYCLE_OFFSET 530 -#define PBC_CYCLE_OFFSET 560 - -typedef struct -{ - uint8 *data; /* Bitmap data */ - int width; /* Bitmap width */ - int height; /* Bitmap height */ - int pitch; /* Bitmap pitch */ - struct - { - int x; /* X offset of viewport within bitmap */ - int y; /* Y offset of viewport within bitmap */ - int w; /* Width of viewport */ - int h; /* Height of viewport */ - int ow; /* Previous width of viewport */ - int oh; /* Previous height of viewport */ - int changed; /* 1= Viewport width or height have changed */ - } viewport; -} t_bitmap; - -typedef struct -{ - int sample_rate; /* Output Sample rate (8000-48000) */ - double frame_rate; /* Output Frame rate (usually 50 or 60 frames per second) */ - int enabled; /* 1= sound emulation is enabled */ - blip_t* blips[3][2]; /* Blip Buffer resampling */ -} t_snd; - - -/* Global variables */ -extern t_bitmap bitmap; -extern t_snd snd; -extern uint32 mcycles_vdp; -extern const int16 SVP_cycles; -extern uint8 system_hw; -extern uint8 system_bios; -extern uint32 system_clock; - -/* Function prototypes */ -extern int audio_init(int samplerate, double framerate); -extern void audio_reset(void); -extern void audio_shutdown(void); -extern int audio_update(int16 *buffer); -extern void audio_set_equalizer(void); -extern void system_init(void); -extern void system_reset(void); -extern void system_frame_gen(int do_skip); -extern void system_frame_scd(int do_skip); -extern void system_frame_sms(int do_skip); - -#endif /* _SYSTEM_H_ */ - diff --git a/waterbox/gpgx/core/types.h b/waterbox/gpgx/core/types.h deleted file mode 100644 index e7c6806114..0000000000 --- a/waterbox/gpgx/core/types.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef _TYPES_H -#define _TYPES_H - -#undef uint8 -#undef uint16 -#undef uint32 -#undef int8 -#undef int16 -#undef int32 - -#define uint8 unsigned char -#define uint16 unsigned short -#define uint32 unsigned int -#define int8 signed char -#define int16 signed short -#define int32 signed int - -typedef union -{ - uint16 w; - struct - { -#ifdef LSB_FIRST - uint8 l; - uint8 h; -#else - uint8 h; - uint8 l; -#endif - } byte; - -} reg16_t; - -#endif \ No newline at end of file diff --git a/waterbox/gpgx/core/vdp_ctrl.c b/waterbox/gpgx/core/vdp_ctrl.c deleted file mode 100644 index c759865d26..0000000000 --- a/waterbox/gpgx/core/vdp_ctrl.c +++ /dev/null @@ -1,3215 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Video Display Processor (68k & Z80 CPU interface) - * - * Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "hvc.h" -#include "../cinterface/callbacks.h" - -/* Mark a pattern as modified */ -#define MARK_BG_DIRTY(addr) \ -{ \ - name = (addr >> 5) & 0x7FF; \ - if(bg_name_dirty[name] == 0) \ - { \ - bg_name_list[bg_list_index++] = name; \ - } \ - bg_name_dirty[name] |= (1 << ((addr >> 2) & 7)); \ -} - -/* VDP context */ -uint8 sat[0x400]; /* Internal copy of sprite attribute table */ -uint8 vram[0x10000]; /* Video RAM (64K x 8-bit) */ -uint8 cram[0x80]; /* On-chip color RAM (64 x 9-bit) */ -uint8 vsram[0x80]; /* On-chip vertical scroll RAM (40 x 11-bit) */ -uint8 reg[0x20]; /* Internal VDP registers (23 x 8-bit) */ -uint8 hint_pending; /* 0= Line interrupt is pending */ -uint8 vint_pending; /* 1= Frame interrupt is pending */ -uint16 status; /* VDP status flags */ -uint32 dma_length; /* DMA remaining length */ - -/* Global variables */ -uint16 ntab; /* Name table A base address */ -uint16 ntbb; /* Name table B base address */ -uint16 ntwb; /* Name table W base address */ -uint16 satb; /* Sprite attribute table base address */ -uint16 hscb; /* Horizontal scroll table base address */ -uint8 bg_name_dirty[0x800]; /* 1= This pattern is dirty */ -uint16 bg_name_list[0x800]; /* List of modified pattern indices */ -uint16 bg_list_index; /* # of modified patterns in list */ -uint8 hscroll_mask; /* Horizontal Scrolling line mask */ -uint8 playfield_shift; /* Width of planes A, B (in bits) */ -uint8 playfield_col_mask; /* Playfield column mask */ -uint16 playfield_row_mask; /* Playfield row mask */ -uint16 vscroll; /* Latched vertical scroll value */ -uint8 odd_frame; /* 1: odd field, 0: even field */ -uint8 im2_flag; /* 1= Interlace mode 2 is being used */ -uint8 interlaced; /* 1: Interlaced mode 1 or 2 */ -uint8 vdp_pal; /* 1: PAL , 0: NTSC (default) */ -uint16 v_counter; /* Vertical counter */ -uint16 vc_max; /* Vertical counter overflow value */ -uint16 lines_per_frame; /* PAL: 313 lines, NTSC: 262 lines */ -uint16 max_sprite_pixels; /* Max. sprites pixels per line (parsing & rendering) */ -int32 fifo_write_cnt; /* VDP FIFO write count */ -uint32 fifo_slots; /* VDP FIFO access slot count */ -uint32 hvc_latch; /* latched HV counter */ -const uint8 *hctab; /* pointer to H Counter table */ - -/* Function pointers */ -void (*vdp_68k_data_w)(unsigned int data); -void (*vdp_z80_data_w)(unsigned int data); -unsigned int (*vdp_68k_data_r)(void); -unsigned int (*vdp_z80_data_r)(void); - -/* Function prototypes */ -static void vdp_68k_data_w_m4(unsigned int data); -static void vdp_68k_data_w_m5(unsigned int data); -static unsigned int vdp_68k_data_r_m4(void); -static unsigned int vdp_68k_data_r_m5(void); -static void vdp_z80_data_w_m4(unsigned int data); -static void vdp_z80_data_w_m5(unsigned int data); -static unsigned int vdp_z80_data_r_m4(void); -static unsigned int vdp_z80_data_r_m5(void); -static void vdp_z80_data_w_ms(unsigned int data); -static void vdp_z80_data_w_gg(unsigned int data); -static void vdp_z80_data_w_sg(unsigned int data); -static void vdp_bus_w(unsigned int data); -static void vdp_fifo_update(unsigned int cycles); -static void vdp_reg_w(unsigned int r, unsigned int d, unsigned int cycles); -static void vdp_dma_68k_ext(unsigned int length); -static void vdp_dma_68k_ram(unsigned int length); -static void vdp_dma_68k_io(unsigned int length); -static void vdp_dma_copy(unsigned int length); -static void vdp_dma_fill(unsigned int length); - -/* Tables that define the playfield layout */ -static const uint8 hscroll_mask_table[] = { 0x00, 0x07, 0xF8, 0xFF }; -static const uint8 shift_table[] = { 6, 7, 0, 8 }; -static const uint8 col_mask_table[] = { 0x0F, 0x1F, 0x0F, 0x3F }; -static const uint16 row_mask_table[] = { 0x0FF, 0x1FF, 0x2FF, 0x3FF }; - -uint8 border; /* Border color index */ -static uint8 pending; /* Pending write flag */ -static uint8 code; /* Code register */ -static uint8 dma_type; /* DMA mode */ -static uint16 addr; /* Address register */ -static uint16 addr_latch; /* Latched A15, A14 of address */ -static uint16 sat_base_mask; /* Base bits of SAT */ -static uint16 sat_addr_mask; /* Index bits of SAT */ -static uint16 dma_src; /* DMA source address */ -static uint32 dma_endCycles; /* 68k cycles to DMA end */ -static int dmafill; /* DMA Fill pending flag */ -static int cached_write; /* 2nd part of 32-bit CTRL port write (Genesis mode) or LSB of CRAM data (Game Gear mode) */ -static uint16 fifo[4]; /* FIFO ring-buffer */ -static int fifo_idx; /* FIFO write index */ -static int fifo_byte_access; /* FIFO byte access flag */ -static uint32 fifo_cycles; /* FIFO next access cycle */ -static int *fifo_timing; /* FIFO slots timing table */ - -/* set Z80 or 68k interrupt lines */ -static void (*set_irq_line)(unsigned int level); -static void (*set_irq_line_delay)(unsigned int level); - -/* Vertical counter overflow values (see hvc.h) */ -static const uint16 vc_table[4][2] = -{ - /* NTSC, PAL */ - {0xDA , 0xF2}, /* Mode 4 (192 lines) */ - {0xEA , 0x102}, /* Mode 5 (224 lines) */ - {0xDA , 0xF2}, /* Mode 4 (192 lines) */ - {0x106, 0x10A} /* Mode 5 (240 lines) */ -}; - -/* FIFO access slots timings */ -static const int fifo_timing_h32[16+4] = -{ - 230, 510, 810, 970, 1130, 1450, 1610, 1770, 2090, 2250, 2410, 2730, 2890, 3050, 3350, 3370, - MCYCLES_PER_LINE + 230, MCYCLES_PER_LINE + 510, MCYCLES_PER_LINE + 810, MCYCLES_PER_LINE + 970, -}; - -static const int fifo_timing_h40[18+4] = -{ - 352, 820, 948, 1076, 1332, 1460, 1588, 1844, 1972, 2100, 2356, 2484, 2612, 2868, 2996, 3124, 3364, 3380, - MCYCLES_PER_LINE + 352, MCYCLES_PER_LINE + 820, MCYCLES_PER_LINE + 948, MCYCLES_PER_LINE + 1076, -}; - -/* DMA Timings (number of access slots per line) */ -static const uint8 dma_timing[2][2] = -{ -/* H32, H40 */ - {16 , 18}, /* active display */ - {166, 204} /* blank display */ -}; - -/* DMA processing functions (set by VDP register 23 high nibble) */ -static void (*const dma_func[16])(unsigned int length) = -{ - /* 0x0-0x3 : DMA from 68k bus $000000-$7FFFFF (external area) */ - vdp_dma_68k_ext,vdp_dma_68k_ext,vdp_dma_68k_ext,vdp_dma_68k_ext, - - /* 0x4-0x7 : DMA from 68k bus $800000-$FFFFFF (internal RAM & I/O) */ - vdp_dma_68k_ram, vdp_dma_68k_io,vdp_dma_68k_ram,vdp_dma_68k_ram, - - /* 0x8-0xB : DMA Fill */ - vdp_dma_fill,vdp_dma_fill,vdp_dma_fill,vdp_dma_fill, - - /* 0xC-0xF : DMA Copy */ - vdp_dma_copy,vdp_dma_copy,vdp_dma_copy,vdp_dma_copy -}; - -void write_cram_byte(int addr, uint8 val) -{ - uint16 *p; - uint16 data; - int index; - - p = (uint16 *)&cram[addr & 0x7E]; - data = *p; - data = ((data & 0x1C0) << 3) | ((data & 0x038) << 2) | ((data & 0x007) << 1); - - if (addr & 1) - { - data &= 0xFF00; - data |= val; - } - else - { - data &= 0x00FF; - data |= val << 8; - } - - data = ((data & 0xE00) >> 3) | ((data & 0x0E0) >> 2) | ((data & 0x00E) >> 1); - - if (*p != data) - { - index = (addr >> 1) & 0x3F; - *p = data; - - if (index & 0x0F) - { - color_update_m5(index, data); - } - - if (index == border) - { - color_update_m5(0x00, data); - } - } -} - -void write_vram_byte(int addr, uint8 val) -{ - uint8 *p; - addr &= 0xffff; - p = &vram[addr]; - if (*p != val) - { - int name; - *p = val; - MARK_BG_DIRTY(addr); - } -} - -void flush_vram_cache(void) -{ - if (bg_list_index) - { - update_bg_pattern_cache(bg_list_index); - bg_list_index = 0; - } -} - -void vdp_invalidate_full_cache(void) -{ - bg_list_index = (reg[1] & 0x04) ? 0x800 : 0x200; - for (int i=0;i VDP 32-cell Active 16 - Blanking 166 - 40-cell Active 18 - Blanking 204 - VRAM Fill 32-cell Active 15 - Blanking 165 - 40-cell Active 17 - Blanking 203 - VRAM Copy 32-cell Active 8 - Blanking 83 - 40-cell Active 9 - Blanking 102 - - 'Active' is the active display period, 'Blanking' is either the vertical - blanking period or when the display is forcibly blanked via register #1. - - The above transfer counts are all in bytes, unless the destination is - CRAM or VSRAM for a 68K > VDP transfer, in which case it is in words. - */ - unsigned int rate = dma_timing[(status & 8) || !(reg[1] & 0x40)][reg[12] & 1]; - - /* Adjust for 68k bus DMA to VRAM (one word = 2 access) or DMA Copy (one read + one write = 2 access) */ - rate = rate >> (dma_type & 1); - - /* Remaining DMA cycles */ - if (status & 8) - { - /* Process DMA until the end of VBLANK */ - /* NOTE: DMA timings can not change during VBLANK because active display width cannot be modified. */ - /* Indeed, writing VDP registers during DMA is either impossible (when doing DMA from 68k bus, CPU */ - /* is locked) or will abort DMA operation (in case of DMA Fill or Copy). */ - dma_cycles = (lines_per_frame * MCYCLES_PER_LINE) - cycles; - } - else - { - /* Process DMA until the end of current line */ - dma_cycles = (mcycles_vdp + MCYCLES_PER_LINE) - cycles; - } - - /* Remaining DMA bytes for that line */ - dma_bytes = (dma_cycles * rate) / MCYCLES_PER_LINE; - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] DMA type %d (%d access/line)(%d cycles left)-> %d access (%d remaining) (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE,dma_type, rate, dma_cycles, dma_bytes, dma_length, m68k_get_reg(M68K_REG_PC)); -#endif - - /* Check if DMA can be finished before the end of current line */ - if (dma_length < dma_bytes) - { - /* Adjust remaining DMA bytes */ - dma_bytes = dma_length; - dma_cycles = (dma_bytes * MCYCLES_PER_LINE) / rate; - } - - /* Update DMA timings */ - if (dma_type < 2) - { - /* 68K is frozen during DMA from 68k bus */ - m68k.cycles = cycles + dma_cycles; -#ifdef LOGVDP - error("-->CPU frozen for %d cycles\n", dma_cycles); -#endif - } - else - { - /* Set DMA Busy flag */ - status |= 0x02; - - /* 68K is still running, set DMA end cycle */ - dma_endCycles = cycles + dma_cycles; -#ifdef LOGVDP - error("-->DMA ends in %d cycles\n", dma_cycles); -#endif - } - - /* Process DMA */ - if (dma_bytes > 0) - { - /* Update DMA length */ - dma_length -= dma_bytes; - - /* Process DMA operation */ - dma_func[reg[23] >> 4](dma_bytes); - - /* Check if DMA is finished */ - if (!dma_length) - { - /* DMA source address registers are incremented during DMA (even DMA Fill) */ - uint16 end = reg[21] + (reg[22] << 8) + reg[19] + (reg[20] << 8); - reg[21] = end & 0xff; - reg[22] = end >> 8; - - /* DMA length registers are decremented during DMA */ - reg[19] = reg[20] = 0; - - /* perform cached write, if any */ - if (cached_write >= 0) - { - vdp_68k_ctrl_w(cached_write); - cached_write = -1; - } - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* Control port access functions */ -/*--------------------------------------------------------------------------*/ - -void vdp_68k_ctrl_w(unsigned int data) -{ - /* Check pending flag */ - if (pending == 0) - { - /* A single long word write instruction could have started DMA with the first word */ - if (dma_length) - { - /* 68k is frozen during 68k bus DMA */ - /* Second word should be written after DMA completion */ - /* See Formula One & Kawasaki Superbike Challenge */ - if (dma_type < 2) - { - /* Latch second control word for later */ - cached_write = data; - return; - } - } - - /* Check CD0-CD1 bits */ - if ((data & 0xC000) == 0x8000) - { - /* VDP register write */ - vdp_reg_w((data >> 8) & 0x1F, data & 0xFF, m68k.cycles); - } - else - { - /* Set pending flag (Mode 5 only) */ - pending = reg[1] & 4; - } - - /* Update address and code registers */ - addr = addr_latch | (data & 0x3FFF); - code = ((code & 0x3C) | ((data >> 14) & 0x03)); - } - else - { - /* Clear pending flag */ - pending = 0; - - /* Save address bits A15 and A14 */ - addr_latch = (data & 3) << 14; - - /* Update address and code registers */ - addr = addr_latch | (addr & 0x3FFF); - code = ((code & 0x03) | ((data >> 2) & 0x3C)); - - /* Detect DMA operation (CD5 bit set) */ - if (code & 0x20) - { - /* DMA must be enabled */ - if (reg[1] & 0x10) - { - /* DMA type */ - switch (reg[23] >> 6) - { - case 2: - { - /* DMA Fill */ - dma_type = 2; - - /* DMA is pending until next DATA port write */ - dmafill = 1; - - /* Set DMA Busy flag */ - status |= 0x02; - - /* DMA end cycle is not initialized yet (this prevents DMA Busy flag from being cleared on VDP status read) */ - dma_endCycles = 0xffffffff; - break; - } - - case 3: - { - /* DMA Copy */ - dma_type = 3; - - /* DMA length */ - dma_length = (reg[20] << 8) | reg[19]; - - /* Zero DMA length (pre-decrementing counter) */ - if (!dma_length) - { - dma_length = 0x10000; - } - - /* DMA source address */ - dma_src = (reg[22] << 8) | reg[21]; - - /* Trigger DMA */ - vdp_dma_update(m68k.cycles); - break; - } - - default: - { - /* DMA from 68k bus */ - dma_type = (code & 0x06) ? 0 : 1; - - /* DMA length */ - dma_length = (reg[20] << 8) | reg[19]; - - /* Zero DMA length (pre-decrementing counter) */ - if (!dma_length) - { - dma_length = 0x10000; - } - - /* DMA source address */ - dma_src = (reg[22] << 8) | reg[21]; - - /* Transfer from SVP ROM/RAM ($000000-$3fffff) or CD Word-RAM ($200000-$3fffff/$600000-$7fffff) */ - if (((system_hw == SYSTEM_MCD) && ((reg[23] & 0x70) == ((scd.cartridge.boot >> 1) + 0x10))) || (svp && !(reg[23] & 0x60))) - { - /* source data is available with one cycle delay, i.e first word written by VDP is */ - /* previous data being held on 68k bus at that time, then source words are written */ - /* normally to VDP RAM, with only last source word being ignored */ - addr += reg[15]; - dma_length--; - } - - /* Trigger DMA */ - vdp_dma_update(m68k.cycles); - break; - } - } - } - } - } - - /* - FIFO emulation (Chaos Engine/Soldier of Fortune, Double Clutch, Sol Deace) - -------------------------------------------------------------------------- - Each VRAM access is byte wide, so one VRAM write (word) need two slot access. - - NOTE: Invalid code 0x02 (register write) should not behave the same as VRAM - access, i.e data is ignored and only one access slot is used for each word, - BUT a few games ("Clue", "Microcosm") which accidentally corrupt code value - will have issues when emulating FIFO timings. They likely work fine on real - hardware because of periodical 68k wait-states which have been observed and - would naturaly add some delay between writes. Until those wait-states are - accurately measured and emulated, delay is forced when invalid code value - is being used. - */ - fifo_byte_access = ((code & 0x0F) <= 0x02); -} - -/* Mega Drive VDP control port specific (MS compatibility mode) */ -void vdp_z80_ctrl_w(unsigned int data) -{ - switch (pending) - { - case 0: - { - /* Latch LSB */ - addr_latch = data; - - /* Set LSB pending flag */ - pending = 1; - return; - } - - case 1: - { - /* Update address and code registers */ - addr = (addr & 0xC000) | ((data & 0x3F) << 8) | addr_latch ; - code = ((code & 0x3C) | ((data >> 6) & 0x03)); - - if ((code & 0x03) == 0x02) - { - /* VDP register write */ - vdp_reg_w(data & 0x1F, addr_latch, Z80.cycles); - - /* Clear pending flag */ - pending = 0; - return; - } - - /* Set Mode 5 pending flag */ - pending = (reg[1] & 4) >> 1; - - if (!pending && !(code & 0x03)) - { - /* Process VRAM read */ - fifo[0] = vram[addr & 0x3FFF]; - - /* Increment address register */ - addr += (reg[15] + 1); - } - return; - } - - case 2: - { - /* Latch LSB */ - addr_latch = data; - - /* Set LSB pending flag */ - pending = 3; - return; - } - - case 3: - { - /* Clear pending flag */ - pending = 0; - - /* Update address and code registers */ - addr = ((addr_latch & 3) << 14) | (addr & 0x3FFF); - code = ((code & 0x03) | ((addr_latch >> 2) & 0x3C)); - - /* Detect DMA operation (CD5 bit set) */ - if (code & 0x20) - { - /* DMA should be enabled */ - if (reg[1] & 0x10) - { - /* DMA type */ - switch (reg[23] >> 6) - { - case 2: - { - /* DMA Fill */ - dma_type = 2; - - /* DMA is pending until next DATA port write */ - dmafill = 1; - - /* Set DMA Busy flag */ - status |= 0x02; - - /* DMA end cycle is not initialized yet (this prevents DMA Busy flag from being cleared on VDP status read) */ - dma_endCycles = 0xffffffff; - break; - } - - case 3: - { - /* DMA copy */ - dma_type = 3; - - /* DMA length */ - dma_length = (reg[20] << 8) | reg[19]; - - /* Zero DMA length (pre-decrementing counter) */ - if (!dma_length) - { - dma_length = 0x10000; - } - - /* DMA source address */ - dma_src = (reg[22] << 8) | reg[21]; - - /* Trigger DMA */ - vdp_dma_update(Z80.cycles); - break; - } - - default: - { - /* DMA from 68k bus does not work when Z80 is in control */ - break; - } - } - } - } - } - return; - } -} - -/* Master System & Game Gear VDP control port specific */ -void vdp_sms_ctrl_w(unsigned int data) -{ - if(pending == 0) - { - /* Update address register LSB */ - addr = (addr & 0x3F00) | (data & 0xFF); - - /* Latch LSB */ - addr_latch = data; - - /* Set LSB pending flag */ - pending = 1; - } - else - { - /* Update address and code registers */ - code = (data >> 6) & 3; - addr = (data << 8 | addr_latch) & 0x3FFF; - - /* Clear pending flag */ - pending = 0; - - if (code == 0) - { - /* Process VRAM read */ - fifo[0] = vram[addr & 0x3FFF]; - - /* Increment address register */ - addr = (addr + 1) & 0x3FFF; - return; - } - - if (code == 2) - { - /* Save current VDP mode */ - int mode, prev = (reg[0] & 0x06) | (reg[1] & 0x18); - - /* Write VDP register 0-15 */ - vdp_reg_w(data & 0x0F, addr_latch, Z80.cycles); - - /* Check VDP mode changes */ - mode = (reg[0] & 0x06) | (reg[1] & 0x18); - prev ^= mode; - - if (prev) - { - /* Check for extended modes */ - if (system_hw > SYSTEM_SMS) - { - int height; - - if (mode == 0x0E) /* M1=0,M2=1,M3=1,M4=1 */ - { - /* Mode 4 extended (240 lines) */ - height = 240; - - /* Update vertical counter max value */ - vc_max = vc_table[3][vdp_pal]; - } - else if (mode == 0x16) /* M1=1,M2=1,M3=0,M4=1 */ - { - /* Mode 4 extended (224 lines) */ - height = 224; - - /* Update vertical counter max value */ - vc_max = vc_table[1][vdp_pal]; - } - else - { - /* Mode 4 default (224 lines) */ - height = 192; - - /* Default vertical counter max value */ - vc_max = vc_table[0][vdp_pal]; - } - - if (height != bitmap.viewport.h) - { - if (status & 8) - { - /* viewport changes should be applied on next frame */ - bitmap.viewport.changed |= 2; - } - else - { - /* update active display */ - bitmap.viewport.h = height; - - /* update vertical overscan */ - if (config.overscan & 1) - { - bitmap.viewport.y = (240 + 48*vdp_pal - height) >> 1; - } - else - { - if ((system_hw == SYSTEM_GG) && !config.gg_extra) - { - /* Display area reduced to 160x144 */ - bitmap.viewport.y = (144 - height) / 2; - } - else - { - bitmap.viewport.y = 0; - } - } - } - } - } - - /* Rendering mode */ - switch (mode) - { - case 0x00: /* Graphics I */ - { - render_bg = render_bg_m0; - break; - } - - case 0x10: /* Text */ - { - render_bg = render_bg_m1; - break; - } - - case 0x02: /* Graphics II */ - { - render_bg = render_bg_m2; - break; - } - - case 0x12: /* Text (Extended PG) */ - { - render_bg = render_bg_m1x; - break; - } - - case 0x08: /* Multicolor */ - { - render_bg = render_bg_m3; - break; - } - - case 0x18: /* Invalid (1+3) */ - { - render_bg = render_bg_inv; - break; - } - - case 0x0A: /* Multicolor (Extended PG) */ - { - render_bg = render_bg_m3x; - break; - } - - case 0x1A: /* Invalid (1+2+3) */ - { - render_bg = render_bg_inv; - break; - } - - default: /* Mode 4 */ - { - render_bg = render_bg_m4; - break; - } - } - - /* Mode switching */ - if (prev & 0x04) - { - int i; - - if (mode & 0x04) - { - /* Mode 4 sprites */ - parse_satb = parse_satb_m4; - render_obj = render_obj_m4; - - /* force BG cache update*/ - bg_list_index = 0x200; - } - else - { - /* TMS-mode sprites */ - parse_satb = parse_satb_tms; - render_obj = render_obj_tms; - - /* BG cache is not used */ - bg_list_index = 0; - } - - /* reinitialize palette */ - for(i = 0; i < 0x20; i ++) - { - color_update_m4(i, *(uint16 *)&cram[i << 1]); - } - color_update_m4(0x40, *(uint16 *)&cram[(0x10 | (border & 0x0F)) << 1]); - } - } - } - } -} - -/* SG-1000 VDP (TMS99xx) control port specific */ -void vdp_tms_ctrl_w(unsigned int data) -{ - if(pending == 0) - { - /* Latch LSB */ - addr_latch = data; - - /* Set LSB pending flag */ - pending = 1; - } - else - { - /* Update address and code registers */ - code = (data >> 6) & 3; - addr = (data << 8 | addr_latch) & 0x3FFF; - - /* Clear pending flag */ - pending = 0; - - if (code == 0) - { - /* Process VRAM read */ - fifo[0] = vram[addr & 0x3FFF]; - - /* Increment address register */ - addr = (addr + 1) & 0x3FFF; - return; - } - - if (code & 2) - { - /* VDP register index (0-7) */ - data &= 0x07; - - /* Write VDP register */ - vdp_reg_w(data, addr_latch, Z80.cycles); - - /* Check VDP mode changes */ - if (data < 2) - { - int mode = (reg[0] & 0x02) | (reg[1] & 0x18); - - /* Rendering mode */ - switch (mode) - { - case 0x00: /* Graphics I */ - { - render_bg = render_bg_m0; - break; - } - - case 0x10: /* Text */ - { - render_bg = render_bg_m1; - break; - } - - case 0x02: /* Graphics II */ - { - render_bg = render_bg_m2; - break; - } - - case 0x12: /* Text (Extended PG) */ - { - render_bg = render_bg_m1x; - break; - } - - case 0x08: /* Multicolor */ - { - render_bg = render_bg_m3; - break; - } - - case 0x18: /* Invalid (1+3) */ - { - render_bg = render_bg_inv; - break; - } - - case 0x0A: /* Multicolor (Extended PG) */ - { - render_bg = render_bg_m3x; - break; - } - - case 0x1A: /* Invalid (1+2+3) */ - { - render_bg = render_bg_inv; - break; - } - } - } - } - } -} - - /* - * Status register - * - * Bits - * 0 NTSC(0)/PAL(1) - * 1 DMA Busy - * 2 During HBlank - * 3 During VBlank - * 4 0:1 even:odd field (interlaced modes only) - * 5 Sprite collision - * 6 Too many sprites per line - * 7 v interrupt occurred - * 8 Write FIFO full - * 9 Write FIFO empty - * 10 - 15 Open Bus - */ -unsigned int vdp_68k_ctrl_r(unsigned int cycles) -{ - unsigned int temp; - - /* Update FIFO status flags if not empty */ - if (fifo_write_cnt) - { - vdp_fifo_update(cycles); - } - - /* Check if DMA Busy flag is set */ - if (status & 2) - { - /* Check if DMA is finished */ - if (!dma_length && (cycles >= dma_endCycles)) - { - /* Clear DMA Busy flag */ - status &= 0xFFFD; - } - } - - /* Return VDP status */ - temp = status; - - /* Clear pending flag */ - pending = 0; - - /* Clear SOVR & SCOL flags */ - status &= 0xFF9F; - - /* Display OFF: VBLANK flag is set */ - if (!(reg[1] & 0x40)) - { - temp |= 0x08; - } - - /* HBLANK flag (Sonic 3 and Sonic 2 "VS Modes", Lemmings 2, Mega Turrican, V.R Troopers, Gouketsuji Ichizoku,...) */ - /* NB: this is not 100% accurate and need to be verified on real hardware */ - if ((cycles % MCYCLES_PER_LINE) < 588) - { - temp |= 0x04; - } - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VDP 68k status read -> 0x%x (0x%x) (%x)\n", v_counter, cycles/MCYCLES_PER_LINE-1, cycles, cycles%MCYCLES_PER_LINE, temp, status, m68k_get_reg(M68K_REG_PC)); -#endif - return (temp); -} - -unsigned int vdp_z80_ctrl_r(unsigned int cycles) -{ - unsigned int temp; - - /* Cycle-accurate SOVR & VINT flags */ - int line = (lines_per_frame + (cycles / MCYCLES_PER_LINE) - 1) % lines_per_frame; - - /* Check if DMA busy flag is set (Mega Drive VDP specific) */ - if (status & 2) - { - /* Check if DMA is finished */ - if (!dma_length && (cycles >= dma_endCycles)) - { - /* Clear DMA Busy flag */ - status &= 0xFD; - } - } - - /* Check if we are already on next line */ - if (line > v_counter) - { - v_counter = line; - if (line == (bitmap.viewport.h + 1)) - { - /* set VINT flag (immediately cleared after) */ - status |= 0x80; - } - else if ((line >= 0) && (line < bitmap.viewport.h) && !(work_ram[0x1ffb] & cart.special)) - { - /* render next line to check sprites overflow & collision */ - render_line(line); - } - } - - /* Return VDP status */ - temp = status; - - /* Clear pending flag */ - pending = 0; - - /* Clear VINT, SOVR & SCOL flags */ - status &= 0xFF1F; - - /* Mega Drive VDP specific */ - if (system_hw & SYSTEM_MD) - { - /* Display OFF: VBLANK flag is set */ - if (!(reg[1] & 0x40)) - { - temp |= 0x08; - } - - /* HBLANK flag */ - if ((cycles % MCYCLES_PER_LINE) < 588) - { - temp |= 0x04; - } - } - else if (reg[0] & 0x04) - { - /* Mode 4 unused bits (fixes PGA Tour Golf) */ - temp |= 0x1F; - } - - /* Cycle-accurate SCOL flag */ - if ((temp & 0x20) && (line == (spr_col >> 8))) - { - if (system_hw & SYSTEM_MD) - { - /* COL flag is set at HCount 0xFF on MD */ - if ((cycles % MCYCLES_PER_LINE) < 105) - { - status |= 0x20; - temp &= ~0x20; - } - } - else - { - /* COL flag is set at the pixel it occurs */ - uint8 hc = hctab[(cycles + SMS_CYCLE_OFFSET + 15) % MCYCLES_PER_LINE]; - if ((hc < (spr_col & 0xff)) || (hc > 0xf3)) - { - status |= 0x20; - temp &= ~0x20; - } - } - } - - /* Clear HINT & VINT pending flags */ - hint_pending = vint_pending = 0; - - /* Clear Z80 interrupt */ - Z80.irq_state = CLEAR_LINE; - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VDP Z80 status read -> 0x%x (0x%x) (%x)\n", v_counter, cycles/MCYCLES_PER_LINE-1, cycles, cycles%MCYCLES_PER_LINE, temp, status, Z80.pc.w.l); -#endif - return (temp); -} - -/*--------------------------------------------------------------------------*/ -/* HV Counters */ -/*--------------------------------------------------------------------------*/ - -unsigned int vdp_hvc_r(unsigned int cycles) -{ - int vc; - unsigned int data = hvc_latch; - - /* Check if HVC latch is enabled */ - if (data) - { - /* Mode 5: HV-counters are frozen (cf. lightgun games, Sunset Riders logo) */ - if (reg[1] & 0x04) - { -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] HVC latch read -> 0x%x (%x)\n", v_counter, (cycles/MCYCLES_PER_LINE-1)%lines_per_frame, cycles, cycles%MCYCLES_PER_LINE, data & 0xffff, m68k_get_reg(M68K_REG_PC)); -#endif - /* return latched HVC value */ - return (data & 0xffff); - } - else - { - /* Mode 4: by default, V-counter runs normally & H counter is frozen */ - data &= 0xff; - } - } - else - { - /* Cycle-accurate H-Counter (Striker, Mickey Mania, Skitchin, Road Rash I,II,III, Sonic 3D Blast...) */ - data = hctab[cycles % MCYCLES_PER_LINE]; - } - - /* Cycle-accurate V-Counter (cycle counter starts from line -1) */ - vc = (cycles / MCYCLES_PER_LINE) - 1; - - /* V-Counter overflow */ - if (vc > vc_max) - { - vc -= lines_per_frame; - } - - /* Interlaced modes */ - if (interlaced) - { - /* Interlace mode 2 (Sonic the Hedgehog 2, Combat Cars) */ - vc <<= im2_flag; - - /* Replace bit 0 with bit 8 */ - vc = (vc & ~1) | ((vc >> 8) & 1); - } - - /* return H-Counter in LSB & V-Counter in MSB */ - data |= ((vc & 0xff) << 8); - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] HVC read -> 0x%x (%x)\n", v_counter, (cycles/MCYCLES_PER_LINE-1)%lines_per_frame, cycles, cycles%MCYCLES_PER_LINE, data, m68k_get_reg(M68K_REG_PC)); -#endif - return (data); -} - - -/*--------------------------------------------------------------------------*/ -/* Test registers */ -/*--------------------------------------------------------------------------*/ - -void vdp_test_w(unsigned int data) -{ -#ifdef LOGERROR - error("Unused VDP Write 0x%x (%08x)\n", data, m68k_get_reg(M68K_REG_PC)); -#endif -} - - -/*--------------------------------------------------------------------------*/ -/* 68k interrupt handler (TODO: check how interrupts are handled in Mode 4) */ -/*--------------------------------------------------------------------------*/ - -int vdp_68k_irq_ack(int int_level) -{ -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] INT Level %d ack (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE,int_level, m68k_get_reg(M68K_REG_PC)); -#endif - - /* VINT has higher priority (Fatal Rewind) */ - if (vint_pending & reg[1]) - { -#ifdef LOGVDP - error("---> VINT cleared\n"); -#endif - - /* Clear VINT pending flag */ - vint_pending = 0; - status &= ~0x80; - - /* Update IRQ status */ - if (hint_pending & reg[0]) - { - m68k_set_irq(4); - } - else - { - m68k_set_irq(0); - } - } - else - { -#ifdef LOGVDP - error("---> HINT cleared\n"); -#endif - - /* Clear HINT pending flag */ - hint_pending = 0; - - /* Update IRQ status */ - m68k_set_irq(0); - } - - return M68K_INT_ACK_AUTOVECTOR; -} - - -/*--------------------------------------------------------------------------*/ -/* VDP registers update function */ -/*--------------------------------------------------------------------------*/ - -static void vdp_reg_w(unsigned int r, unsigned int d, unsigned int cycles) -{ -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VDP register %d write -> 0x%x (%x)\n", v_counter, cycles/MCYCLES_PER_LINE-1, cycles, cycles%MCYCLES_PER_LINE, r, d, m68k_get_reg(M68K_REG_PC)); -#endif - - /* VDP registers #11 to #23 cannot be updated in Mode 4 (Captain Planet & Avengers, Bass Master Classic Pro Edition) */ - if (!(reg[1] & 4) && (r > 10)) - { - return; - } - - switch(r) - { - case 0: /* CTRL #1 */ - { - /* Look for changed bits */ - r = d ^ reg[0]; - reg[0] = d; - - /* Line Interrupt */ - if ((r & 0x10) && hint_pending) - { - /* Update IRQ status */ - if (vint_pending & reg[1]) - { - set_irq_line(6); - } - else if (d & 0x10) - { - set_irq_line_delay(4); - } - else - { - set_irq_line(0); - } - } - - /* Palette selection */ - if (r & 0x04) - { - /* Mega Drive VDP only */ - if (system_hw & SYSTEM_MD) - { - /* Reset color palette */ - int i; - if (reg[1] & 0x04) - { - /* Mode 5 */ - color_update_m5(0x00, *(uint16 *)&cram[border << 1]); - for (i = 1; i < 0x40; i++) - { - color_update_m5(i, *(uint16 *)&cram[i << 1]); - } - } - else - { - /* Mode 4 */ - for (i = 0; i < 0x20; i++) - { - color_update_m4(i, *(uint16 *)&cram[i << 1]); - } - color_update_m4(0x40, *(uint16 *)&cram[(0x10 | (border & 0x0F)) << 1]); - } - } - } - - /* HVC latch (Sunset Riders, Lightgun games) */ - if (r & 0x02) - { - /* Mega Drive VDP only */ - if (system_hw & SYSTEM_MD) - { - /* Mode 5 only */ - if (reg[1] & 0x04) - { - if (d & 0x02) - { - /* Latch current HVC */ - hvc_latch = vdp_hvc_r(cycles) | 0x10000; - } - else - { - /* Free-running HVC */ - hvc_latch = 0; - } - } - } - } - break; - } - - case 1: /* CTRL #2 */ - { - /* Look for changed bits */ - r = d ^ reg[1]; - reg[1] = d; - - /* Display status (modified during active display) */ - if ((r & 0x40) && (v_counter < bitmap.viewport.h)) - { - /* Cycle offset vs HBLANK */ - int offset = cycles - mcycles_vdp; - if (offset <= 860) - { - /* Sprite rendering is limited if display was disabled during HBLANK (Mickey Mania 3d level, Overdrive Demo) */ - if (d & 0x40) - { - /* NB: This is not 100% accurate. On real hardware, the maximal number of rendered sprites pixels */ - /* for the current line (normally 256 or 320 pixels) but also the maximal number of pre-processed */ - /* sprites for the next line (normally 64 or 80 sprites) are both reduced depending on the amount */ - /* of cycles spent with display disabled. Here we only reduce them by a fixed amount when display */ - /* has been reenabled after a specific point within HBLANK. */ - if (offset > 360) - { - max_sprite_pixels = 128; - } - } - - /* Redraw entire line (Legend of Galahad, Lemmings 2, Formula One, Kawasaki Super Bike, Deadly Moves,...) */ - render_line(v_counter); - - /* Restore default */ - max_sprite_pixels = 256 + ((reg[12] & 1) << 6); - } - else if (system_hw & SYSTEM_MD) - { - /* Active pixel offset */ - if (reg[12] & 1) - { - /* dot clock = MCLK / 8 */ - offset = ((offset - 860) / 8) + 16; - } - else - { - /* dot clock = MCLK / 10 */ - offset = ((offset - 860) / 10) + 16; - } - - /* Line is partially blanked (Nigel Mansell's World Championship Racing , Ren & Stimpy Show, ...) */ - if (offset < bitmap.viewport.w) - { - if (d & 0x40) - { - render_line(v_counter); - blank_line(v_counter, 0, offset); - } - else - { - blank_line(v_counter, offset, bitmap.viewport.w - offset); - } - } - } - } - - /* Frame Interrupt */ - if ((r & 0x20) && vint_pending) - { - /* Update IRQ status */ - if (d & 0x20) - { - set_irq_line_delay(6); - } - else if (hint_pending & reg[0]) - { - set_irq_line(4); - } - else - { - set_irq_line(0); - } - } - - /* Active display height */ - if (r & 0x08) - { - /* Mega Drive VDP only */ - if (system_hw & SYSTEM_MD) - { - /* Mode 5 only */ - if (d & 0x04) - { - /* Changes should be applied on next frame */ - bitmap.viewport.changed |= 2; - - /* Update vertical counter max value */ - vc_max = vc_table[(d >> 2) & 3][vdp_pal]; - } - } - } - - /* Rendering mode */ - if (r & 0x04) - { - /* Mega Drive VDP only */ - if (system_hw & SYSTEM_MD) - { - int i; - if (d & 0x04) - { - /* Mode 5 rendering */ - parse_satb = parse_satb_m5; - update_bg_pattern_cache = update_bg_pattern_cache_m5; - if (im2_flag) - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_im2_vs : render_bg_m5_im2; - render_obj = (reg[12] & 0x08) ? render_obj_m5_im2_ste : render_obj_m5_im2; - } - else - { - render_bg = (reg[11] & 0x04) ? render_bg_m5_vs : render_bg_m5; - render_obj = (reg[12] & 0x08) ? render_obj_m5_ste : render_obj_m5; - } - - /* Reset color palette */ - color_update_m5(0x00, *(uint16 *)&cram[border << 1]); - for (i = 1; i < 0x40; i++) - { - color_update_m5(i, *(uint16 *)&cram[i << 1]); - } - - /* Mode 5 bus access */ - vdp_68k_data_w = vdp_68k_data_w_m5; - vdp_z80_data_w = vdp_z80_data_w_m5; - vdp_68k_data_r = vdp_68k_data_r_m5; - vdp_z80_data_r = vdp_z80_data_r_m5; - - /* Change display height */ - if (status & 8) - { - /* viewport changes should be applied on next frame */ - bitmap.viewport.changed |= 2; - } - else - { - /* Update current frame active display height */ - bitmap.viewport.h = 224 + ((d & 8) << 1); - bitmap.viewport.y = (config.overscan & 1) * (8 - (d & 8) + 24*vdp_pal); - } - - /* Clear HVC latched value */ - hvc_latch = 0; - - /* Check if HVC latch bit is set */ - if (reg[0] & 0x02) - { - /* Latch current HVC */ - hvc_latch = vdp_hvc_r(cycles) | 0x10000; - } - - /* max tiles to invalidate */ - bg_list_index = 0x800; - } - else - { - /* Mode 4 rendering */ - parse_satb = parse_satb_m4; - update_bg_pattern_cache = update_bg_pattern_cache_m4; - render_bg = render_bg_m4; - render_obj = render_obj_m4; - - /* Reset color palette */ - for (i = 0; i < 0x20; i++) - { - color_update_m4(i, *(uint16 *)&cram[i << 1]); - } - color_update_m4(0x40, *(uint16 *)&cram[(0x10 | (border & 0x0F)) << 1]); - - /* Mode 4 bus access */ - vdp_68k_data_w = vdp_68k_data_w_m4; - vdp_z80_data_w = vdp_z80_data_w_m4; - vdp_68k_data_r = vdp_68k_data_r_m4; - vdp_z80_data_r = vdp_z80_data_r_m4; - - if (status & 8) - { - /* viewport changes should be applied on next frame */ - bitmap.viewport.changed |= 2; - } - else - { - /* Update current frame active display */ - bitmap.viewport.h = 192; - bitmap.viewport.y = (config.overscan & 1) * 24 * (vdp_pal + 1); - } - - /* Latch current HVC */ - hvc_latch = vdp_hvc_r(cycles) | 0x10000; - - /* max tiles to invalidate */ - bg_list_index = 0x200; - } - - /* Invalidate pattern cache */ - for (i=0;i> 2) & 3][vdp_pal]; - } - else - { - /* No effect (cleared to avoid mode 5 detection elsewhere) */ - reg[1] &= ~0x04; - } - } - break; - } - - case 2: /* Plane A Name Table Base */ - { - reg[2] = d; - ntab = (d << 10) & 0xE000; - - /* Plane A Name Table Base changed during HBLANK */ - if ((v_counter < bitmap.viewport.h) && (reg[1] & 0x40) && (cycles <= (mcycles_vdp + 860))) - { - /* render entire line */ - render_line(v_counter); - } - break; - } - - case 3: /* Window Plane Name Table Base */ - { - reg[3] = d; - if (reg[12] & 0x01) - { - ntwb = (d << 10) & 0xF000; - } - else - { - ntwb = (d << 10) & 0xF800; - } - - /* Window Plane Name Table Base changed during HBLANK */ - if ((v_counter < bitmap.viewport.h) && (reg[1] & 0x40) && (cycles <= (mcycles_vdp + 860))) - { - /* render entire line */ - render_line(v_counter); - } - break; - } - - case 4: /* Plane B Name Table Base */ - { - reg[4] = d; - ntbb = (d << 13) & 0xE000; - - /* Plane B Name Table Base changed during HBLANK (Adventures of Batman & Robin) */ - if ((v_counter < bitmap.viewport.h) && (reg[1] & 0x40) && (cycles <= (mcycles_vdp + 860))) - { - /* render entire line */ - render_line(v_counter); - } - - break; - } - - case 5: /* Sprite Attribute Table Base */ - { - reg[5] = d; - satb = (d << 9) & sat_base_mask; - break; - } - - case 7: /* Backdrop color */ - { - reg[7] = d; - - /* Check if backdrop color changed */ - d &= 0x3F; - - if (d != border) - { - /* Update backdrop color */ - border = d; - - /* Reset palette entry */ - if (reg[1] & 4) - { - /* Mode 5 */ - color_update_m5(0x00, *(uint16 *)&cram[d << 1]); - } - else - { - /* Mode 4 */ - color_update_m4(0x40, *(uint16 *)&cram[(0x10 | (d & 0x0F)) << 1]); - } - - /* Backdrop color modified during HBLANK (Road Rash 1,2,3)*/ - if ((v_counter < bitmap.viewport.h) && (cycles <= (mcycles_vdp + 860))) - { - /* remap entire line */ - remap_line(v_counter); - } - } - break; - } - - case 8: /* Horizontal Scroll (Mode 4 only) */ - { - int line; - - /* Hscroll is latched at HCount 0xF3, HCount 0xF6 on MD */ - /* Line starts at HCount 0xF4, HCount 0xF6 on MD */ - if (system_hw < SYSTEM_MD) - { - cycles = cycles + 15; - } - - /* Make sure Hscroll has not already been latched */ - line = (lines_per_frame + (cycles / MCYCLES_PER_LINE) - 1) % lines_per_frame; - if ((line > v_counter) && (line < bitmap.viewport.h) && !(work_ram[0x1ffb] & cart.special)) - { - v_counter = line; - render_line(line); - } - - reg[8] = d; - break; - } - - case 11: /* CTRL #3 */ - { - reg[11] = d; - - /* Horizontal scrolling mode */ - hscroll_mask = hscroll_mask_table[d & 0x03]; - - /* Vertical Scrolling mode */ - if (d & 0x04) - { - render_bg = im2_flag ? render_bg_m5_im2_vs : render_bg_m5_vs; - } - else - { - render_bg = im2_flag ? render_bg_m5_im2 : render_bg_m5; - } - break; - } - - case 12: /* CTRL #4 */ - { - /* Look for changed bits */ - r = d ^ reg[12]; - reg[12] = d; - - /* Shadow & Highlight mode */ - if (r & 0x08) - { - /* Reset color palette */ - int i; - color_update_m5(0x00, *(uint16 *)&cram[border << 1]); - for (i = 1; i < 0x40; i++) - { - color_update_m5(i, *(uint16 *)&cram[i << 1]); - } - - /* Update sprite rendering function */ - if (d & 0x08) - { - render_obj = im2_flag ? render_obj_m5_im2_ste : render_obj_m5_ste; - } - else - { - render_obj = im2_flag ? render_obj_m5_im2 : render_obj_m5; - } - } - - /* Interlaced modes */ - if (r & 0x06) - { - /* changes should be applied on next frame */ - bitmap.viewport.changed |= 2; - } - - /* Active display width */ - if (r & 0x01) - { - /* FIFO access slots timings depend on active width */ - if (fifo_slots) - { - /* Synchronize VDP FIFO */ - vdp_fifo_update(cycles); - } - - if (d & 0x01) - { - /* Update display-dependant registers */ - ntwb = (reg[3] << 10) & 0xF000; - satb = (reg[5] << 9) & 0xFC00; - sat_base_mask = 0xFC00; - sat_addr_mask = 0x03FF; - - /* Update HC table */ - hctab = cycle2hc40; - - /* Update clipping */ - window_clip(reg[17], 1); - - /* Max. sprite pixels per line */ - max_sprite_pixels = 320; - - /* FIFO access slots timings */ - fifo_timing = (int *)fifo_timing_h40; - } - else - { - /* Update display-dependant registers */ - ntwb = (reg[3] << 10) & 0xF800; - satb = (reg[5] << 9) & 0xFE00; - sat_base_mask = 0xFE00; - sat_addr_mask = 0x01FF; - - /* Update HC table */ - hctab = cycle2hc32; - - /* Update clipping */ - window_clip(reg[17], 0); - - /* Max. sprite pixels per line */ - max_sprite_pixels = 256; - - /* FIFO access slots timings */ - fifo_timing = (int *)fifo_timing_h32; - } - - /* Active display width modified during HBLANK (Bugs Bunny Double Trouble) */ - if ((v_counter < bitmap.viewport.h) && (cycles <= (mcycles_vdp + 860))) - { - /* Update active display width */ - bitmap.viewport.w = 256 + ((d & 1) << 6); - - /* Redraw entire line */ - render_line(v_counter); - } - else if (v_counter == (lines_per_frame - 1)) - { - /* Update starting frame active display width */ - bitmap.viewport.w = 256 + ((d & 1) << 6); - } - else - { - /* Changes should be applied on next frame (Golden Axe III intro) */ - /* NB: not 100% accurate but required since backend framebuffer width cannot be modified mid-frame. */ - /* This would require a fixed framebuffer width (based on TV screen aspect ratio) and pixel scaling */ - /* to be done during rendering (depending on active display pixel aspect ratio in H32 or H40 mode). */ - /* Display is generally disabled when this is modified so it shouldn't be really noticeable anyway. */ - bitmap.viewport.changed |= 2; - } - } - break; - } - - case 13: /* HScroll Base Address */ - { - reg[13] = d; - hscb = (d << 10) & 0xFC00; - break; - } - - case 16: /* Playfield size */ - { - reg[16] = d; - playfield_shift = shift_table[(d & 3)]; - playfield_col_mask = col_mask_table[(d & 3)]; - playfield_row_mask = row_mask_table[(d >> 4) & 3]; - break; - } - - case 17: /* Window/Plane A vertical clipping */ - { - reg[17] = d; - window_clip(d, reg[12] & 1); - break; - } - - default: - { - reg[r] = d; - break; - } - } -} - -/*--------------------------------------------------------------------------*/ -/* FIFO emulation (Mega Drive VDP specific) */ -/* ---------------------------------------- */ -/* */ -/* CPU access to VRAM, CRAM & VSRAM is limited during active display: */ -/* H32 mode -> 16 access per line */ -/* H40 mode -> 18 access per line */ -/* */ -/* with fixed access slots timings detailled below. */ -/* */ -/* Each VRAM access is byte wide, so one VRAM write (word) need two slots. */ -/* */ -/*--------------------------------------------------------------------------*/ - -static void vdp_fifo_update(unsigned int cycles) -{ - int fifo_read_cnt, line_slots = 0; - - /* number of access slots up to current line */ - int total_slots = dma_timing[0][reg[12] & 1] * ((v_counter + 1) % lines_per_frame); - - /* number of access slots within current line */ - cycles -= mcycles_vdp; - while (fifo_timing[line_slots] <= cycles) - { - line_slots++; - } - - /* number of processed FIFO entries since last access (byte access needs two slots to process one FIFO word) */ - fifo_read_cnt = (total_slots + line_slots - fifo_slots) >> fifo_byte_access; - - if (fifo_read_cnt > 0) - { - /* process FIFO entries */ - fifo_write_cnt -= fifo_read_cnt; - - /* Clear FIFO full flag */ - status &= 0xFEFF; - - if (fifo_write_cnt <= 0) - { - /* No more FIFO entries */ - fifo_write_cnt = 0; - - /* Set FIFO empty flag */ - status |= 0x200; - - /* Reinitialize FIFO access slot counter */ - fifo_slots = total_slots + line_slots; - } - else - { - /* Update FIFO access slot counter */ - fifo_slots += (fifo_read_cnt << fifo_byte_access); - } - } - - /* next FIFO update cycle */ - fifo_cycles = mcycles_vdp + fifo_timing[fifo_slots - total_slots + fifo_byte_access]; -} - - -/*--------------------------------------------------------------------------*/ -/* Internal 16-bit data bus access function (Mode 5 only) */ -/*--------------------------------------------------------------------------*/ -static void vdp_bus_w(unsigned int data) -{ - /* write data to next FIFO entry */ - fifo[fifo_idx] = data; - - /* increment FIFO write pointer */ - fifo_idx = (fifo_idx + 1) & 3; - - /* Check destination code (CD0-CD3) */ - switch (code & 0x0F) - { - case 0x01: /* VRAM */ - { - /* VRAM address */ - int index = addr & 0xFFFE; - - /* Pointer to VRAM */ - uint16 *p = (uint16 *)&vram[index]; - - /* Byte-swap data if A0 is set */ - if (addr & 1) - { - data = ((data >> 8) | (data << 8)) & 0xFFFF; - } - - /* Intercept writes to Sprite Attribute Table */ - if ((index & sat_base_mask) == satb) - { - /* Update internal SAT */ - *(uint16 *) &sat[index & sat_addr_mask] = data; - } - - /* Only write unique data to VRAM */ - if (data != *p) - { - int name; - - /* Write data to VRAM */ - *p = data; - - /* Update pattern cache */ - MARK_BG_DIRTY (index); - } - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VRAM 0x%x write -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - - case 0x03: /* CRAM */ - { - /* Pointer to CRAM 9-bit word */ - uint16 *p = (uint16 *)&cram[addr & 0x7E]; - - /* Pack 16-bit bus data (BBB0GGG0RRR0) to 9-bit CRAM data (BBBGGGRRR) */ - data = ((data & 0xE00) >> 3) | ((data & 0x0E0) >> 2) | ((data & 0x00E) >> 1); - - /* Check if CRAM data is being modified */ - if (data != *p) - { - /* CRAM index (64 words) */ - int index = (addr >> 1) & 0x3F; - - /* Write CRAM data */ - *p = data; - - /* Color entry 0 of each palette is never displayed (transparent pixel) */ - if (index & 0x0F) - { - /* Update color palette */ - color_update_m5(index, data); - } - - /* Update backdrop color */ - if (index == border) - { - color_update_m5(0x00, data); - } - - /* CRAM modified during HBLANK (Striker, Zero the Kamikaze, etc) */ - if ((v_counter < bitmap.viewport.h) && (reg[1]& 0x40) && (m68k.cycles <= (mcycles_vdp + 860))) - { - /* Remap current line */ - remap_line(v_counter); - } - } -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] CRAM 0x%x write -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - - case 0x05: /* VSRAM */ - { - *(uint16 *)&vsram[addr & 0x7E] = data; - - /* 2-cell Vscroll mode */ - if (reg[11] & 0x04) - { - /* VSRAM writes during HBLANK (Adventures of Batman & Robin) */ - if ((v_counter < bitmap.viewport.h) && (reg[1] & 0x40) && (m68k.cycles <= (mcycles_vdp + 860))) - { - /* Remap current line */ - render_line(v_counter); - } - } -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VSRAM 0x%x write -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - - default: - { - /* add some delay until 68k periodical wait-states are accurately emulated ("Clue", "Microcosm") */ - m68k.cycles += 2; -#ifdef LOGERROR - error("[%d(%d)][%d(%d)] Invalid (%d) 0x%x write -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, code, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - } - - /* Increment address register */ - addr += reg[15]; -} - - -/*--------------------------------------------------------------------------*/ -/* 68k bus interface (Mega Drive VDP only) */ -/*--------------------------------------------------------------------------*/ - -static void vdp_68k_data_w_m4(unsigned int data) -{ - /* Clear pending flag */ - pending = 0; - - /* Restricted VDP writes during active display */ - if (!(status & 8) && (reg[1] & 0x40)) - { - /* Update VDP FIFO */ - vdp_fifo_update(m68k.cycles); - - /* Clear FIFO empty flag */ - status &= 0xFDFF; - - /* up to 4 words can be stored */ - if (fifo_write_cnt < 4) - { - /* Increment FIFO counter */ - fifo_write_cnt++; - - /* Set FIFO full flag if 4 words are stored */ - status |= ((fifo_write_cnt & 4) << 6); - } - else - { - /* CPU is halted until next FIFO entry processing */ - m68k.cycles = fifo_cycles; - - /* Update FIFO access slot counter */ - fifo_slots = fifo_slots + 1 + fifo_byte_access; - } - } - - /* Check destination code */ - if (code & 0x02) - { - /* CRAM index (32 words) */ - int index = addr & 0x1F; - - /* Pointer to CRAM 9-bit word */ - uint16 *p = (uint16 *)&cram[index << 1]; - - /* Pack 16-bit data (xxx000BBGGRR) to 9-bit CRAM data (xxxBBGGRR) */ - data = ((data & 0xE00) >> 3) | (data & 0x3F); - - /* Check if CRAM data is being modified */ - if (data != *p) - { - /* Write CRAM data */ - *p = data; - - /* Update color palette */ - color_update_m4(index, data); - - /* Update backdrop color */ - if (index == (0x10 | (border & 0x0F))) - { - color_update_m4(0x40, data); - } - } - } - else - { - /* VRAM address (interleaved format) */ - int index = ((addr << 1) & 0x3FC) | ((addr & 0x200) >> 8) | (addr & 0x3C00); - - /* Pointer to VRAM */ - uint16 *p = (uint16 *)&vram[index]; - - /* Byte-swap data if A0 is set */ - if (addr & 1) - { - data = ((data >> 8) | (data << 8)) & 0xFFFF; - } - - /* Only write unique data to VRAM */ - if (data != *p) - { - int name; - - /* Write data to VRAM */ - *p = data; - - /* Update the pattern cache */ - MARK_BG_DIRTY (index); - } - } - - /* Increment address register (TODO: check how address is incremented in Mode 4) */ - addr += (reg[15] + 1); -} - -static void vdp_68k_data_w_m5(unsigned int data) -{ - /* Clear pending flag */ - pending = 0; - - /* Restricted VDP writes during active display */ - if (!(status & 8) && (reg[1] & 0x40)) - { - /* Update VDP FIFO */ - vdp_fifo_update(m68k.cycles); - - /* Clear FIFO empty flag */ - status &= 0xFDFF; - - /* up to 4 words can be stored */ - if (fifo_write_cnt < 4) - { - /* Increment FIFO counter */ - fifo_write_cnt++; - - /* Set FIFO full flag if 4 words are stored */ - status |= ((fifo_write_cnt & 4) << 6); - } - else - { - /* CPU is halted until next FIFO entry processing (Chaos Engine / Soldiers of Fortune, Double Clutch, Titan Overdrive Demo) */ - m68k.cycles = fifo_cycles; - - /* Update FIFO access slot counter */ - fifo_slots += (1 + fifo_byte_access); - } - } - - /* Write data */ - vdp_bus_w(data); - - /* Check if DMA Fill is pending */ - if (dmafill) - { - /* Clear DMA Fill pending flag */ - dmafill = 0; - - /* DMA length */ - dma_length = (reg[20] << 8) | reg[19]; - - /* Zero DMA length (pre-decrementing counter) */ - if (!dma_length) - { - dma_length = 0x10000; - } - - /* Trigger DMA */ - vdp_dma_update(m68k.cycles); - } -} - -static unsigned int vdp_68k_data_r_m4(void) -{ - /* VRAM address (interleaved format) */ - int index = ((addr << 1) & 0x3FC) | ((addr & 0x200) >> 8) | (addr & 0x3C00); - - /* Clear pending flag */ - pending = 0; - - /* Increment address register (TODO: check how address is incremented in Mode 4) */ - addr += (reg[15] + 1); - - /* Read VRAM data */ - return *(uint16 *) &vram[index]; -} - -static unsigned int vdp_68k_data_r_m5(void) -{ - uint16 data = 0; - - /* Clear pending flag */ - pending = 0; - - /* Check destination code (CD0-CD3) & CD4 */ - switch (code & 0x1F) - { - case 0x00: - { - /* read two bytes from VRAM */ - data = *(uint16 *)&vram[addr & 0xFFFE]; - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VRAM 0x%x read -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - - case 0x04: - { - /* VSRAM index */ - int index = addr & 0x7E; - - /* Check against VSRAM max size (80 x 11-bits) */ - if (index >= 0x50) - { - /* Wrap to address 0 (TODO: check if still true with Genesis 3 model) */ - index = 0; - } - - /* Read 11-bit word from VSRAM */ - data = *(uint16 *)&vsram[index] & 0x7FF; - - /* Unused bits are set using data from next available FIFO entry */ - data |= (fifo[fifo_idx] & ~0x7FF); - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VSRAM 0x%x read -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - - case 0x08: - { - /* Read 9-bit word from CRAM */ - data = *(uint16 *)&cram[addr & 0x7E]; - - /* Unpack 9-bit CRAM data (BBBGGGRRR) to 16-bit bus data (BBB0GGG0RRR0) */ - data = ((data & 0x1C0) << 3) | ((data & 0x038) << 2) | ((data & 0x007) << 1); - - /* Unused bits are set using data from next available FIFO entry */ - data |= (fifo[fifo_idx] & ~0xEEE); - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] CRAM 0x%x read -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - - case 0x0c: /* undocumented 8-bit VRAM read */ - { - /* Read one byte from VRAM adjacent address */ - data = READ_BYTE(vram, addr ^ 1); - - /* Unused bits are set using data from next available FIFO entry */ - data |= (fifo[fifo_idx] & ~0xFF); - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] 8-bit VRAM 0x%x read -> 0x%x (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, addr, data, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - - default: - { - /* Invalid code value (normally locks VDP, hard reset required) */ -#ifdef LOGERROR - error("[%d(%d)][%d(%d)] Invalid (%d) 0x%x read (%x)\n", v_counter, m68k.cycles/MCYCLES_PER_LINE-1, m68k.cycles, m68k.cycles%MCYCLES_PER_LINE, code, addr, m68k_get_reg(M68K_REG_PC)); -#endif - break; - } - } - - /* Increment address register */ - addr += reg[15]; - - /* Return data */ - return data; -} - - -/*--------------------------------------------------------------------------*/ -/* Z80 bus interface (Mega Drive VDP in Master System compatibility mode) */ -/*--------------------------------------------------------------------------*/ - -static void vdp_z80_data_w_m4(unsigned int data) -{ - /* Clear pending flag */ - pending = 0; - - /* Check destination code */ - if (code & 0x02) - { - /* CRAM index (32 words) */ - int index = addr & 0x1F; - - /* Pointer to CRAM word */ - uint16 *p = (uint16 *)&cram[index << 1]; - - /* Check if CRAM data is being modified */ - if (data != *p) - { - /* Write CRAM data */ - *p = data; - - /* Update color palette */ - color_update_m4(index, data); - - /* Update backdrop color */ - if (index == (0x10 | (border & 0x0F))) - { - color_update_m4(0x40, data); - } - } - } - else - { - /* VRAM address */ - int index = addr & 0x3FFF; - - /* Only write unique data to VRAM */ - if (data != vram[index]) - { - int name; - - /* Write data */ - vram[index] = data; - - /* Update pattern cache */ - MARK_BG_DIRTY(index); - } - } - - /* Increment address register (TODO: check how address is incremented in Mode 4) */ - addr += (reg[15] + 1); -} - -static void vdp_z80_data_w_m5(unsigned int data) -{ - /* Clear pending flag */ - pending = 0; - - /* Push byte into FIFO */ - fifo[fifo_idx] = data << 8; - fifo_idx = (fifo_idx + 1) & 3; - - /* Check destination code (CD0-CD3) */ - switch (code & 0x0F) - { - case 0x01: /* VRAM */ - { - /* VRAM address (write low byte to even address & high byte to odd address) */ - int index = addr ^ 1; - - /* Intercept writes to Sprite Attribute Table */ - if ((index & sat_base_mask) == satb) - { - /* Update internal SAT */ - WRITE_BYTE(sat, index & sat_addr_mask, data); - } - - /* Only write unique data to VRAM */ - if (data != READ_BYTE(vram, index)) - { - int name; - - /* Write data */ - WRITE_BYTE(vram, index, data); - - /* Update pattern cache */ - MARK_BG_DIRTY (index); - } - break; - } - - case 0x03: /* CRAM */ - { - /* Pointer to CRAM word */ - uint16 *p = (uint16 *)&cram[addr & 0x7E]; - - /* Pack 8-bit value into 9-bit CRAM data */ - if (addr & 1) - { - /* Write high byte (0000BBB0 -> BBBxxxxxx) */ - data = (*p & 0x3F) | ((data & 0x0E) << 5); - } - else - { - /* Write low byte (GGG0RRR0 -> xxxGGGRRR) */ - data = (*p & 0x1C0) | ((data & 0x0E) >> 1)| ((data & 0xE0) >> 2); - } - - /* Check if CRAM data is being modified */ - if (data != *p) - { - /* CRAM index (64 words) */ - int index = (addr >> 1) & 0x3F; - - /* Write CRAM data */ - *p = data; - - /* Color entry 0 of each palette is never displayed (transparent pixel) */ - if (index & 0x0F) - { - /* Update color palette */ - color_update_m5(index, data); - } - - /* Update backdrop color */ - if (index == border) - { - color_update_m5(0x00, data); - } - } - break; - } - - case 0x05: /* VSRAM */ - { - /* Write low byte to even address & high byte to odd address */ - WRITE_BYTE(vsram, (addr & 0x7F) ^ 1, data); - break; - } - } - - /* Increment address register */ - addr += reg[15]; - - /* Check if DMA Fill is pending */ - if (dmafill) - { - /* Clear DMA Fill pending flag */ - dmafill = 0; - - /* DMA length */ - dma_length = (reg[20] << 8) | reg[19]; - - /* Zero DMA length (pre-decrementing counter) */ - if (!dma_length) - { - dma_length = 0x10000; - } - - /* Trigger DMA */ - vdp_dma_update(Z80.cycles); - } -} - -static unsigned int vdp_z80_data_r_m4(void) -{ - /* Read buffer */ - unsigned int data = fifo[0]; - - /* Clear pending flag */ - pending = 0; - - /* Process next read */ - fifo[0] = vram[addr & 0x3FFF]; - - /* Increment address register (TODO: check how address is incremented in Mode 4) */ - addr += (reg[15] + 1); - - /* Return data */ - return data; -} - -static unsigned int vdp_z80_data_r_m5(void) -{ - unsigned int data = 0; - - /* Clear pending flag */ - pending = 0; - - /* Check destination code (CD0-CD3) & CD4 */ - switch (code & 0x1F) - { - case 0x00: /* VRAM */ - { - /* Return low byte from even address & high byte from odd address */ - data = READ_BYTE(vram, addr ^ 1); - break; - } - - case 0x04: /* VSRAM */ - { - /* Return low byte from even address & high byte from odd address */ - data = READ_BYTE(vsram, (addr & 0x7F) ^ 1); - break; - } - - case 0x08: /* CRAM */ - { - /* Read CRAM data */ - data = *(uint16 *)&cram[addr & 0x7E]; - - /* Unpack 9-bit CRAM data (BBBGGGRRR) to 16-bit data (BBB0GGG0RRR0) */ - data = ((data & 0x1C0) << 3) | ((data & 0x038) << 2) | ((data & 0x007) << 1); - - /* Return low byte from even address & high byte from odd address */ - if (addr & 1) - { - data = data >> 8; - } - - data &= 0xFF; - break; - } - } - - /* Increment address register */ - addr += reg[15]; - - /* Return data */ - return data; -} - - -/*-----------------------------------------------------------------------------*/ -/* Z80 bus interface (Master System, Game Gear & SG-1000 VDP) */ -/*-----------------------------------------------------------------------------*/ - -static void vdp_z80_data_w_ms(unsigned int data) -{ - /* Clear pending flag */ - pending = 0; - - if (code < 3) - { - int index; - - /* Check if we are already on next line */ - int line = (lines_per_frame + (Z80.cycles / MCYCLES_PER_LINE) - 1) % lines_per_frame; - if ((line > v_counter) && (line < bitmap.viewport.h) && !(work_ram[0x1ffb] & cart.special)) - { - /* Render next line */ - v_counter = line; - render_line(line); - } - - /* VRAM address */ - index = addr & 0x3FFF; - - /* VRAM write */ - if (data != vram[index]) - { - int name; - vram[index] = data; - MARK_BG_DIRTY(index); - } - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VRAM 0x%x write -> 0x%x (%x)\n", v_counter, Z80.cycles/MCYCLES_PER_LINE-1, Z80.cycles, Z80.cycles%MCYCLES_PER_LINE, index, data, Z80.pc.w.l); -#endif - } - else - { - /* CRAM address */ - int index = addr & 0x1F; - - /* Pointer to CRAM word */ - uint16 *p = (uint16 *)&cram[index << 1]; - - /* Check if CRAM data is being modified */ - if (data != *p) - { - /* Write CRAM data */ - *p = data; - - /* Update color palette */ - color_update_m4(index, data); - - /* Update backdrop color */ - if (index == (0x10 | (border & 0x0F))) - { - color_update_m4(0x40, data); - } - } -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] CRAM 0x%x write -> 0x%x (%x)\n", v_counter, Z80.cycles/MCYCLES_PER_LINE-1, Z80.cycles, Z80.cycles%MCYCLES_PER_LINE, addr, data, Z80.pc.w.l); -#endif - } - - /* Update read buffer */ - fifo[0] = data; - - /* Update address register */ - addr++; -} - -static void vdp_z80_data_w_gg(unsigned int data) -{ - /* Clear pending flag */ - pending = 0; - - if (code < 3) - { - int index; - - /* Check if we are already on next line*/ - int line = (lines_per_frame + (Z80.cycles / MCYCLES_PER_LINE) - 1) % lines_per_frame; - if ((line > v_counter) && (line < bitmap.viewport.h) && !(work_ram[0x1ffb] & cart.special)) - { - /* Render next line */ - v_counter = line; - render_line(line); - } - - /* VRAM address */ - index = addr & 0x3FFF; - - /* VRAM write */ - if (data != vram[index]) - { - int name; - vram[index] = data; - MARK_BG_DIRTY(index); - } -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VRAM 0x%x write -> 0x%x (%x)\n", v_counter, Z80.cycles/MCYCLES_PER_LINE-1, Z80.cycles, Z80.cycles%MCYCLES_PER_LINE, index, data, Z80.pc.w.l); -#endif - } - else - { - if (addr & 1) - { - /* Pointer to CRAM word */ - uint16 *p = (uint16 *)&cram[addr & 0x3E]; - - /* 12-bit data word */ - data = (data << 8) | cached_write; - - /* Check if CRAM data is being modified */ - if (data != *p) - { - /* Color index (0-31) */ - int index = (addr >> 1) & 0x1F; - - /* Write CRAM data */ - *p = data; - - /* Update color palette */ - color_update_m4(index, data); - - /* Update backdrop color */ - if (index == (0x10 | (border & 0x0F))) - { - color_update_m4(0x40, data); - } - } - } - else - { - /* Latch LSB */ - cached_write = data; - } -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] CRAM 0x%x write -> 0x%x (%x)\n", v_counter, Z80.cycles/MCYCLES_PER_LINE-1, Z80.cycles, Z80.cycles%MCYCLES_PER_LINE, addr, data, Z80.pc.w.l); -#endif - } - - /* Update read buffer */ - fifo[0] = data; - - /* Update address register */ - addr++; -} - -static void vdp_z80_data_w_sg(unsigned int data) -{ - /* VRAM address */ - int index = addr & 0x3FFF; - - /* Clear pending flag */ - pending = 0; - - /* 4K address decoding (cf. tms9918a.txt) */ - if (!(reg[1] & 0x80)) - { - index = (index & 0x203F) | ((index >> 6) & 0x40) | ((index << 1) & 0x1F80); - } - - /* VRAM write */ - vram[index] = data; - - /* Update address register */ - addr++; - -#ifdef LOGVDP - error("[%d(%d)][%d(%d)] VRAM 0x%x write -> 0x%x (%x)\n", v_counter, Z80.cycles/MCYCLES_PER_LINE-1, Z80.cycles, Z80.cycles%MCYCLES_PER_LINE, index, data, Z80.pc.w.l); -#endif -} - -/*--------------------------------------------------------------------------*/ -/* DMA operations (Mega Drive VDP only) */ -/*--------------------------------------------------------------------------*/ - -void CDLog68k(uint addr, uint flags); - -/* DMA from 68K bus: $000000-$7FFFFF (external area) */ -static void vdp_dma_68k_ext(unsigned int length) -{ - uint16 data; - - /* 68k bus source address */ - uint32 source = (reg[23] << 17) | (dma_src << 1); - - do - { - /* Read data word from 68k bus */ - if (m68k.memory_map[source>>16].read16) - { - data = m68k.memory_map[source>>16].read16(source); - } - else - { - data = *(uint16 *)(m68k.memory_map[source>>16].base + (source & 0xFFFF)); - } - - if(biz_cdcallback) - { - //if((code & 0x0F) == 0x01) //VRAM target //lets handle everything here - { - CDLog68k(source,eCDLog_Flags_DMASource); - CDLog68k(source+1,eCDLog_Flags_DMASource); - } - } - - - /* Increment source address */ - source += 2; - - /* 128k DMA window */ - source = (reg[23] << 17) | (source & 0x1FFFF); - - /* Write data word to VRAM, CRAM or VSRAM */ - vdp_bus_w(data); - } - while (--length); - - /* Update DMA source address */ - dma_src = (source >> 1) & 0xffff; -} - -/* DMA from 68K bus: $800000-$FFFFFF (internal area) except I/O area */ -static void vdp_dma_68k_ram(unsigned int length) -{ - uint16 data; - - /* 68k bus source address */ - uint32 source = (reg[23] << 17) | (dma_src << 1); - - do - { - /* access Work-RAM by default */ - data = *(uint16 *)(work_ram + (source & 0xFFFF)); - - /* Increment source address */ - source += 2; - - /* 128k DMA window */ - source = (reg[23] << 17) | (source & 0x1FFFF); - - /* Write data word to VRAM, CRAM or VSRAM */ - vdp_bus_w(data); - } - while (--length); - - /* Update DMA source address */ - dma_src = (source >> 1) & 0xffff; -} - -/* DMA from 68K bus: $A00000-$A1FFFF (I/O area) specific */ -static void vdp_dma_68k_io(unsigned int length) -{ - uint16 data; - - /* 68k bus source address */ - uint32 source = (reg[23] << 17) | (dma_src << 1); - - do - { - /* Z80 area */ - if (source <= 0xA0FFFF) - { - /* Return $FFFF only when the Z80 isn't hogging the Z-bus. - (e.g. Z80 isn't reset and 68000 has the bus) */ - data = ((zstate ^ 3) ? *(uint16 *)(work_ram + (source & 0xFFFF)) : 0xFFFF); - } - - /* The I/O chip and work RAM try to drive the data bus which results - in both values being combined in random ways when read. - We return the I/O chip values which seem to have precedence, */ - else if (source <= 0xA1001F) - { - data = io_68k_read((source >> 1) & 0x0F); - data = (data << 8 | data); - } - - /* All remaining locations access work RAM */ - else - { - data = *(uint16 *)(work_ram + (source & 0xFFFF)); - } - - /* Increment source address */ - source += 2; - - /* 128k DMA window */ - source = (reg[23] << 17) | (source & 0x1FFFF); - - /* Write data to VRAM, CRAM or VSRAM */ - vdp_bus_w(data); - } - while (--length); - - /* Update DMA source address */ - dma_src = (source >> 1) & 0xffff; -} - -/* VRAM Copy */ -static void vdp_dma_copy(unsigned int length) -{ - /* CD4 should be set (CD0-CD3 ignored) otherwise VDP locks (hard reset needed) */ - if (code & 0x10) - { - int name; - uint8 data; - - /* VRAM source address */ - uint16 source = dma_src; - - do - { - /* Read byte from adjacent VRAM source address */ - data = READ_BYTE(vram, source ^ 1); - - /* Intercept writes to Sprite Attribute Table */ - if ((addr & sat_base_mask) == satb) - { - /* Update internal SAT */ - WRITE_BYTE(sat, (addr & sat_addr_mask) ^ 1, data); - } - - /* Write byte to adjacent VRAM destination address */ - WRITE_BYTE(vram, addr ^ 1, data); - - /* Update pattern cache */ - MARK_BG_DIRTY(addr); - - /* Increment VRAM source address */ - source++; - - /* Increment VRAM destination address */ - addr += reg[15]; - } - while (--length); - - /* Update DMA source address */ - dma_src = source; - } -} - -/* DMA Fill */ -static void vdp_dma_fill(unsigned int length) -{ - /* Check destination code (CD0-CD3) */ - switch (code & 0x0F) - { - case 0x01: /* VRAM */ - { - int name; - - /* Get source data from last written FIFO entry */ - uint8 data = fifo[(fifo_idx+3)&3] >> 8; - - do - { - /* Intercept writes to Sprite Attribute Table */ - if ((addr & sat_base_mask) == satb) - { - /* Update internal SAT */ - WRITE_BYTE(sat, (addr & sat_addr_mask) ^ 1, data); - } - - /* Write byte to adjacent VRAM address */ - WRITE_BYTE(vram, addr ^ 1, data); - - /* Update pattern cache */ - MARK_BG_DIRTY (addr); - - /* Increment VRAM address */ - addr += reg[15]; - } - while (--length); - break; - } - - case 0x03: /* CRAM */ - { - /* Get source data from next available FIFO entry */ - uint16 data = fifo[fifo_idx]; - - /* Pack 16-bit bus data (BBB0GGG0RRR0) to 9-bit CRAM data (BBBGGGRRR) */ - data = ((data & 0xE00) >> 3) | ((data & 0x0E0) >> 2) | ((data & 0x00E) >> 1); - - do - { - /* Pointer to CRAM 9-bit word */ - uint16 *p = (uint16 *)&cram[addr & 0x7E]; - - /* Check if CRAM data is being modified */ - if (data != *p) - { - /* CRAM index (64 words) */ - int index = (addr >> 1) & 0x3F; - - /* Write CRAM data */ - *p = data; - - /* Color entry 0 of each palette is never displayed (transparent pixel) */ - if (index & 0x0F) - { - /* Update color palette */ - color_update_m5(index, data); - } - - /* Update backdrop color */ - if (index == border) - { - color_update_m5(0x00, data); - } - } - - /* Increment CRAM address */ - addr += reg[15]; - } - while (--length); - break; - } - - case 0x05: /* VSRAM */ - { - /* Get source data from next available FIFO entry */ - uint16 data = fifo[fifo_idx]; - - do - { - /* Write VSRAM data */ - *(uint16 *)&vsram[addr & 0x7E] = data; - - /* Increment VSRAM address */ - addr += reg[15]; - } - while (--length); - break; - } - - default: - { - /* invalid destination does nothing (Williams Greatest Hits after soft reset) */ - - /* address is still incremented */ - addr += reg[15] * length; - } - } -} diff --git a/waterbox/gpgx/core/vdp_ctrl.h b/waterbox/gpgx/core/vdp_ctrl.h deleted file mode 100644 index 8d3036b284..0000000000 --- a/waterbox/gpgx/core/vdp_ctrl.h +++ /dev/null @@ -1,108 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Video Display Processor (68k & Z80 CPU interface) - * - * Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _VDP_H_ -#define _VDP_H_ - -/* VDP context */ -extern uint8 reg[0x20]; -extern uint8 sat[0x400]; -extern uint8 vram[0x10000]; -extern uint8 cram[0x80]; -extern uint8 vsram[0x80]; -extern uint8 hint_pending; -extern uint8 vint_pending; -extern uint16 status; -extern uint32 dma_length; - -/* Global variables */ -extern uint16 ntab; -extern uint16 ntbb; -extern uint16 ntwb; -extern uint16 satb; -extern uint16 hscb; -extern uint8 bg_name_dirty[0x800]; -extern uint16 bg_name_list[0x800]; -extern uint16 bg_list_index; -extern uint8 hscroll_mask; -extern uint8 playfield_shift; -extern uint8 playfield_col_mask; -extern uint16 playfield_row_mask; -extern uint8 odd_frame; -extern uint8 im2_flag; -extern uint8 interlaced; -extern uint8 vdp_pal; -extern uint16 v_counter; -extern uint16 vc_max; -extern uint16 vscroll; -extern uint16 lines_per_frame; -extern uint16 max_sprite_pixels; -extern int32 fifo_write_cnt; -extern uint32 fifo_slots; -extern uint32 hvc_latch; -extern const uint8 *hctab; - -/* Function pointers */ -extern void (*vdp_68k_data_w)(unsigned int data); -extern void (*vdp_z80_data_w)(unsigned int data); -extern unsigned int (*vdp_68k_data_r)(void); -extern unsigned int (*vdp_z80_data_r)(void); - -/* Function prototypes */ -extern void vdp_init(void); -extern void vdp_reset(void); -extern void vdp_dma_update(unsigned int cycles); -extern void vdp_68k_ctrl_w(unsigned int data); -extern void vdp_z80_ctrl_w(unsigned int data); -extern void vdp_sms_ctrl_w(unsigned int data); -extern void vdp_tms_ctrl_w(unsigned int data); -extern unsigned int vdp_68k_ctrl_r(unsigned int cycles); -extern unsigned int vdp_z80_ctrl_r(unsigned int cycles); -extern unsigned int vdp_hvc_r(unsigned int cycles); -extern void vdp_test_w(unsigned int data); -extern int vdp_68k_irq_ack(int int_level); - -void write_cram_byte(int addr, uint8 val); -void write_vram_byte(int addr, uint8 val); -void flush_vram_cache(void); -void vdp_invalidate_full_cache(void); - -#endif /* _VDP_H_ */ diff --git a/waterbox/gpgx/core/vdp_render.c b/waterbox/gpgx/core/vdp_render.c deleted file mode 100644 index 96ff0f517b..0000000000 --- a/waterbox/gpgx/core/vdp_render.c +++ /dev/null @@ -1,4277 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Video Display Processor (Modes 0, 1, 2, 3, 4 & 5 rendering) - * - * Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP - * - * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#include "shared.h" -#include "md_ntsc.h" -#include "sms_ntsc.h" - -// layer toggle -extern int cinterface_render_bga; -extern int cinterface_render_bgb; -extern int cinterface_render_bgw; -extern int cinterface_render_obj; -extern uint8 cinterface_custom_backdrop; -extern uint32 cinterface_custom_backdrop_color; - -/*** NTSC Filters ***/ -extern md_ntsc_t *md_ntsc; -extern sms_ntsc_t *sms_ntsc; - - -/* Output pixels type*/ -#if defined(USE_8BPP_RENDERING) -#define PIXEL_OUT_T uint8 -#elif defined(USE_32BPP_RENDERING) -#define PIXEL_OUT_T uint32 -#else -#define PIXEL_OUT_T uint16 -#endif - - -/* Pixel priority look-up tables information */ -#define LUT_MAX (6) -#define LUT_SIZE (0x10000) - - -#ifdef ALIGN_LONG -#undef READ_LONG -#undef WRITE_LONG - -INLINE uint32 READ_LONG(void *address) -{ - if ((uint32)address & 3) - { -#ifdef LSB_FIRST /* little endian version */ - return ( *((uint8 *)address) + - (*((uint8 *)address+1) << 8) + - (*((uint8 *)address+2) << 16) + - (*((uint8 *)address+3) << 24) ); -#else /* big endian version */ - return ( *((uint8 *)address+3) + - (*((uint8 *)address+2) << 8) + - (*((uint8 *)address+1) << 16) + - (*((uint8 *)address) << 24) ); -#endif /* LSB_FIRST */ - } - else return *(uint32 *)address; -} - -INLINE void WRITE_LONG(void *address, uint32 data) -{ - if ((uint32)address & 3) - { -#ifdef LSB_FIRST - *((uint8 *)address) = data; - *((uint8 *)address+1) = (data >> 8); - *((uint8 *)address+2) = (data >> 16); - *((uint8 *)address+3) = (data >> 24); -#else - *((uint8 *)address+3) = data; - *((uint8 *)address+2) = (data >> 8); - *((uint8 *)address+1) = (data >> 16); - *((uint8 *)address) = (data >> 24); -#endif /* LSB_FIRST */ - return; - } - else *(uint32 *)address = data; -} - -#endif /* ALIGN_LONG */ - - -/* Draw 2-cell column (8-pixels high) */ -/* - Pattern cache base address: VHN NNNNNNNN NNYYYxxx - with : - x = Pattern Pixel (0-7) - Y = Pattern Row (0-7) - N = Pattern Number (0-2047) from pattern attribute - H = Horizontal Flip bit from pattern attribute - V = Vertical Flip bit from pattern attribute -*/ -#define GET_LSB_TILE(ATTR, LINE) \ - atex = atex_table[(ATTR >> 13) & 7]; \ - src = (uint32 *)&bg_pattern_cache[(ATTR & 0x00001FFF) << 6 | (LINE)]; -#define GET_MSB_TILE(ATTR, LINE) \ - atex = atex_table[(ATTR >> 29) & 7]; \ - src = (uint32 *)&bg_pattern_cache[(ATTR & 0x1FFF0000) >> 10 | (LINE)]; - -/* Draw 2-cell column (16 pixels high) */ -/* - Pattern cache base address: VHN NNNNNNNN NYYYYxxx - with : - x = Pattern Pixel (0-7) - Y = Pattern Row (0-15) - N = Pattern Number (0-1023) - H = Horizontal Flip bit - V = Vertical Flip bit -*/ -#define GET_LSB_TILE_IM2(ATTR, LINE) \ - atex = atex_table[(ATTR >> 13) & 7]; \ - src = (uint32 *)&bg_pattern_cache[((ATTR & 0x000003FF) << 7 | (ATTR & 0x00001800) << 6 | (LINE)) ^ ((ATTR & 0x00001000) >> 6)]; -#define GET_MSB_TILE_IM2(ATTR, LINE) \ - atex = atex_table[(ATTR >> 29) & 7]; \ - src = (uint32 *)&bg_pattern_cache[((ATTR & 0x03FF0000) >> 9 | (ATTR & 0x18000000) >> 10 | (LINE)) ^ ((ATTR & 0x10000000) >> 22)]; - -/* - One column = 2 tiles - Two pattern attributes are written in VRAM as two consecutives 16-bit words: - - P = priority bit - C = color palette (2 bits) - V = Vertical Flip bit - H = Horizontal Flip bit - N = Pattern Number (11 bits) - - (MSB) PCCVHNNN NNNNNNNN (LSB) (MSB) PCCVHNNN NNNNNNNN (LSB) - PATTERN1 PATTERN2 - - Both pattern attributes are read from VRAM as one 32-bit word: - - LIT_ENDIAN: (MSB) PCCVHNNN NNNNNNNN PCCVHNNN NNNNNNNN (LSB) - PATTERN2 PATTERN1 - - BIG_ENDIAN: (MSB) PCCVHNNN NNNNNNNN PCCVHNNN NNNNNNNN (LSB) - PATTERN1 PATTERN2 - - - In line buffers, one pixel = one byte: (msb) 0Pppcccc (lsb) - with: - P = priority bit (from pattern attribute) - p = color palette (from pattern attribute) - c = color data (from pattern cache) - - One pattern = 8 pixels = 8 bytes = two 32-bit writes per pattern -*/ - -#ifdef ALIGN_LONG -#ifdef LSB_FIRST -#define DRAW_COLUMN(ATTR, LINE) \ - GET_LSB_TILE(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; \ - GET_MSB_TILE(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; -#define DRAW_COLUMN_IM2(ATTR, LINE) \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; -#else -#define DRAW_COLUMN(ATTR, LINE) \ - GET_MSB_TILE(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; \ - GET_LSB_TILE(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; -#define DRAW_COLUMN_IM2(ATTR, LINE) \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - WRITE_LONG(dst, src[0] | atex); \ - dst++; \ - WRITE_LONG(dst, src[1] | atex); \ - dst++; -#endif -#else /* NOT ALIGNED */ -#ifdef LSB_FIRST -#define DRAW_COLUMN(ATTR, LINE) \ - GET_LSB_TILE(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); \ - GET_MSB_TILE(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); -#define DRAW_COLUMN_IM2(ATTR, LINE) \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); -#else -#define DRAW_COLUMN(ATTR, LINE) \ - GET_MSB_TILE(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); \ - GET_LSB_TILE(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); -#define DRAW_COLUMN_IM2(ATTR, LINE) \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - *dst++ = (src[0] | atex); \ - *dst++ = (src[1] | atex); -#endif -#endif /* ALIGN_LONG */ - -#ifdef ALT_RENDERER -/* Draw background tiles directly using priority look-up table */ -/* SRC_A = layer A rendered pixel line (4 bytes = 4 pixels at once) */ -/* SRC_B = layer B cached pixel line (4 bytes = 4 pixels at once) */ -/* Note: cache address is always aligned so no need to use READ_LONG macro */ -/* This might be faster or slower than original method, depending on */ -/* architecture (x86, PowerPC), cache size, memory access speed, etc... */ - -#ifdef LSB_FIRST -#define DRAW_BG_TILE(SRC_A, SRC_B) \ - *lb++ = table[((SRC_B << 8) & 0xff00) | (SRC_A & 0xff)]; \ - *lb++ = table[(SRC_B & 0xff00) | ((SRC_A >> 8) & 0xff)]; \ - *lb++ = table[((SRC_B >> 8) & 0xff00) | ((SRC_A >> 16) & 0xff)]; \ - *lb++ = table[((SRC_B >> 16) & 0xff00) | ((SRC_A >> 24) & 0xff)]; -#else -#define DRAW_BG_TILE(SRC_A, SRC_B) \ - *lb++ = table[((SRC_B >> 16) & 0xff00) | ((SRC_A >> 24) & 0xff)]; \ - *lb++ = table[((SRC_B >> 8) & 0xff00) | ((SRC_A >> 16) & 0xff)]; \ - *lb++ = table[(SRC_B & 0xff00) | ((SRC_A >> 8) & 0xff)]; \ - *lb++ = table[((SRC_B << 8) & 0xff00) | (SRC_A & 0xff)]; -#endif - -#ifdef ALIGN_LONG -#ifdef LSB_FIRST -#define DRAW_BG_COLUMN(ATTR, LINE, SRC_A, SRC_B) \ - GET_LSB_TILE(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_MSB_TILE(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#define DRAW_BG_COLUMN_IM2(ATTR, LINE, SRC_A, SRC_B) \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#else -#define DRAW_BG_COLUMN(ATTR, LINE, SRC_A, SRC_B) \ - GET_MSB_TILE(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_LSB_TILE(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#define DRAW_BG_COLUMN_IM2(ATTR, LINE, SRC_A, SRC_B) \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = READ_LONG((uint32 *)lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#endif -#else /* NOT ALIGNED */ -#ifdef LSB_FIRST -#define DRAW_BG_COLUMN(ATTR, LINE, SRC_A, SRC_B) \ - GET_LSB_TILE(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_MSB_TILE(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#define DRAW_BG_COLUMN_IM2(ATTR, LINE, SRC_A, SRC_B) \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#else -#define DRAW_BG_COLUMN(ATTR, LINE, SRC_A, SRC_B) \ - GET_MSB_TILE(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_LSB_TILE(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#define DRAW_BG_COLUMN_IM2(ATTR, LINE, SRC_A, SRC_B) \ - GET_MSB_TILE_IM2(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - GET_LSB_TILE_IM2(ATTR, LINE) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[0] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) \ - SRC_A = *(uint32 *)(lb); \ - SRC_B = (src[1] | atex); \ - DRAW_BG_TILE(SRC_A, SRC_B) -#endif -#endif /* ALIGN_LONG */ -#endif /* ALT_RENDERER */ - -#define DRAW_SPRITE_TILE(WIDTH,ATTR,TABLE) \ - if (!cinterface_render_obj) return; \ - for (i=0;i> 10); \ - } \ - } - -#define DRAW_SPRITE_TILE_ACCURATE(WIDTH,ATTR,TABLE) \ - if (!cinterface_render_obj) return; \ - for (i=0;i> 1); \ - status |= 0x20; \ - } \ - } \ - } - -#define DRAW_SPRITE_TILE_ACCURATE_2X(WIDTH,ATTR,TABLE) \ - for (i=0;i> 1); \ - status |= 0x20; \ - } \ - temp &= 0x00FF; \ - temp |= (lb[i+1] << 8); \ - lb[i+1] = TABLE[temp | ATTR]; \ - if ((temp & 0x8000) && !(status & 0x20)) \ - { \ - spr_col = (v_counter << 8) | ((xpos + i + 1 + 13) >> 1); \ - status |= 0x20; \ - } \ - } \ - } - - -/* Pixels conversion macro */ -/* 4-bit color channels are either compressed to 2/3-bit or dithered to 5/6/8-bit equivalents */ -/* 3:3:2 RGB */ -#if defined(USE_8BPP_RENDERING) -#define MAKE_PIXEL(r,g,b) (((r) >> 1) << 5 | ((g) >> 1) << 2 | (b) >> 2) - -/* 5:5:5 RGB */ -#elif defined(USE_15BPP_RENDERING) -#define MAKE_PIXEL(r,g,b) ((r) << 11 | ((r) >> 3) << 10 | (g) << 6 | ((g) >> 3) << 5 | (b) << 1 | (b) >> 3) - -/* 5:6:5 RGB */ -#elif defined(USE_16BPP_RENDERING) -#define MAKE_PIXEL(r,g,b) ((r) << 12 | ((r) >> 3) << 11 | (g) << 7 | ((g) >> 2) << 5 | (b) << 1 | (b) >> 3) - -/* 8:8:8 RGB */ -#elif defined(USE_32BPP_RENDERING) -#define MAKE_PIXEL(r,g,b) (0xff000000 | (r) << 20 | (r) << 16 | (g) << 12 | (g) << 8 | (b) << 4 | (b)) -#endif - -/* Window & Plane A clipping */ -static struct clip_t -{ - uint8 left; - uint8 right; - uint8 enable; -} clip[2]; - -/* Pattern attribute (priority + palette bits) expansion table */ -static const uint32 atex_table[] = -{ - 0x00000000, - 0x10101010, - 0x20202020, - 0x30303030, - 0x40404040, - 0x50505050, - 0x60606060, - 0x70707070 -}; - -/* fixed Master System palette for Modes 0,1,2,3 */ -static const uint8 tms_crom[16] = -{ - 0x00, 0x00, 0x08, 0x0C, - 0x10, 0x30, 0x01, 0x3C, - 0x02, 0x03, 0x05, 0x0F, - 0x04, 0x33, 0x15, 0x3F -}; - -/* original SG-1000 palette */ -#if defined(USE_8BPP_RENDERING) -static const uint8 tms_palette[16] = -{ - 0x00, 0x00, 0x39, 0x79, - 0x4B, 0x6F, 0xC9, 0x5B, - 0xE9, 0xED, 0xD5, 0xD9, - 0x35, 0xCE, 0xDA, 0xFF -}; - -#elif defined(USE_15BPP_RENDERING) -static const uint16 tms_palette[16] = -{ - 0x0000, 0x0000, 0x1308, 0x2F6F, - 0x295D, 0x3DDF, 0x6949, 0x23BE, - 0x7D4A, 0x7DEF, 0x6B0A, 0x7330, - 0x12A7, 0x6177, 0x6739, 0x7FFF -}; - -#elif defined(USE_16BPP_RENDERING) -static const uint16 tms_palette[16] = -{ - 0x0000, 0x0000, 0x2648, 0x5ECF, - 0x52BD, 0x7BBE, 0xD289, 0x475E, - 0xF2AA, 0xFBCF, 0xD60A, 0xE670, - 0x2567, 0xC2F7, 0xCE59, 0xFFFF -}; - -#elif defined(USE_32BPP_RENDERING) -static const uint32 tms_palette[16] = -{ - 0x000000, 0x000000, 0x21C842, 0x5EDC78, - 0x5455ED, 0x7D76FC, 0xD4524D, 0x42EBF5, - 0xFC5554, 0xFF7978, 0xD4C154, 0xE6CE80, - 0x21B03B, 0xC95BB4, 0xCCCCCC, 0xFFFFFF -}; -#endif - -/* Cached and flipped patterns */ -uint8 *bg_pattern_cache; - -/* Sprite pattern name offset look-up table (Mode 5) */ -static uint8 name_lut[0x400]; - -uint32 *vdp_bp_lut; - -/* Bitplane to packed pixel look-up table (Mode 4) */ -#define bp_lut vdp_bp_lut - -uint8 **vdp_lut; - -/* Layer priority pixel look-up tables */ -#define lut vdp_lut - -/* Output pixel data look-up tables*/ -PIXEL_OUT_T pixel[0x100]; -static PIXEL_OUT_T pixel_lut[3][0x200]; -static PIXEL_OUT_T pixel_lut_m4[0x40]; - -/* Background & Sprite line buffers */ -static uint8 linebuf[2][0x200]; - -/* Sprite limit flag */ -static uint8 spr_ovr; - -/* Sprite parsing lists */ -typedef struct -{ - uint16 ypos; - uint16 xpos; - uint16 attr; - uint16 size; -} object_info_t; - -static object_info_t obj_info[2][MAX_SPRITES_PER_LINE]; - -/* Sprite Counter */ -static uint8 object_count[2]; - -/* Sprite Collision Info */ -uint16 spr_col; - -/* Function pointers */ -void (*render_bg)(int line); -void (*render_obj)(int line); -void (*parse_satb)(int line); -void (*update_bg_pattern_cache)(int index); - - -/*--------------------------------------------------------------------------*/ -/* Sprite pattern name offset look-up table function (Mode 5) */ -/*--------------------------------------------------------------------------*/ - -static void make_name_lut(void) -{ - int vcol, vrow; - int width, height; - int flipx, flipy; - int i; - - for (i = 0; i < 0x400; i += 1) - { - /* Sprite settings */ - vcol = i & 3; - vrow = (i >> 2) & 3; - height = (i >> 4) & 3; - width = (i >> 6) & 3; - flipx = (i >> 8) & 1; - flipy = (i >> 9) & 1; - - if ((vrow > height) || vcol > width) - { - /* Invalid settings (unused) */ - name_lut[i] = -1; - } - else - { - /* Adjust column & row index if sprite is flipped */ - if(flipx) vcol = (width - vcol); - if(flipy) vrow = (height - vrow); - - /* Pattern offset (pattern order is up->down->left->right) */ - name_lut[i] = vrow + (vcol * (height + 1)); - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* Bitplane to packed pixel look-up table function (Mode 4) */ -/*--------------------------------------------------------------------------*/ - -static void make_bp_lut(void) -{ - int x,i,j; - uint32 out; - - /* ---------------------- */ - /* Pattern color encoding */ - /* -------------------------------------------------------------------------*/ - /* 4 byteplanes are required to define one pattern line (8 pixels) */ - /* A single pixel color is coded with 4 bits (c3 c2 c1 c0) */ - /* Each bit is coming from byteplane bits, as explained below: */ - /* pixel 0: c3 = bp3 bit 7, c2 = bp2 bit 7, c1 = bp1 bit 7, c0 = bp0 bit 7 */ - /* pixel 1: c3 = bp3 bit 6, c2 = bp2 bit 6, c1 = bp1 bit 6, c0 = bp0 bit 6 */ - /* ... */ - /* pixel 7: c3 = bp3 bit 0, c2 = bp2 bit 0, c1 = bp1 bit 0, c0 = bp0 bit 0 */ - /* -------------------------------------------------------------------------*/ - - for(i = 0; i < 0x100; i++) - for(j = 0; j < 0x100; j++) - { - out = 0; - for(x = 0; x < 8; x++) - { - /* pixel line data = hh00gg00ff00ee00dd00cc00bb00aa00 (32-bit) */ - /* aa-hh = upper or lower 2-bit values of pixels 0-7 (shifted) */ - out |= (j & (0x80 >> x)) ? (uint32)(8 << (x << 2)) : 0; - out |= (i & (0x80 >> x)) ? (uint32)(4 << (x << 2)) : 0; - } - - /* i = low byte in VRAM (bp0 or bp2) */ - /* j = high byte in VRAM (bp1 or bp3) */ - #ifdef LSB_FIRST - bp_lut[(j << 8) | (i)] = out; - #else - bp_lut[(i << 8) | (j)] = out; - #endif - } -} - - -/*--------------------------------------------------------------------------*/ -/* Layers priority pixel look-up tables functions */ -/*--------------------------------------------------------------------------*/ - -/* Input (bx): d5-d0=color, d6=priority, d7=unused */ -/* Input (ax): d5-d0=color, d6=priority, d7=unused */ -/* Output: d5-d0=color, d6=priority, d7=zero */ -static uint32 make_lut_bg(uint32 bx, uint32 ax) -{ - int bf = (bx & 0x7F); - int bp = (bx & 0x40); - int b = (bx & 0x0F); - - int af = (ax & 0x7F); - int ap = (ax & 0x40); - int a = (ax & 0x0F); - - int c = (ap ? (a ? af : bf) : (bp ? (b ? bf : af) : (a ? af : bf))); - - /* Strip palette & priority bits from transparent pixels */ - if((c & 0x0F) == 0x00) c &= 0x80; - - return (c); -} - -/* Input (bx): d5-d0=color, d6=priority, d7=unused */ -/* Input (sx): d5-d0=color, d6=priority, d7=unused */ -/* Output: d5-d0=color, d6=priority, d7=intensity select (0=half/1=normal) */ -static uint32 make_lut_bg_ste(uint32 bx, uint32 ax) -{ - int bf = (bx & 0x7F); - int bp = (bx & 0x40); - int b = (bx & 0x0F); - - int af = (ax & 0x7F); - int ap = (ax & 0x40); - int a = (ax & 0x0F); - - int c = (ap ? (a ? af : bf) : (bp ? (b ? bf : af) : (a ? af : bf))); - - /* Half intensity when both pixels are low priority */ - c |= ((ap | bp) << 1); - - /* Strip palette & priority bits from transparent pixels */ - if((c & 0x0F) == 0x00) c &= 0x80; - - return (c); -} - -/* Input (bx): d5-d0=color, d6=priority/1, d7=sprite pixel marker */ -/* Input (sx): d5-d0=color, d6=priority, d7=unused */ -/* Output: d5-d0=color, d6=priority, d7=sprite pixel marker */ -static uint32 make_lut_obj(uint32 bx, uint32 sx) -{ - int c; - - int bf = (bx & 0x7F); - int bs = (bx & 0x80); - int sf = (sx & 0x7F); - - if((sx & 0x0F) == 0) return bx; - - c = (bs ? bf : sf); - - /* Strip palette bits from transparent pixels */ - if((c & 0x0F) == 0x00) c &= 0xC0; - - return (c | 0x80); -} - - -/* Input (bx): d5-d0=color, d6=priority, d7=opaque sprite pixel marker */ -/* Input (sx): d5-d0=color, d6=priority, d7=unused */ -/* Output: d5-d0=color, d6=zero/priority, d7=opaque sprite pixel marker */ -static uint32 make_lut_bgobj(uint32 bx, uint32 sx) -{ - int c; - - int bf = (bx & 0x3F); - int bs = (bx & 0x80); - int bp = (bx & 0x40); - int b = (bx & 0x0F); - - int sf = (sx & 0x3F); - int sp = (sx & 0x40); - int s = (sx & 0x0F); - - if(s == 0) return bx; - - /* Previous sprite has higher priority */ - if(bs) return bx; - - c = (sp ? sf : (bp ? (b ? bf : sf) : sf)); - - /* Strip palette & priority bits from transparent pixels */ - if((c & 0x0F) == 0x00) c &= 0x80; - - return (c | 0x80); -} - -/* Input (bx): d5-d0=color, d6=priority, d7=intensity (half/normal) */ -/* Input (sx): d5-d0=color, d6=priority, d7=sprite marker */ -/* Output: d5-d0=color, d6=intensity (half/normal), d7=(double/invalid) */ -static uint32 make_lut_bgobj_ste(uint32 bx, uint32 sx) -{ - int c; - - int bf = (bx & 0x3F); - int bp = (bx & 0x40); - int b = (bx & 0x0F); - int bi = (bx & 0x80) >> 1; - - int sf = (sx & 0x3F); - int sp = (sx & 0x40); - int s = (sx & 0x0F); - int si = sp | bi; - - if(sp) - { - if(s) - { - if((sf & 0x3E) == 0x3E) - { - if(sf & 1) - { - c = (bf | 0x00); - } - else - { - c = (bx & 0x80) ? (bf | 0x80) : (bf | 0x40); - } - } - else - { - if(sf == 0x0E || sf == 0x1E || sf == 0x2E) - { - c = (sf | 0x40); - } - else - { - c = (sf | si); - } - } - } - else - { - c = (bf | bi); - } - } - else - { - if(bp) - { - if(b) - { - c = (bf | bi); - } - else - { - if(s) - { - if((sf & 0x3E) == 0x3E) - { - if(sf & 1) - { - c = (bf | 0x00); - } - else - { - c = (bx & 0x80) ? (bf | 0x80) : (bf | 0x40); - } - } - else - { - if(sf == 0x0E || sf == 0x1E || sf == 0x2E) - { - c = (sf | 0x40); - } - else - { - c = (sf | si); - } - } - } - else - { - c = (bf | bi); - } - } - } - else - { - if(s) - { - if((sf & 0x3E) == 0x3E) - { - if(sf & 1) - { - c = (bf | 0x00); - } - else - { - c = (bx & 0x80) ? (bf | 0x80) : (bf | 0x40); - } - } - else - { - if(sf == 0x0E || sf == 0x1E || sf == 0x2E) - { - c = (sf | 0x40); - } - else - { - c = (sf | si); - } - } - } - else - { - c = (bf | bi); - } - } - } - - if((c & 0x0f) == 0x00) c &= 0xC0; - - return (c); -} - -/* Input (bx): d3-d0=color, d4=palette, d5=priority, d6=zero, d7=sprite pixel marker */ -/* Input (sx): d3-d0=color, d7-d4=zero */ -/* Output: d3-d0=color, d4=palette, d5=zero/priority, d6=zero, d7=sprite pixel marker */ -static uint32 make_lut_bgobj_m4(uint32 bx, uint32 sx) -{ - int c; - - int bf = (bx & 0x3F); - int bs = (bx & 0x80); - int bp = (bx & 0x20); - int b = (bx & 0x0F); - - int s = (sx & 0x0F); - int sf = (s | 0x10); /* force palette bit */ - - /* Transparent sprite pixel */ - if(s == 0) return bx; - - /* Previous sprite has higher priority */ - if(bs) return bx; - - /* note: priority bit is always 0 for Modes 0,1,2,3 */ - c = (bp ? (b ? bf : sf) : sf); - - return (c | 0x80); -} - - -/*--------------------------------------------------------------------------*/ -/* Pixel layer merging function */ -/*--------------------------------------------------------------------------*/ - -INLINE void merge(uint8 *srca, uint8 *srcb, uint8 *dst, uint8 *table, int width) -{ - do - { - *dst++ = table[(*srcb++ << 8) | (*srca++)]; - } - while (--width); -} - - -/*--------------------------------------------------------------------------*/ -/* Pixel color lookup tables initialization */ -/*--------------------------------------------------------------------------*/ - -static void palette_init(void) -{ - int r, g, b, i; - - /************************************************/ - /* Each R,G,B color channel is 4-bit with a */ - /* total of 15 different intensity levels. */ - /* */ - /* Color intensity depends on the mode: */ - /* */ - /* normal : xxx0 (0-14) */ - /* shadow : 0xxx (0-7) */ - /* highlight: 1xxx - 1 (7-14) */ - /* mode4 : xxxx(*) (0-15) */ - /* GG mode : xxxx (0-15) */ - /* */ - /* with x = original CRAM value (2, 3 or 4-bit) */ - /* (*) 2-bit CRAM value is expanded to 4-bit */ - /************************************************/ - - /* Initialize Mode 5 pixel color look-up tables */ - for (i = 0; i < 0x200; i++) - { - /* CRAM 9-bit value (BBBGGGRRR) */ - r = (i >> 0) & 7; - g = (i >> 3) & 7; - b = (i >> 6) & 7; - - /* Convert to output pixel format */ - pixel_lut[0][i] = MAKE_PIXEL(r,g,b); - pixel_lut[1][i] = MAKE_PIXEL(r<<1,g<<1,b<<1); - pixel_lut[2][i] = MAKE_PIXEL(r+7,g+7,b+7); - } - - /* Initialize Mode 4 pixel color look-up table */ - for (i = 0; i < 0x40; i++) - { - /* CRAM 6-bit value (000BBGGRR) */ - r = (i >> 0) & 3; - g = (i >> 2) & 3; - b = (i >> 4) & 3; - - /* Expand to full range & convert to output pixel format */ - pixel_lut_m4[i] = MAKE_PIXEL((r << 2) | r, (g << 2) | g, (b << 2) | b); - } -} - - -/*--------------------------------------------------------------------------*/ -/* Color palette update functions */ -/*--------------------------------------------------------------------------*/ - -void color_update_m4(int index, unsigned int data) -{ - switch (system_hw) - { - case SYSTEM_GG: - { - /* CRAM value (BBBBGGGGRRRR) */ - int r = (data >> 0) & 0x0F; - int g = (data >> 4) & 0x0F; - int b = (data >> 8) & 0x0F; - - /* Convert to output pixel */ - data = MAKE_PIXEL(r,g,b); - break; - } - - case SYSTEM_SG: - { - /* Fixed TMS99xx palette */ - if (index & 0x0F) - { - /* Colors 1-15 */ - data = tms_palette[index & 0x0F]; - } - else - { - /* Backdrop color */ - data = tms_palette[reg[7] & 0x0F]; - } - break; - } - - default: - { - /* Test M4 bit */ - if (!(reg[0] & 0x04)) - { - if (system_hw & SYSTEM_MD) - { - /* Invalid Mode (black screen) */ - data = 0x00; - } - else if (system_hw != SYSTEM_GGMS) - { - /* Fixed CRAM palette */ - if (index & 0x0F) - { - /* Colors 1-15 */ - data = tms_crom[index & 0x0F]; - } - else - { - /* Backdrop color */ - data = tms_crom[reg[7] & 0x0F]; - } - } - } - - /* Mode 4 palette */ - data = pixel_lut_m4[data & 0x3F]; - break; - } - } - - - /* Input pixel: x0xiiiii (normal) or 01000000 (backdrop) */ - if (reg[0] & 0x04) - { - /* Mode 4 */ - pixel[0x00 | index] = data; - pixel[0x20 | index] = data; - pixel[0x80 | index] = data; - pixel[0xA0 | index] = data; - } - else - { - /* TMS99xx modes (palette bit forced to 1 because Game Gear uses CRAM palette #1) */ - if ((index == 0x40) || (index == (0x10 | (reg[7] & 0x0F)))) - { - /* Update backdrop color */ - pixel[0x40] = data; - - /* Update transparent color */ - pixel[0x10] = data; - pixel[0x30] = data; - pixel[0x90] = data; - pixel[0xB0] = data; - } - - if (index & 0x0F) - { - /* update non-transparent colors */ - pixel[0x00 | index] = data; - pixel[0x20 | index] = data; - pixel[0x80 | index] = data; - pixel[0xA0 | index] = data; - } - } -} - -void color_update_m5(int index, unsigned int data) -{ - /* Palette Mode */ - if (!(reg[0] & 0x04)) - { - /* Color value is limited to 00X00X00X */ - data &= 0x49; - } - - if (index == 0 && cinterface_custom_backdrop) - { - pixel[0x00] = pixel[0x40] = pixel[0x80] = cinterface_custom_backdrop_color; - } - else - { - if(reg[12] & 0x08) - { - /* Mode 5 (Shadow/Normal/Highlight) */ - pixel[0x00 | index] = pixel_lut[0][data]; - pixel[0x40 | index] = pixel_lut[1][data]; - pixel[0x80 | index] = pixel_lut[2][data]; - } - else - { - /* Mode 5 (Normal) */ - data = pixel_lut[1][data]; - - /* Input pixel: xxiiiiii */ - pixel[0x00 | index] = data; - pixel[0x40 | index] = data; - pixel[0x80 | index] = data; - } - } -} - - -/*--------------------------------------------------------------------------*/ -/* Background layers rendering functions */ -/*--------------------------------------------------------------------------*/ - -/* Graphics I */ -void render_bg_m0(int line) -{ - uint8 color, name, pattern; - - uint8 *lb = &linebuf[0][0x20]; - uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line & 0xF8) << 2)]; - uint8 *ct = &vram[((reg[3] << 6) & 0x3FC0)]; - uint8 *pg = &vram[((reg[4] << 11) & 0x3800) + (line & 7)]; - - /* 32 x 8 pixels */ - int width = 32; - - do - { - name = *nt++; - color = ct[name >> 3]; - pattern = pg[name << 3]; - - *lb++ = 0x10 | ((color >> (((pattern >> 7) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 6) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 5) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 4) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 3) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 2) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 1) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 0) & 1) << 2)) & 0x0F); - } - while (--width); -} - -/* Text */ -void render_bg_m1(int line) -{ - uint8 pattern; - uint8 color = reg[7]; - - uint8 *lb = &linebuf[0][0x20]; - uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line >> 3) * 40)]; - uint8 *pg = &vram[((reg[4] << 11) & 0x3800) + (line & 7)]; - - /* 40 x 6 pixels */ - int width = 40; - - /* Left border (8 pixels) */ - memset (lb, 0x40, 8); - lb += 8; - - do - { - pattern = pg[*nt++ << 3]; - - *lb++ = 0x10 | ((color >> (((pattern >> 7) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 6) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 5) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 4) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 3) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 2) & 1) << 2)) & 0x0F); - } - while (--width); - - /* Right borders (8 pixels) */ - memset(lb, 0x40, 8); -} - -/* Text + extended PG */ -void render_bg_m1x(int line) -{ - uint8 pattern; - uint8 *pg; - - uint8 color = reg[7]; - - uint8 *lb = &linebuf[0][0x20]; - uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line >> 3) * 40)]; - - uint16 pg_mask = ~0x3800 ^ (reg[4] << 11); - - /* 40 x 6 pixels */ - int width = 40; - - /* Unused bits used as a mask on TMS99xx & 315-5124 VDP only */ - if (system_hw > SYSTEM_SMS) - { - pg_mask |= 0x1800; - } - - pg = &vram[((0x2000 + ((line & 0xC0) << 5)) & pg_mask) + (line & 7)]; - - /* Left border (8 pixels) */ - memset (lb, 0x40, 8); - lb += 8; - - do - { - pattern = pg[*nt++ << 3]; - - *lb++ = 0x10 | ((color >> (((pattern >> 7) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 6) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 5) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 4) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 3) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 2) & 1) << 2)) & 0x0F); - } - while (--width); - - /* Right borders (8 pixels) */ - memset(lb, 0x40, 8); -} - -/* Graphics II */ -void render_bg_m2(int line) -{ - uint8 color, pattern; - uint16 name; - uint8 *ct, *pg; - - uint8 *lb = &linebuf[0][0x20]; - uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line & 0xF8) << 2)]; - - uint16 ct_mask = ~0x3FC0 ^ (reg[3] << 6); - uint16 pg_mask = ~0x3800 ^ (reg[4] << 11); - - /* 32 x 8 pixels */ - int width = 32; - - /* Unused bits used as a mask on TMS99xx & 315-5124 VDP only */ - if (system_hw > SYSTEM_SMS) - { - ct_mask |= 0x1FC0; - pg_mask |= 0x1800; - } - - ct = &vram[((0x2000 + ((line & 0xC0) << 5)) & ct_mask) + (line & 7)]; - pg = &vram[((0x2000 + ((line & 0xC0) << 5)) & pg_mask) + (line & 7)]; - - do - { - name = *nt++ << 3 ; - color = ct[name & ct_mask]; - pattern = pg[name]; - - *lb++ = 0x10 | ((color >> (((pattern >> 7) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 6) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 5) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 4) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 3) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 2) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 1) & 1) << 2)) & 0x0F); - *lb++ = 0x10 | ((color >> (((pattern >> 0) & 1) << 2)) & 0x0F); - } - while (--width); -} - -/* Multicolor */ -void render_bg_m3(int line) -{ - uint8 color; - uint8 *lb = &linebuf[0][0x20]; - uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line & 0xF8) << 2)]; - uint8 *pg = &vram[((reg[4] << 11) & 0x3800) + ((line >> 2) & 7)]; - - /* 32 x 8 pixels */ - int width = 32; - - do - { - color = pg[*nt++ << 3]; - - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - } - while (--width); -} - -/* Multicolor + extended PG */ -void render_bg_m3x(int line) -{ - uint8 color; - uint8 *pg; - - uint8 *lb = &linebuf[0][0x20]; - uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line & 0xF8) << 2)]; - - uint16 pg_mask = ~0x3800 ^ (reg[4] << 11); - - /* 32 x 8 pixels */ - int width = 32; - - /* Unused bits used as a mask on TMS99xx & 315-5124 VDP only */ - if (system_hw > SYSTEM_SMS) - { - pg_mask |= 0x1800; - } - - pg = &vram[((0x2000 + ((line & 0xC0) << 5)) & pg_mask) + ((line >> 2) & 7)]; - - do - { - color = pg[*nt++ << 3]; - - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - } - while (--width); -} - -/* Invalid (2+3/1+2+3) */ -void render_bg_inv(int line) -{ - uint8 color = reg[7]; - - uint8 *lb = &linebuf[0][0x20]; - - /* 40 x 6 pixels */ - int width = 40; - - /* Left border (8 pixels) */ - memset (lb, 0x40, 8); - lb += 8; - - do - { - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 4) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - *lb++ = 0x10 | ((color >> 0) & 0x0F); - } - while (--width); - - /* Right borders (8 pixels) */ - memset(lb, 0x40, 8); -} - -/* Mode 4 */ -void render_bg_m4(int line) -{ - int column; - uint16 *nt; - uint32 attr, atex, *src; - - /* 32 x 8 pixels */ - int width = 32; - - /* Horizontal scrolling */ - int index = ((reg[0] & 0x40) && (line < 0x10)) ? 0x100 : reg[0x08]; - int shift = index & 7; - - /* Background line buffer */ - uint32 *dst = (uint32 *)&linebuf[0][0x20 + shift]; - - /* Vertical scrolling */ - int v_line = line + vscroll; - - /* Pattern name table mask */ - uint16 nt_mask = ~0x3C00 ^ (reg[2] << 10); - - /* Unused bits used as a mask on TMS99xx & 315-5124 VDP only */ - if (system_hw > SYSTEM_SMS) - { - nt_mask |= 0x400; - } - - /* Test for extended modes (Master System II & Game gear VDP only) */ - if (bitmap.viewport.h > 192) - { - /* Vertical scroll mask */ - v_line = v_line % 256; - - /* Pattern name Table */ - nt = (uint16 *)&vram[(0x3700 & nt_mask) + ((v_line >> 3) << 6)]; - } - else - { - /* Vertical scroll mask */ - v_line = v_line % 224; - - /* Pattern name Table */ - nt = (uint16 *)&vram[(0x3800 + ((v_line >> 3) << 6)) & nt_mask]; - } - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - /* Tile column index */ - index = (0x100 - index) >> 3; - - /* Clip left-most column if required */ - if (shift) - { - memset(&linebuf[0][0x20], 0, shift); - index++; - } - - /* Draw tiles */ - for(column = 0; column < width; column++, index++) - { - /* Stop vertical scrolling for rightmost eight tiles */ - if((column == 24) && (reg[0] & 0x80)) - { - /* Clear Pattern name table start address */ - if (bitmap.viewport.h > 192) - { - nt = (uint16 *)&vram[(0x3700 & nt_mask) + ((line >> 3) << 6)]; - } - else - { - nt = (uint16 *)&vram[(0x3800 + ((line >> 3) << 6)) & nt_mask]; - } - - /* Clear Pattern row index */ - v_line = (line & 7) << 3; - } - - /* Read name table attribute word */ - attr = nt[index % width]; -#ifndef LSB_FIRST - attr = (((attr & 0xFF) << 8) | ((attr & 0xFF00) >> 8)); -#endif - - /* Expand priority and palette bits */ - atex = atex_table[(attr >> 11) & 3]; - - /* Cached pattern data line (4 bytes = 4 pixels at once) */ - src = (uint32 *)&bg_pattern_cache[((attr & 0x7FF) << 6) | (v_line)]; - - /* Copy left & right half, adding the attribute bits in */ -#ifdef ALIGN_DWORD - WRITE_LONG(dst, src[0] | atex); - dst++; - WRITE_LONG(dst, src[1] | atex); - dst++; -#else - *dst++ = (src[0] | atex); - *dst++ = (src[1] | atex); -#endif - } -} - -/* Mode 5 */ -#ifndef ALT_RENDERER -void render_bg_m5(int line) -{ - int column; - uint32 atex, atbuf, *src, *dst; - - /* Common data */ - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = *(uint32 *)&vsram[0]; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - - /* Window & Plane A */ - int a = (reg[18] & 0x1F) << 3; - int w = (reg[18] >> 7) & 1; - - /* Plane B width */ - int start = 0; - int end = bitmap.viewport.w >> 4; - - /* Plane B scroll */ -#ifdef LSB_FIRST - uint32 shift = (xscroll >> 16) & 0x0F; - uint32 index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); - uint32 v_line = (line + (yscroll >> 16)) & pf_row_mask; -#else - uint32 shift = (xscroll & 0x0F); - uint32 index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); - uint32 v_line = (line + yscroll) & pf_row_mask; -#endif - - /* Plane B name table */ - uint32 *nt; - if (cinterface_render_bgb) - { - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - if(shift) - { - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x10 + shift]; - - atbuf = nt[(index - 1) & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - else - { - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x20]; - } - - for(column = 0; column < end; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - } - else - { - memset(&linebuf[0][0], 0, 512); - } - - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Plane A */ - if (a && cinterface_render_bga) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); - v_line = (line + yscroll) & pf_row_mask; -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); - v_line = (line + (yscroll >> 16)) & pf_row_mask; -#endif - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - if(shift) - { - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x10 + shift + (start << 4)]; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index - 1) & pf_col_mask]; - } - - DRAW_COLUMN(atbuf, v_line) - } - else - { - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - } - - for(column = start; column < end; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else if (!cinterface_render_bga) - { - memset(&linebuf[1][0], 0, 512); - } - - /* Window */ - if (w && cinterface_render_bgw) - { - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = (line & 7) << 3; - - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN(atbuf, v_line) - } - } - - /* Merge background layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[(reg[12] & 0x08) >> 2], bitmap.viewport.w); -} - -void render_bg_m5_vs(int line) -{ - int column; - uint32 atex, atbuf, *src, *dst; - uint32 v_line, *nt; - - /* Common data */ - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = 0; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - uint32 *vs = (uint32 *)&vsram[0]; - - /* Window & Plane A */ - int a = (reg[18] & 0x1F) << 3; - int w = (reg[18] >> 7) & 1; - - /* Plane B width */ - int start = 0; - int end = bitmap.viewport.w >> 4; - - /* Plane B horizontal scroll */ -#ifdef LSB_FIRST - uint32 shift = (xscroll >> 16) & 0x0F; - uint32 index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); -#else - uint32 shift = (xscroll & 0x0F); - uint32 index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); -#endif - - /* Left-most column vertical scrolling when partially shown horizontally (verified on PAL MD2) */ - /* TODO: check on Genesis 3 models since it apparently behaves differently */ - /* In H32 mode, vertical scrolling is disabled, in H40 mode, same value is used for both planes */ - /* See Formula One / Kawasaki Superbike Challenge (H32) & Gynoug / Cutie Suzuki no Ringside Angel (H40) */ - if (reg[12] & 1) - { - yscroll = vs[19] & (vs[19] >> 16); - } - - if (cinterface_render_bgb) - { - if(shift) - { - /* Plane B vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x10 + shift]; - - atbuf = nt[(index - 1) & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - else - { - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x20]; - } - - for(column = 0; column < end; column++, index++) - { - /* Plane B vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + (vs[column] >> 16)) & pf_row_mask; -#else - v_line = (line + vs[column]) & pf_row_mask; -#endif - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - } - else - { - memset(&linebuf[0][0], 0, 512); - } - - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Plane A */ - if (a && cinterface_render_bga) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A horizontal scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); -#endif - - if(shift) - { - /* Plane A vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x10 + shift + (start << 4)]; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index - 1) & pf_col_mask]; - } - - DRAW_COLUMN(atbuf, v_line) - } - else - { - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - } - - for(column = start; column < end; column++, index++) - { - /* Plane A vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + vs[column]) & pf_row_mask; -#else - v_line = (line + (vs[column] >> 16)) & pf_row_mask; -#endif - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else if (!cinterface_render_bga) - { - memset(&linebuf[1][0], 0, 512); - } - - /* Window */ - if (w && cinterface_render_bgw) - { - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = (line & 7) << 3; - - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN(atbuf, v_line) - } - } - - /* Merge background layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[(reg[12] & 0x08) >> 2], bitmap.viewport.w); -} - -void render_bg_m5_im2(int line) -{ - int column; - uint32 atex, atbuf, *src, *dst; - - /* Common data */ - int odd = odd_frame; - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = *(uint32 *)&vsram[0]; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - - /* Window & Plane A */ - int a = (reg[18] & 0x1F) << 3; - int w = (reg[18] >> 7) & 1; - - /* Plane B width */ - int start = 0; - int end = bitmap.viewport.w >> 4; - - /* Plane B scroll */ -#ifdef LSB_FIRST - uint32 shift = (xscroll >> 16) & 0x0F; - uint32 index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); - uint32 v_line = (line + (yscroll >> 17)) & pf_row_mask; -#else - uint32 shift = (xscroll & 0x0F); - uint32 index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); - uint32 v_line = (line + (yscroll >> 1)) & pf_row_mask; -#endif - - /* Plane B name table */ - uint32 *nt; - if (cinterface_render_bgb) - { - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - if(shift) - { - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x10 + shift]; - - atbuf = nt[(index - 1) & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - else - { - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x20]; - } - - for(column = 0; column < end; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - } - else - { - memset(&linebuf[0][0], 0, 512); - } - - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Plane A */ - if (a && cinterface_render_bga) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); - v_line = (line + (yscroll >> 1)) & pf_row_mask; -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); - v_line = (line + (yscroll >> 17)) & pf_row_mask; -#endif - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - if(shift) - { - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x10 + shift + (start << 4)]; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index - 1) & pf_col_mask]; - } - - DRAW_COLUMN_IM2(atbuf, v_line) - } - else - { - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - } - - for(column = start; column < end; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else if (!cinterface_render_bga) - { - memset(&linebuf[1][0], 0, 512); - } - - /* Window */ - if (w && cinterface_render_bgw) - { - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = ((line & 7) << 1 | odd) << 3; - - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - } - - /* Merge background layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[(reg[12] & 0x08) >> 2], bitmap.viewport.w); -} - -void render_bg_m5_im2_vs(int line) -{ - int column; - uint32 atex, atbuf, *src, *dst; - uint32 v_line, *nt; - - /* Common data */ - int odd = odd_frame; - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = 0; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - uint32 *vs = (uint32 *)&vsram[0]; - - /* Window & Plane A */ - int a = (reg[18] & 0x1F) << 3; - int w = (reg[18] >> 7) & 1; - - /* Plane B width */ - int start = 0; - int end = bitmap.viewport.w >> 4; - - /* Plane B horizontal scroll */ -#ifdef LSB_FIRST - uint32 shift = (xscroll >> 16) & 0x0F; - uint32 index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); -#else - uint32 shift = (xscroll & 0x0F); - uint32 index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); -#endif - - /* Left-most column vertical scrolling when partially shown horizontally (verified on PAL MD2) */ - /* TODO: check on Genesis 3 models since it apparently behaves differently */ - /* In H32 mode, vertical scrolling is disabled, in H40 mode, same value is used for both planes */ - /* See Formula One / Kawasaki Superbike Challenge (H32) & Gynoug / Cutie Suzuki no Ringside Angel (H40) */ - if (reg[12] & 1) - { - yscroll = (vs[19] >> 1) & (vs[19] >> 17); - } - - if (cinterface_render_bgb) - { - if(shift) - { - /* Plane B vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x10 + shift]; - - atbuf = nt[(index - 1) & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - else - { - /* Plane B line buffer */ - dst = (uint32 *)&linebuf[0][0x20]; - } - - for(column = 0; column < end; column++, index++) - { - /* Plane B vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + (vs[column] >> 17)) & pf_row_mask; -#else - v_line = (line + (vs[column] >> 1)) & pf_row_mask; -#endif - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - } - else - { - memset(&linebuf[0][0], 0, 512); - } - - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Plane A */ - if (a && cinterface_render_bga) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A horizontal scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); -#endif - - if(shift) - { - /* Plane A vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x10 + shift + (start << 4)]; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index - 1) & pf_col_mask]; - } - - DRAW_COLUMN_IM2(atbuf, v_line) - } - else - { - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - } - - for(column = start; column < end; column++, index++) - { - /* Plane A vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + (vs[column] >> 1)) & pf_row_mask; -#else - v_line = (line + (vs[column] >> 17)) & pf_row_mask; -#endif - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else if (!cinterface_render_bga) - { - memset(&linebuf[1][0], 0, 512); - } - - /* Window */ - if (w && cinterface_render_bgw) - { - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = ((line & 7) << 1 | odd) << 3; - - /* Plane A line buffer */ - dst = (uint32 *)&linebuf[1][0x20 + (start << 4)]; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - } - - /* Merge background layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[(reg[12] & 0x08) >> 2], bitmap.viewport.w); -} - -#else - -void render_bg_m5(int line) -{ - int column, start, end; - uint32 atex, atbuf, *src, *dst; - uint32 shift, index, v_line, *nt; - uint8 *lb; - - /* Scroll Planes common data */ - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = *(uint32 *)&vsram[0]; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - - /* Number of columns to draw */ - int width = bitmap.viewport.w >> 4; - - /* Layer priority table */ - uint8 *table = lut[(reg[12] & 8) >> 2]; - - /* Window vertical range (cell 0-31) */ - int a = (reg[18] & 0x1F) << 3; - - /* Window position (0=top, 1=bottom) */ - int w = (reg[18] >> 7) & 1; - - /* Test against current line */ - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Plane A */ - if (a) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); - v_line = (line + yscroll) & pf_row_mask; -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); - v_line = (line + (yscroll >> 16)) & pf_row_mask; -#endif - - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4) + shift]; - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - if(shift) - { - /* Left-most column is partially shown */ - dst -= 4; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index-1) & pf_col_mask]; - } - - DRAW_COLUMN(atbuf, v_line) - } - - for(column = start; column < end; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else - { - /* Window width */ - start = 0; - end = width; - } - - /* Window Plane */ - if (w) - { - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4)]; - - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = (line & 7) << 3; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN(atbuf, v_line) - } - } - - /* Plane B scroll */ -#ifdef LSB_FIRST - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); - v_line = (line + (yscroll >> 16)) & pf_row_mask; -#else - shift = (xscroll & 0x0F); - index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); - v_line = (line + yscroll) & pf_row_mask; -#endif - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - /* Background line buffer */ - lb = &linebuf[0][0x20]; - - if(shift) - { - /* Left-most column is partially shown */ - lb -= (0x10 - shift); - - atbuf = nt[(index-1) & pf_col_mask]; - DRAW_BG_COLUMN(atbuf, v_line, xscroll, yscroll) - } - - for(column = 0; column < width; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_BG_COLUMN(atbuf, v_line, xscroll, yscroll) - } -} - -void render_bg_m5_vs(int line) -{ - int column, start, end; - uint32 atex, atbuf, *src, *dst; - uint32 shift, index, v_line, *nt; - uint8 *lb; - - /* Scroll Planes common data */ - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = 0; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - uint32 *vs = (uint32 *)&vsram[0]; - - /* Number of columns to draw */ - int width = bitmap.viewport.w >> 4; - - /* Layer priority table */ - uint8 *table = lut[(reg[12] & 8) >> 2]; - - /* Window vertical range (cell 0-31) */ - int a = (reg[18] & 0x1F) << 3; - - /* Window position (0=top, 1=bottom) */ - int w = (reg[18] >> 7) & 1; - - /* Test against current line */ - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Left-most column vertical scrolling when partially shown horizontally */ - /* Same value for both planes, only in 40-cell mode, verified on PAL MD2 */ - /* See Gynoug, Cutie Suzuki no Ringside Angel, Formula One, Kawasaki Superbike Challenge */ - if (reg[12] & 1) - { - yscroll = vs[19] & (vs[19] >> 16); - } - - /* Plane A*/ - if (a) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A horizontal scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); -#endif - - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4) + shift]; - - if(shift) - { - /* Left-most column is partially shown */ - dst -= 4; - - /* Plane A vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index-1) & pf_col_mask]; - } - - DRAW_COLUMN(atbuf, v_line) - } - - for(column = start; column < end; column++, index++) - { - /* Plane A vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + vs[column]) & pf_row_mask; -#else - v_line = (line + (vs[column] >> 16)) & pf_row_mask; -#endif - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else - { - /* Window width */ - start = 0; - end = width; - } - - /* Window Plane */ - if (w) - { - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4)]; - - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = (line & 7) << 3; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN(atbuf, v_line) - } - } - - /* Plane B horizontal scroll */ -#ifdef LSB_FIRST - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); -#else - shift = (xscroll & 0x0F); - index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); -#endif - - /* Background line buffer */ - lb = &linebuf[0][0x20]; - - if(shift) - { - /* Left-most column is partially shown */ - lb -= (0x10 - shift); - - /* Plane B vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - atbuf = nt[(index-1) & pf_col_mask]; - DRAW_BG_COLUMN(atbuf, v_line, xscroll, yscroll) - } - - for(column = 0; column < width; column++, index++) - { - /* Plane B vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + (vs[column] >> 16)) & pf_row_mask; -#else - v_line = (line + vs[column]) & pf_row_mask; -#endif - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_BG_COLUMN(atbuf, v_line, xscroll, yscroll) - } -} - -void render_bg_m5_im2(int line) -{ - int column, start, end; - uint32 atex, atbuf, *src, *dst; - uint32 shift, index, v_line, *nt; - uint8 *lb; - - /* Scroll Planes common data */ - int odd = odd_frame; - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = *(uint32 *)&vsram[0]; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - - /* Number of columns to draw */ - int width = bitmap.viewport.w >> 4; - - /* Layer priority table */ - uint8 *table = lut[(reg[12] & 8) >> 2]; - - /* Window vertical range (cell 0-31) */ - int a = (reg[18] & 0x1F) << 3; - - /* Window position (0=top, 1=bottom) */ - int w = (reg[18] >> 7) & 1; - - /* Test against current line */ - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Plane A */ - if (a) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); - v_line = (line + (yscroll >> 1)) & pf_row_mask; -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); - v_line = (line + (yscroll >> 17)) & pf_row_mask; -#endif - - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4) + shift]; - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - if(shift) - { - /* Left-most column is partially shown */ - dst -= 4; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index-1) & pf_col_mask]; - } - - DRAW_COLUMN_IM2(atbuf, v_line) - } - - for(column = start; column < end; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else - { - /* Window width */ - start = 0; - end = width; - } - - /* Window Plane */ - if (w) - { - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4)]; - - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = ((line & 7) << 1 | odd) << 3; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - } - - /* Plane B scroll */ -#ifdef LSB_FIRST - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); - v_line = (line + (yscroll >> 17)) & pf_row_mask; -#else - shift = (xscroll & 0x0F); - index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); - v_line = (line + (yscroll >> 1)) & pf_row_mask; -#endif - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - /* Background line buffer */ - lb = &linebuf[0][0x20]; - - if(shift) - { - /* Left-most column is partially shown */ - lb -= (0x10 - shift); - - atbuf = nt[(index-1) & pf_col_mask]; - DRAW_BG_COLUMN_IM2(atbuf, v_line, xscroll, yscroll) - } - - for(column = 0; column < width; column++, index++) - { - atbuf = nt[index & pf_col_mask]; - DRAW_BG_COLUMN_IM2(atbuf, v_line, xscroll, yscroll) - } -} - -void render_bg_m5_im2_vs(int line) -{ - int column, start, end; - uint32 atex, atbuf, *src, *dst; - uint32 shift, index, v_line, *nt; - uint8 *lb; - - /* common data */ - int odd = odd_frame; - uint32 xscroll = *(uint32 *)&vram[hscb + ((line & hscroll_mask) << 2)]; - uint32 yscroll = 0; - uint32 pf_col_mask = playfield_col_mask; - uint32 pf_row_mask = playfield_row_mask; - uint32 pf_shift = playfield_shift; - uint32 *vs = (uint32 *)&vsram[0]; - - /* Number of columns to draw */ - int width = bitmap.viewport.w >> 4; - - /* Layer priority table */ - uint8 *table = lut[(reg[12] & 8) >> 2]; - - /* Window vertical range (cell 0-31) */ - uint32 a = (reg[18] & 0x1F) << 3; - - /* Window position (0=top, 1=bottom) */ - uint32 w = (reg[18] >> 7) & 1; - - /* Test against current line */ - if (w == (line >= a)) - { - /* Window takes up entire line */ - a = 0; - w = 1; - } - else - { - /* Window and Plane A share the line */ - a = clip[0].enable; - w = clip[1].enable; - } - - /* Left-most column vertical scrolling when partially shown horizontally */ - /* Same value for both planes, only in 40-cell mode, verified on PAL MD2 */ - /* See Gynoug, Cutie Suzuki no Ringside Angel, Formula One, Kawasaki Superbike Challenge */ - if (reg[12] & 1) - { - /* only in 40-cell mode, verified on MD2 */ - yscroll = (vs[19] >> 1) & (vs[19] >> 17); - } - - /* Plane A */ - if (a) - { - /* Plane A width */ - start = clip[0].left; - end = clip[0].right; - - /* Plane A horizontal scroll */ -#ifdef LSB_FIRST - shift = (xscroll & 0x0F); - index = pf_col_mask + start + 1 - ((xscroll >> 4) & pf_col_mask); -#else - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + start + 1 - ((xscroll >> 20) & pf_col_mask); -#endif - - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4) + shift]; - - if(shift) - { - /* Left-most column is partially shown */ - dst -= 4; - - /* Plane A vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - /* Window bug */ - if (start) - { - atbuf = nt[index & pf_col_mask]; - } - else - { - atbuf = nt[(index-1) & pf_col_mask]; - } - - DRAW_COLUMN_IM2(atbuf, v_line) - } - - for(column = start; column < end; column++, index++) - { - /* Plane A vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + (vs[column] >> 1)) & pf_row_mask; -#else - v_line = (line + (vs[column] >> 17)) & pf_row_mask; -#endif - - /* Plane A name table */ - nt = (uint32 *)&vram[ntab + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - - /* Window width */ - start = clip[1].left; - end = clip[1].right; - } - else - { - /* Window width */ - start = 0; - end = width; - } - - /* Window Plane */ - if (w) - { - /* Background line buffer */ - dst = (uint32 *)&linebuf[0][0x20 + (start << 4)]; - - /* Window name table */ - nt = (uint32 *)&vram[ntwb | ((line >> 3) << (6 + (reg[12] & 1)))]; - - /* Pattern row index */ - v_line = ((line & 7) << 1 | odd) << 3; - - for(column = start; column < end; column++) - { - atbuf = nt[column]; - DRAW_COLUMN_IM2(atbuf, v_line) - } - } - - /* Plane B horizontal scroll */ -#ifdef LSB_FIRST - shift = (xscroll >> 16) & 0x0F; - index = pf_col_mask + 1 - ((xscroll >> 20) & pf_col_mask); -#else - shift = (xscroll & 0x0F); - index = pf_col_mask + 1 - ((xscroll >> 4) & pf_col_mask); -#endif - - /* Background line buffer */ - lb = &linebuf[0][0x20]; - - if(shift) - { - /* Left-most column is partially shown */ - lb -= (0x10 - shift); - - /* Plane B vertical scroll */ - v_line = (line + yscroll) & pf_row_mask; - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - atbuf = nt[(index-1) & pf_col_mask]; - DRAW_BG_COLUMN_IM2(atbuf, v_line, xscroll, yscroll) - } - - for(column = 0; column < width; column++, index++) - { - /* Plane B vertical scroll */ -#ifdef LSB_FIRST - v_line = (line + (vs[column] >> 17)) & pf_row_mask; -#else - v_line = (line + (vs[column] >> 1)) & pf_row_mask; -#endif - - /* Plane B name table */ - nt = (uint32 *)&vram[ntbb + (((v_line >> 3) << pf_shift) & 0x1FC0)]; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - atbuf = nt[index & pf_col_mask]; - DRAW_BG_COLUMN_IM2(atbuf, v_line, xscroll, yscroll) - } -} -#endif - - -/*--------------------------------------------------------------------------*/ -/* Sprite layer rendering functions */ -/*--------------------------------------------------------------------------*/ - -void render_obj_tms(int line) -{ - int x, start, end; - uint8 *lb, *sg; - uint8 color, pattern[2]; - uint16 temp; - - /* Sprite list for current line */ - object_info_t *object_info = obj_info[line]; - int count = object_count[line]; - - /* Default sprite width (8 pixels) */ - int width = 8; - - /* Adjust width for 16x16 sprites */ - width <<= ((reg[1] & 0x02) >> 1); - - /* Adjust width for zoomed sprites */ - width <<= (reg[1] & 0x01); - - /* Latch SOVR flag from previous line to VDP status */ - status |= spr_ovr; - - /* Clear SOVR flag for current line */ - spr_ovr = 0; - - /* Draw sprites in front-to-back order */ - while (count--) - { - /* Sprite X position */ - start = object_info->xpos; - - /* Sprite Color + Early Clock bit */ - color = object_info->size; - - /* X position shift (32 pixels) */ - start -= ((color & 0x80) >> 2); - - /* Pointer to line buffer */ - lb = &linebuf[0][0x20 + start]; - - if ((start + width) > 256) - { - /* Clip sprites on right edge */ - end = 256 - start; - start = 0; - } - else - { - end = width; - - if (start < 0) - { - /* Clip sprites on left edge */ - start = 0 - start; - } - else - { - start = 0; - } - } - - /* Sprite Color (0-15) */ - color &= 0x0F; - - /* Sprite Pattern Name */ - temp = object_info->attr; - - /* Mask two LSB for 16x16 sprites */ - temp &= ~((reg[1] & 0x02) >> 0); - temp &= ~((reg[1] & 0x02) >> 1); - - /* Pointer to sprite generator table */ - sg = (uint8 *)&vram[((reg[6] << 11) & 0x3800) | (temp << 3) | object_info->ypos]; - - /* Sprite Pattern data (2 x 8 pixels) */ - pattern[0] = sg[0x00]; - pattern[1] = sg[0x10]; - - if (reg[1] & 0x01) - { - /* Zoomed sprites are rendered at half speed */ - for (x=start; x> 4) & 1]; - temp = (temp >> (7 - ((x >> 1) & 7))) & 0x01; - temp = temp * color; - temp |= (lb[x] << 8); - lb[x] = lut[5][temp]; - status |= ((temp & 0x8000) >> 10); - temp &= 0x00FF; - temp |= (lb[x+1] << 8); - lb[x+1] = lut[5][temp]; - status |= ((temp & 0x8000) >> 10); - } - } - else - { - /* Normal sprites */ - for (x=start; x> 3) & 1]; - temp = (temp >> (7 - (x & 7))) & 0x01; - temp = temp * color; - temp |= (lb[x] << 8); - lb[x] = lut[5][temp]; - status |= ((temp & 0x8000) >> 10); - } - } - - /* Next sprite entry */ - object_info++; - } - - /* handle Game Gear reduced screen (160x144) */ - if ((system_hw == SYSTEM_GG) && !config.gg_extra && (v_counter < bitmap.viewport.h)) - { - int line = v_counter - (bitmap.viewport.h - 144) / 2; - if ((line < 0) || (line >= 144)) - { - memset(&linebuf[0][0x20], 0x40, 256); - } - else - { - if (bitmap.viewport.x > 0) - { - memset(&linebuf[0][0x20], 0x40, 48); - memset(&linebuf[0][0x20+48+160], 0x40, 48); - } - } - } -} - -void render_obj_m4(int line) -{ - int i, xpos, end; - uint8 *src, *lb; - uint16 temp; - - /* Sprite list for current line */ - object_info_t *object_info = obj_info[line]; - int count = object_count[line]; - - /* Default sprite width */ - int width = 8; - - /* Sprite Generator address mask (LSB is masked for 8x16 sprites) */ - uint16 sg_mask = (~0x1C0 ^ (reg[6] << 6)) & (~((reg[1] & 0x02) >> 1)); - - /* Zoomed sprites (not working on Genesis VDP) */ - if (system_hw < SYSTEM_MD) - { - width <<= (reg[1] & 0x01); - } - - /* Unused bits used as a mask on 315-5124 VDP only */ - if (system_hw > SYSTEM_SMS) - { - sg_mask |= 0xC0; - } - - /* Latch SOVR flag from previous line to VDP status */ - status |= spr_ovr; - - /* Clear SOVR flag for current line */ - spr_ovr = 0; - - /* Draw sprites in front-to-back order */ - while (count--) - { - /* Sprite pattern index */ - temp = (object_info->attr | 0x100) & sg_mask; - - /* Pointer to pattern cache line */ - src = (uint8 *)&bg_pattern_cache[(temp << 6) | (object_info->ypos << 3)]; - - /* Sprite X position */ - xpos = object_info->xpos; - - /* X position shift */ - xpos -= (reg[0] & 0x08); - - if (xpos < 0) - { - /* Clip sprites on left edge */ - src = src - xpos; - end = xpos + width; - xpos = 0; - } - else if ((xpos + width) > 256) - { - /* Clip sprites on right edge */ - end = 256 - xpos; - } - else - { - /* Sprite maximal width */ - end = width; - } - - /* Pointer to line buffer */ - lb = &linebuf[0][0x20 + xpos]; - - if (width > 8) - { - /* Draw sprite pattern (zoomed sprites are rendered at half speed) */ - DRAW_SPRITE_TILE_ACCURATE_2X(end,0,lut[5]) - - /* 315-5124 VDP specific */ - if (system_hw < SYSTEM_SMS2) - { - /* only 4 first sprites can be zoomed */ - if (count == (object_count[line] - 4)) - { - /* Set default width for remaining sprites */ - width = 8; - } - } - } - else - { - /* Draw sprite pattern */ - DRAW_SPRITE_TILE_ACCURATE(end,0,lut[5]) - } - - /* Next sprite entry */ - object_info++; - } - - /* handle Game Gear reduced screen (160x144) */ - if ((system_hw == SYSTEM_GG) && !config.gg_extra && (v_counter < bitmap.viewport.h)) - { - int line = v_counter - (bitmap.viewport.h - 144) / 2; - if ((line < 0) || (line >= 144)) - { - memset(&linebuf[0][0x20], 0x40, 256); - } - else - { - if (bitmap.viewport.x > 0) - { - memset(&linebuf[0][0x20], 0x40, 48); - memset(&linebuf[0][0x20+48+160], 0x40, 48); - } - } - } -} - -void render_obj_m5(int line) -{ - int i, column; - int xpos, width; - int pixelcount = 0; - int masked = 0; - int max_pixels = MODE5_MAX_SPRITE_PIXELS; - - uint8 *src, *s, *lb; - uint32 temp, v_line; - uint32 attr, name, atex; - - /* Sprite list for current line */ - object_info_t *object_info = obj_info[line]; - int count = object_count[line]; - - /* Draw sprites in front-to-back order */ - while (count--) - { - /* Sprite X position */ - xpos = object_info->xpos; - - /* Sprite masking */ - if (xpos) - { - /* Requires at least one sprite with xpos > 0 */ - spr_ovr = 1; - } - else if (spr_ovr) - { - /* Remaining sprites are not drawn */ - masked = 1; - } - - /* Display area offset */ - xpos = xpos - 0x80; - - /* Sprite size */ - temp = object_info->size; - - /* Sprite width */ - width = 8 + ((temp & 0x0C) << 1); - - /* Update pixel count (off-screen sprites are included) */ - pixelcount += width; - - /* Is sprite across visible area ? */ - if (((xpos + width) > 0) && (xpos < bitmap.viewport.w) && !masked) - { - /* Sprite attributes */ - attr = object_info->attr; - - /* Sprite vertical offset */ - v_line = object_info->ypos; - - /* Sprite priority + palette bits */ - atex = (attr >> 9) & 0x70; - - /* Pattern name base */ - name = attr & 0x07FF; - - /* Mask vflip/hflip */ - attr &= 0x1800; - - /* Pointer into pattern name offset look-up table */ - s = &name_lut[((attr >> 3) & 0x300) | (temp << 4) | ((v_line & 0x18) >> 1)]; - - /* Pointer into line buffer */ - lb = &linebuf[0][0x20 + xpos]; - - /* Max. number of sprite pixels rendered per line */ - if (pixelcount > max_pixels) - { - /* Adjust number of pixels to draw */ - width -= (pixelcount - max_pixels); - } - - /* Number of tiles to draw */ - width = width >> 3; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - /* Draw sprite patterns */ - for (column = 0; column < width; column++, lb+=8) - { - temp = attr | ((name + s[column]) & 0x07FF); - src = &bg_pattern_cache[(temp << 6) | (v_line)]; - DRAW_SPRITE_TILE(8,atex,lut[1]) - } - } - - /* Sprite limit */ - if (pixelcount >= max_pixels) - { - /* Sprite masking is effective on next line if max pixel width is reached */ - spr_ovr = (pixelcount >= bitmap.viewport.w); - - /* Stop sprite rendering */ - return; - } - - /* Next sprite entry */ - object_info++; - } - - /* Clear sprite masking for next line */ - spr_ovr = 0; -} - -void render_obj_m5_ste(int line) -{ - int i, column; - int xpos, width; - int pixelcount = 0; - int masked = 0; - int max_pixels = MODE5_MAX_SPRITE_PIXELS; - - uint8 *src, *s, *lb; - uint32 temp, v_line; - uint32 attr, name, atex; - - /* Sprite list for current line */ - object_info_t *object_info = obj_info[line]; - int count = object_count[line]; - - /* Clear sprite line buffer */ - memset(&linebuf[1][0], 0, bitmap.viewport.w + 0x40); - - /* Draw sprites in front-to-back order */ - while (count--) - { - /* Sprite X position */ - xpos = object_info->xpos; - - /* Sprite masking */ - if (xpos) - { - /* Requires at least one sprite with xpos > 0 */ - spr_ovr = 1; - } - else if (spr_ovr) - { - /* Remaining sprites are not drawn */ - masked = 1; - } - - /* Display area offset */ - xpos = xpos - 0x80; - - /* Sprite size */ - temp = object_info->size; - - /* Sprite width */ - width = 8 + ((temp & 0x0C) << 1); - - /* Update pixel count (off-screen sprites are included) */ - pixelcount += width; - - /* Is sprite across visible area ? */ - if (((xpos + width) > 0) && (xpos < bitmap.viewport.w) && !masked) - { - /* Sprite attributes */ - attr = object_info->attr; - - /* Sprite vertical offset */ - v_line = object_info->ypos; - - /* Sprite priority + palette bits */ - atex = (attr >> 9) & 0x70; - - /* Pattern name base */ - name = attr & 0x07FF; - - /* Mask vflip/hflip */ - attr &= 0x1800; - - /* Pointer into pattern name offset look-up table */ - s = &name_lut[((attr >> 3) & 0x300) | (temp << 4) | ((v_line & 0x18) >> 1)]; - - /* Pointer into line buffer */ - lb = &linebuf[1][0x20 + xpos]; - - /* Adjust number of pixels to draw for sprite limit */ - if (pixelcount > max_pixels) - { - width -= (pixelcount - max_pixels); - } - - /* Number of tiles to draw */ - width = width >> 3; - - /* Pattern row index */ - v_line = (v_line & 7) << 3; - - /* Draw sprite patterns */ - for (column = 0; column < width; column++, lb+=8) - { - temp = attr | ((name + s[column]) & 0x07FF); - src = &bg_pattern_cache[(temp << 6) | (v_line)]; - DRAW_SPRITE_TILE(8,atex,lut[3]) - } - } - - /* Sprite limit */ - if (pixelcount >= max_pixels) - { - /* Sprite masking is effective on next line if max pixel width is reached */ - spr_ovr = (pixelcount >= bitmap.viewport.w); - - /* Merge background & sprite layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[4], bitmap.viewport.w); - - /* Stop sprite rendering */ - return; - } - - /* Next sprite entry */ - object_info++; - } - - /* Clear sprite masking for next line */ - spr_ovr = 0; - - /* Merge background & sprite layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[4], bitmap.viewport.w); -} - -void render_obj_m5_im2(int line) -{ - int i, column; - int xpos, width; - int pixelcount = 0; - int masked = 0; - int odd = odd_frame; - int max_pixels = MODE5_MAX_SPRITE_PIXELS; - - uint8 *src, *s, *lb; - uint32 temp, v_line; - uint32 attr, name, atex; - - /* Sprite list for current line */ - object_info_t *object_info = obj_info[line]; - int count = object_count[line]; - - /* Draw sprites in front-to-back order */ - while (count--) - { - /* Sprite X position */ - xpos = object_info->xpos; - - /* Sprite masking */ - if (xpos) - { - /* Requires at least one sprite with xpos > 0 */ - spr_ovr = 1; - } - else if (spr_ovr) - { - /* Remaining sprites are not drawn */ - masked = 1; - } - - /* Display area offset */ - xpos = xpos - 0x80; - - /* Sprite size */ - temp = object_info->size; - - /* Sprite width */ - width = 8 + ((temp & 0x0C) << 1); - - /* Update pixel count (off-screen sprites are included) */ - pixelcount += width; - - /* Is sprite across visible area ? */ - if (((xpos + width) > 0) && (xpos < bitmap.viewport.w) && !masked) - { - /* Sprite attributes */ - attr = object_info->attr; - - /* Sprite y offset */ - v_line = object_info->ypos; - - /* Sprite priority + palette bits */ - atex = (attr >> 9) & 0x70; - - /* Pattern name base */ - name = attr & 0x03FF; - - /* Mask vflip/hflip */ - attr &= 0x1800; - - /* Pattern name offset lookup table */ - s = &name_lut[((attr >> 3) & 0x300) | (temp << 4) | ((v_line & 0x18) >> 1)]; - - /* Pointer into line buffer */ - lb = &linebuf[0][0x20 + xpos]; - - /* Adjust width for sprite limit */ - if (pixelcount > max_pixels) - { - width -= (pixelcount - max_pixels); - } - - /* Number of tiles to draw */ - width = width >> 3; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - /* Render sprite patterns */ - for(column = 0; column < width; column ++, lb+=8) - { - temp = attr | (((name + s[column]) & 0x3ff) << 1); - src = &bg_pattern_cache[((temp << 6) | (v_line)) ^ ((attr & 0x1000) >> 6)]; - DRAW_SPRITE_TILE(8,atex,lut[1]) - } - } - - /* Sprite Limit */ - if (pixelcount >= max_pixels) - { - /* Sprite masking is effective on next line if max pixel width is reached */ - spr_ovr = (pixelcount >= bitmap.viewport.w); - - /* Stop sprite rendering */ - return; - } - - /* Next sprite entry */ - object_info++; - } - - /* Clear sprite masking for next line */ - spr_ovr = 0; -} - -void render_obj_m5_im2_ste(int line) -{ - int i, column; - int xpos, width; - int pixelcount = 0; - int masked = 0; - int odd = odd_frame; - int max_pixels = MODE5_MAX_SPRITE_PIXELS; - - uint8 *src, *s, *lb; - uint32 temp, v_line; - uint32 attr, name, atex; - - /* Sprite list for current line */ - object_info_t *object_info = obj_info[line]; - int count = object_count[line]; - - /* Clear sprite line buffer */ - memset(&linebuf[1][0], 0, bitmap.viewport.w + 0x40); - - /* Draw sprites in front-to-back order */ - while (count--) - { - /* Sprite X position */ - xpos = object_info->xpos; - - /* Sprite masking */ - if (xpos) - { - /* Requires at least one sprite with xpos > 0 */ - spr_ovr = 1; - } - else if (spr_ovr) - { - /* Remaining sprites are not drawn */ - masked = 1; - } - - /* Display area offset */ - xpos = xpos - 0x80; - - /* Sprite size */ - temp = object_info->size; - - /* Sprite width */ - width = 8 + ((temp & 0x0C) << 1); - - /* Update pixel count (off-screen sprites are included) */ - pixelcount += width; - - /* Is sprite across visible area ? */ - if (((xpos + width) > 0) && (xpos < bitmap.viewport.w) && !masked) - { - /* Sprite attributes */ - attr = object_info->attr; - - /* Sprite y offset */ - v_line = object_info->ypos; - - /* Sprite priority + palette bits */ - atex = (attr >> 9) & 0x70; - - /* Pattern name base */ - name = attr & 0x03FF; - - /* Mask vflip/hflip */ - attr &= 0x1800; - - /* Pattern name offset lookup table */ - s = &name_lut[((attr >> 3) & 0x300) | (temp << 4) | ((v_line & 0x18) >> 1)]; - - /* Pointer into line buffer */ - lb = &linebuf[1][0x20 + xpos]; - - /* Adjust width for sprite limit */ - if (pixelcount > max_pixels) - { - width -= (pixelcount - max_pixels); - } - - /* Number of tiles to draw */ - width = width >> 3; - - /* Pattern row index */ - v_line = (((v_line & 7) << 1) | odd) << 3; - - /* Render sprite patterns */ - for(column = 0; column < width; column ++, lb+=8) - { - temp = attr | (((name + s[column]) & 0x3ff) << 1); - src = &bg_pattern_cache[((temp << 6) | (v_line)) ^ ((attr & 0x1000) >> 6)]; - DRAW_SPRITE_TILE(8,atex,lut[3]) - } - } - - /* Sprite Limit */ - if (pixelcount >= max_pixels) - { - /* Sprite masking is effective on next line if max pixel width is reached */ - spr_ovr = (pixelcount >= bitmap.viewport.w); - - /* Merge background & sprite layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[4], bitmap.viewport.w); - - /* Stop sprite rendering */ - return; - } - - /* Next sprite entry */ - object_info++; - } - - /* Clear sprite masking for next line */ - spr_ovr = 0; - - /* Merge background & sprite layers */ - merge(&linebuf[1][0x20], &linebuf[0][0x20], &linebuf[0][0x20], lut[4], bitmap.viewport.w); -} - - -/*--------------------------------------------------------------------------*/ -/* Sprites Parsing functions */ -/*--------------------------------------------------------------------------*/ - -void parse_satb_tms(int line) -{ - int i = 0; - - /* Sprite counter (4 max. per line) */ - int count = 0; - - /* no sprites in Text modes */ - if (!(reg[1] & 0x10)) - { - /* Y position */ - int ypos; - - /* Sprite list for next line */ - object_info_t *object_info = obj_info[(line + 1) & 1]; - - /* Pointer to sprite attribute table */ - uint8 *st = &vram[(reg[5] << 7) & 0x3F80]; - - /* Sprite height (8 pixels by default) */ - int height = 8; - - /* Adjust height for 16x16 sprites */ - height <<= ((reg[1] & 0x02) >> 1); - - /* Adjust height for zoomed sprites */ - height <<= (reg[1] & 0x01); - - /* Parse Sprite Table (32 entries) */ - do - { - /* Sprite Y position */ - ypos = st[i << 2]; - - /* Check end of sprite list marker */ - if (ypos == 0xD0) - { - break; - } - - /* Wrap Y coordinate for sprites > 256-32 */ - if (ypos >= 224) - { - ypos -= 256; - } - - /* Y range */ - ypos = line - ypos; - - /* Sprite is visible on this line ? */ - if ((ypos >= 0) && (ypos < height)) - { - /* Sprite overflow */ - if (count == TMS_MAX_SPRITES_PER_LINE) - { - /* Flag is set only during active area */ - if (line < bitmap.viewport.h) - { - spr_ovr = 0x40; - } - break; - } - - /* Adjust Y range back for zoomed sprites */ - ypos >>= (reg[1] & 0x01); - - /* Store sprite attributes for later processing */ - object_info->ypos = ypos; - object_info->xpos = st[(i << 2) + 1]; - object_info->attr = st[(i << 2) + 2]; - object_info->size = st[(i << 2) + 3]; - - /* Increment Sprite count */ - ++count; - - /* Next sprite entry */ - object_info++; - } - } - while (++i < 32); - } - - /* Update sprite count for next line */ - object_count[(line + 1) & 1] = count; - - /* Insert number of last sprite entry processed */ - status = (status & 0xE0) | (i & 0x1F); -} - -void parse_satb_m4(int line) -{ - int i = 0; - uint8 *st; - - /* Sprite counter (8 max. per line) */ - int count = 0; - - /* Y position */ - int ypos; - - /* Sprite list for next line */ - object_info_t *object_info = obj_info[(line + 1) & 1]; - - /* Sprite height (8x8 or 8x16) */ - int height = 8 + ((reg[1] & 0x02) << 2); - - /* Sprite attribute table address mask */ - uint16 st_mask = ~0x3F80 ^ (reg[5] << 7); - - /* Unused bits used as a mask on 315-5124 VDP only */ - if (system_hw > SYSTEM_SMS) - { - st_mask |= 0x80; - } - - /* Pointer to sprite attribute table */ - st = &vram[st_mask & 0x3F00]; - - /* Parse Sprite Table (64 entries) */ - do - { - /* Sprite Y position */ - ypos = st[i]; - - /* Check end of sprite list marker */ - if (ypos == (bitmap.viewport.h + 16)) - { - break; - } - - /* Wrap Y coordinate for sprites > 256-16 */ - if (ypos >= 240) - { - ypos -= 256; - } - - /* Y range */ - ypos = line - ypos; - - /* Adjust Y range for zoomed sprites (not working on Mega Drive VDP) */ - if (system_hw < SYSTEM_MD) - { - ypos >>= (reg[1] & 0x01); - } - - /* Check if sprite is visible on this line */ - if ((ypos >= 0) && (ypos < height)) - { - /* Sprite overflow */ - if (count == MODE4_MAX_SPRITES_PER_LINE) - { - /* Flag is set only during active area */ - if ((line >= 0) && (line < bitmap.viewport.h)) - { - spr_ovr = 0x40; - } - break; - } - - /* Store sprite attributes for later processing */ - object_info->ypos = ypos; - object_info->xpos = st[(0x80 + (i << 1)) & st_mask]; - object_info->attr = st[(0x81 + (i << 1)) & st_mask]; - - /* Increment Sprite count */ - ++count; - - /* Next sprite entry */ - object_info++; - } - } - while (++i < 64); - - /* Update sprite count for next line */ - object_count[(line + 1) & 1] = count; -} - -void parse_satb_m5(int line) -{ - /* Y position */ - int ypos; - - /* Sprite height (8,16,24,32 pixels)*/ - int height; - - /* Sprite size data */ - int size; - - /* Sprite link data */ - int link = 0; - - /* Sprite counter */ - int count = 0; - - /* max. number of rendered sprites (16 or 20 sprites per line by default) */ - int max = MODE5_MAX_SPRITES_PER_LINE; - - /* max. number of parsed sprites (64 or 80 sprites per line by default) */ - int total = max_sprite_pixels >> 2; - - /* Pointer to sprite attribute table */ - uint16 *p = (uint16 *) &vram[satb]; - - /* Pointer to internal RAM */ - uint16 *q = (uint16 *) &sat[0]; - - /* Sprite list for next line */ - object_info_t *object_info = obj_info[(line + 1) & 1]; - - /* Adjust line offset */ - line += 0x81; - - do - { - /* Read Y position from internal SAT cache */ - ypos = (q[link] >> im2_flag) & 0x1FF; - - /* Check if sprite Y position has been reached */ - if (line >= ypos) - { - /* Read sprite size from internal SAT cache */ - size = q[link + 1] >> 8; - - /* Sprite height */ - height = 8 + ((size & 3) << 3); - - /* Y range */ - ypos = line - ypos; - - /* Check if sprite is visible on current line */ - if (ypos < height) - { - /* Sprite overflow */ - if (count == max) - { - status |= 0x40; - break; - } - - /* Update sprite list (only name, attribute & xpos are parsed from VRAM) */ - object_info->attr = p[link + 2]; - object_info->xpos = p[link + 3] & 0x1ff; - object_info->ypos = ypos; - object_info->size = size & 0x0f; - - /* Increment Sprite count */ - ++count; - - /* Next sprite entry */ - object_info++; - } - } - - /* Read link data from internal SAT cache */ - link = (q[link + 1] & 0x7F) << 2; - - /* Stop parsing if link data points to first entry (#0) or after the last entry (#64 in H32 mode, #80 in H40 mode) */ - if ((link == 0) || (link >= bitmap.viewport.w)) break; - } - while (--total); - - /* Update sprite count for next line (line value already incremented) */ - object_count[line & 1] = count; -} - - -/*--------------------------------------------------------------------------*/ -/* Pattern cache update function */ -/*--------------------------------------------------------------------------*/ - -void update_bg_pattern_cache_m4(int index) -{ - int i; - uint8 x, y, c; - uint8 *dst; - uint16 name, bp01, bp23; - uint32 bp; - - for(i = 0; i < index; i++) - { - /* Get modified pattern name index */ - name = bg_name_list[i]; - - /* Check modified lines */ - for(y = 0; y < 8; y++) - { - if(bg_name_dirty[name] & (1 << y)) - { - /* Pattern cache base address */ - dst = &bg_pattern_cache[name << 6]; - - /* Byteplane data */ - bp01 = *(uint16 *)&vram[(name << 5) | (y << 2) | (0)]; - bp23 = *(uint16 *)&vram[(name << 5) | (y << 2) | (2)]; - - /* Convert to pixel line data (4 bytes = 8 pixels)*/ - /* (msb) p7p6 p5p4 p3p2 p1p0 (lsb) */ - bp = (bp_lut[bp01] >> 2) | (bp_lut[bp23]); - - /* Update cached line (8 pixels = 8 bytes) */ - for(x = 0; x < 8; x++) - { - /* Extract pixel data */ - c = bp & 0x0F; - - /* Pattern cache data (one pattern = 8 bytes) */ - /* byte0 <-> p0 p1 p2 p3 p4 p5 p6 p7 <-> byte7 (hflip = 0) */ - /* byte0 <-> p7 p6 p5 p4 p3 p2 p1 p0 <-> byte7 (hflip = 1) */ - dst[0x00000 | (y << 3) | (x)] = (c); /* vflip=0 & hflip=0 */ - dst[0x08000 | (y << 3) | (x ^ 7)] = (c); /* vflip=0 & hflip=1 */ - dst[0x10000 | ((y ^ 7) << 3) | (x)] = (c); /* vflip=1 & hflip=0 */ - dst[0x18000 | ((y ^ 7) << 3) | (x ^ 7)] = (c); /* vflip=1 & hflip=1 */ - - /* Next pixel */ - bp = bp >> 4; - } - } - } - - /* Clear modified pattern flag */ - bg_name_dirty[name] = 0; - } -} - -void update_bg_pattern_cache_m5(int index) -{ - int i; - uint8 x, y, c; - uint8 *dst; - uint16 name; - uint32 bp; - - for(i = 0; i < index; i++) - { - /* Get modified pattern name index */ - name = bg_name_list[i]; - - /* Check modified lines */ - for(y = 0; y < 8; y ++) - { - if(bg_name_dirty[name] & (1 << y)) - { - /* Pattern cache base address */ - dst = &bg_pattern_cache[name << 6]; - - /* Byteplane data (one pattern = 4 bytes) */ - /* LIT_ENDIAN: byte0 (lsb) p2p3 p0p1 p6p7 p4p5 (msb) byte3 */ - /* BIG_ENDIAN: byte0 (msb) p0p1 p2p3 p4p5 p6p7 (lsb) byte3 */ - bp = *(uint32 *)&vram[(name << 5) | (y << 2)]; - - /* Update cached line (8 pixels = 8 bytes) */ - for(x = 0; x < 8; x ++) - { - /* Extract pixel data */ - c = bp & 0x0F; - - /* Pattern cache data (one pattern = 8 bytes) */ - /* byte0 <-> p0 p1 p2 p3 p4 p5 p6 p7 <-> byte7 (hflip = 0) */ - /* byte0 <-> p7 p6 p5 p4 p3 p2 p1 p0 <-> byte7 (hflip = 1) */ -#ifdef LSB_FIRST - /* Byteplane data = (msb) p4p5 p6p7 p0p1 p2p3 (lsb) */ - dst[0x00000 | (y << 3) | (x ^ 3)] = (c); /* vflip=0, hflip=0 */ - dst[0x20000 | (y << 3) | (x ^ 4)] = (c); /* vflip=0, hflip=1 */ - dst[0x40000 | ((y ^ 7) << 3) | (x ^ 3)] = (c); /* vflip=1, hflip=0 */ - dst[0x60000 | ((y ^ 7) << 3) | (x ^ 4)] = (c); /* vflip=1, hflip=1 */ -#else - /* Byteplane data = (msb) p0p1 p2p3 p4p5 p6p7 (lsb) */ - dst[0x00000 | (y << 3) | (x ^ 7)] = (c); /* vflip=0, hflip=0 */ - dst[0x20000 | (y << 3) | (x)] = (c); /* vflip=0, hflip=1 */ - dst[0x40000 | ((y ^ 7) << 3) | (x ^ 7)] = (c); /* vflip=1, hflip=0 */ - dst[0x60000 | ((y ^ 7) << 3) | (x)] = (c); /* vflip=1, hflip=1 */ -#endif - /* Next pixel */ - bp = bp >> 4; - } - } - } - - /* Clear modified pattern flag */ - bg_name_dirty[name] = 0; - } -} - - -/*--------------------------------------------------------------------------*/ -/* Window & Plane A clipping update function (Mode 5) */ -/*--------------------------------------------------------------------------*/ - -void window_clip(unsigned int data, unsigned int sw) -{ - /* Window size and invert flags */ - int hp = (data & 0x1f); - int hf = (data >> 7) & 1; - - /* Perform horizontal clipping; the results are applied in reverse - if the horizontal inversion flag is set - */ - int a = hf; - int w = hf ^ 1; - - /* Display width (16 or 20 columns) */ - sw = 16 + (sw << 2); - - if(hp) - { - if(hp > sw) - { - /* Plane W takes up entire line */ - clip[w].left = 0; - clip[w].right = sw; - clip[w].enable = 1; - clip[a].enable = 0; - } - else - { - /* Plane W takes left side, Plane A takes right side */ - clip[w].left = 0; - clip[a].right = sw; - clip[a].left = clip[w].right = hp; - clip[0].enable = clip[1].enable = 1; - } - } - else - { - /* Plane A takes up entire line */ - clip[a].left = 0; - clip[a].right = sw; - clip[a].enable = 1; - clip[w].enable = 0; - } -} - - -/*--------------------------------------------------------------------------*/ -/* Init, reset routines */ -/*--------------------------------------------------------------------------*/ - -void render_init(void) -{ - int bx, ax; - - /* Initialize layers priority pixel look-up tables */ - uint16 index; - for (bx = 0; bx < 0x100; bx++) - { - for (ax = 0; ax < 0x100; ax++) - { - index = (bx << 8) | (ax); - - lut[0][index] = make_lut_bg(bx, ax); - lut[1][index] = make_lut_bgobj(bx, ax); - lut[2][index] = make_lut_bg_ste(bx, ax); - lut[3][index] = make_lut_obj(bx, ax); - lut[4][index] = make_lut_bgobj_ste(bx, ax); - lut[5][index] = make_lut_bgobj_m4(bx,ax); - } - } - - /* Initialize pixel color look-up tables */ - palette_init(); - - /* Make sprite pattern name index look-up table (Mode 5) */ - make_name_lut(); - - /* Make bitplane to pixel look-up table (Mode 4) */ - make_bp_lut(); -} - -void render_reset(void) -{ - /* Clear display bitmap */ - memset(bitmap.data, 0, bitmap.pitch * bitmap.height); - - /* Clear line buffers */ - memset(linebuf, 0, sizeof(linebuf)); - - /* Clear color palettes */ - memset(pixel, 0, sizeof(pixel)); - - /* Clear pattern cache */ - memset ((char *) bg_pattern_cache, 0, sizeof (bg_pattern_cache)); - - /* Reset Sprite infos */ - spr_ovr = spr_col = object_count[0] = object_count[1] = 0; -} - - -/*--------------------------------------------------------------------------*/ -/* Line rendering functions */ -/*--------------------------------------------------------------------------*/ - -void render_line(int line) -{ - /* Check display status */ - if (reg[1] & 0x40) - { - /* Update pattern cache */ - if (bg_list_index) - { - update_bg_pattern_cache(bg_list_index); - bg_list_index = 0; - } - - /* Render BG layer(s) */ - render_bg(line); - - /* Render sprite layer */ - render_obj(line & 1); - - /* Left-most column blanking */ - if (reg[0] & 0x20) - { - if (system_hw > SYSTEM_SG) - { - memset(&linebuf[0][0x20], 0x40, 8); - } - } - - /* Parse sprites for next line */ - if (line < (bitmap.viewport.h - 1)) - { - parse_satb(line); - } - - /* Horizontal borders */ - if (bitmap.viewport.x > 0) - { - memset(&linebuf[0][0x20 - bitmap.viewport.x], 0x40, bitmap.viewport.x); - memset(&linebuf[0][0x20 + bitmap.viewport.w], 0x40, bitmap.viewport.x); - } - } - else - { - /* Master System & Game Gear VDP specific */ - if (system_hw < SYSTEM_MD) - { - /* Update SOVR flag */ - status |= spr_ovr; - spr_ovr = 0; - - /* Sprites are still parsed when display is disabled */ - parse_satb(line); - } - - /* Blanked line */ - memset(&linebuf[0][0x20 - bitmap.viewport.x], 0x40, bitmap.viewport.w + 2*bitmap.viewport.x); - } - - /* Pixel color remapping */ - remap_line(line); -} - -void blank_line(int line, int offset, int width) -{ - memset(&linebuf[0][0x20 + offset], 0x40, width); - remap_line(line); -} - -void remap_line(int line) -{ - /* Line width */ - int width = bitmap.viewport.w + 2*bitmap.viewport.x; - - /* Pixel line buffer */ - uint8 *src = &linebuf[0][0x20 - bitmap.viewport.x]; - - /* Adjust line offset in framebuffer */ - line = (line + bitmap.viewport.y) % lines_per_frame; - - /* Take care of Game Gear reduced screen when overscan is disabled */ - if (line < 0) return; - - /* Adjust for interlaced output */ - if (interlaced && config.render) - { - line = (line * 2) + odd_frame; - } - - /* NTSC Filter (only supported for 15 or 16-bit pixels rendering) */ -#if defined(USE_15BPP_RENDERING) || defined(USE_16BPP_RENDERING) - if (config.ntsc) - { - if (reg[12] & 0x01) - { - md_ntsc_blit(md_ntsc, ( MD_NTSC_IN_T const * )pixel, src, width, line); - } - else - { - sms_ntsc_blit(sms_ntsc, ( SMS_NTSC_IN_T const * )pixel, src, width, line); - } - } - else -#endif - { - /* Convert VDP pixel data to output pixel format */ -#ifdef CUSTOM_BLITTER - CUSTOM_BLITTER(line, width, pixel, src) -#else - PIXEL_OUT_T *dst =((PIXEL_OUT_T *)&bitmap.data[(line * bitmap.pitch)]); - do - { - *dst++ = pixel[*src++]; - } - while (--width); -#endif - } -} diff --git a/waterbox/gpgx/core/vdp_render.h b/waterbox/gpgx/core/vdp_render.h deleted file mode 100644 index b42bc7d1f6..0000000000 --- a/waterbox/gpgx/core/vdp_render.h +++ /dev/null @@ -1,91 +0,0 @@ -/*************************************************************************************** - * Genesis Plus - * Video Display Processor (Modes 0, 1, 2, 3, 4 & 5 rendering) - * - * Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP - * - * Copyright (C) 1998-2007 Charles Mac Donald (original code) - * Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX) - * - * Redistribution and use of this code or any derivative works are permitted - * provided that the following conditions are met: - * - * - Redistributions may not be sold, nor may they be used in a commercial - * product or activity. - * - * - Redistributions that are modified from the original source must include the - * complete source code, including the source code for all components used by a - * binary built from the modified sources. However, as a special exception, the - * source code distributed need not include anything that is normally distributed - * (in either source or binary form) with the major components (compiler, kernel, - * and so on) of the operating system on which the executable runs, unless that - * component itself accompanies the executable. - * - * - Redistributions must reproduce the above copyright notice, this list of - * conditions and the following disclaimer in the documentation and/or other - * materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************************/ - -#ifndef _RENDER_H_ -#define _RENDER_H_ - -/* Global variables */ -extern uint16 spr_col; - -/* Function prototypes */ -extern void render_init(void); -extern void render_reset(void); -extern void render_line(int line); -extern void blank_line(int line, int offset, int width); -extern void remap_line(int line); -extern void window_clip(unsigned int data, unsigned int sw); -extern void render_bg_m0(int line); -extern void render_bg_m1(int line); -extern void render_bg_m1x(int line); -extern void render_bg_m2(int line); -extern void render_bg_m3(int line); -extern void render_bg_m3x(int line); -extern void render_bg_inv(int line); -extern void render_bg_m4(int line); -extern void render_bg_m5(int line); -extern void render_bg_m5_vs(int line); -extern void render_bg_m5_im2(int line); -extern void render_bg_m5_im2_vs(int line); -extern void render_obj_tms(int line); -extern void render_obj_m4(int line); -extern void render_obj_m5(int line); -extern void render_obj_m5_ste(int line); -extern void render_obj_m5_im2(int line); -extern void render_obj_m5_im2_ste(int line); -extern void parse_satb_tms(int line); -extern void parse_satb_m4(int line); -extern void parse_satb_m5(int line); -extern void update_bg_pattern_cache_m4(int index); -extern void update_bg_pattern_cache_m5(int index); -extern void color_update_m4(int index, unsigned int data); -extern void color_update_m5(int index, unsigned int data); - -/* Function pointers */ -extern void (*render_bg)(int line); -extern void (*render_obj)(int line); -extern void (*parse_satb)(int line); -extern void (*update_bg_pattern_cache)(int index); - -extern uint32 *vdp_bp_lut; -extern uint8 **vdp_lut; - -#endif /* _RENDER_H_ */ - diff --git a/waterbox/gpgx/core/z80/osd_cpu.h b/waterbox/gpgx/core/z80/osd_cpu.h deleted file mode 100644 index b7dbdef194..0000000000 --- a/waterbox/gpgx/core/z80/osd_cpu.h +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* -* * -* Define size independent data types and operations. * -* * -* The following types must be supported by all platforms: * -* * -* UINT8 - Unsigned 8-bit Integer INT8 - Signed 8-bit integer * -* UINT16 - Unsigned 16-bit Integer INT16 - Signed 16-bit integer * -* UINT32 - Unsigned 32-bit Integer INT32 - Signed 32-bit integer * -* * -*******************************************************************************/ - -#ifndef OSD_CPU_H -#define OSD_CPU_H - -#undef TRUE -#undef FALSE -#define TRUE 1 -#define FALSE 0 - -typedef unsigned char UINT8; -typedef unsigned short UINT16; -typedef unsigned int UINT32; -typedef signed char INT8; -typedef signed short INT16; -typedef signed int INT32; - -/****************************************************************************** - * Union of UINT8, UINT16 and UINT32 in native endianess of the target - * This is used to access bytes and words in a machine independent manner. - * The upper bytes h2 and h3 normally contain zero (16 bit CPU cores) - * thus PAIR.d can be used to pass arguments to the memory system - * which expects 'int' really. - ******************************************************************************/ - -typedef union { -#ifdef LSB_FIRST - struct { UINT8 l,h,h2,h3; } b; - struct { UINT16 l,h; } w; -#else - struct { UINT8 h3,h2,h,l; } b; - struct { UINT16 h,l; } w; -#endif - UINT32 d; -} PAIR; - -#endif /* defined OSD_CPU_H */ diff --git a/waterbox/gpgx/core/z80/z80.c b/waterbox/gpgx/core/z80/z80.c deleted file mode 100644 index 0bd0f494c0..0000000000 --- a/waterbox/gpgx/core/z80/z80.c +++ /dev/null @@ -1,3511 +0,0 @@ -/***************************************************************************** - * - * z80.c - * Portable Z80 emulator V3.9 - * - * Copyright Juergen Buchmueller, all rights reserved. - * - * - This source code is released as freeware for non-commercial purposes. - * - You are free to use and redistribute this code in modified or - * unmodified form, provided you list me in the credits. - * - If you modify this source code, you must add a notice to each modified - * source file that it has been changed. If you're a nice person, you - * will clearly mark each change too. :) - * - If you wish to use this for commercial purposes, please contact me at - * pullmoll@t-online.de - * - The author of this copywritten work reserves the right to change the - * terms of its usage and license at any time, including retroactively - * - This entire notice must remain in the source code. - * - * TODO: - * - If LD A,I or LD A,R is interrupted, P/V flag gets reset, even if IFF2 - * was set before this instruction - * - Ideally, the tiny differences between Z80 types should be supported, - * currently known differences: - * - LD A,I/R P/V flag reset glitch is fixed on CMOS Z80 - * - OUT (C),0 outputs 0 on NMOS Z80, $FF on CMOS Z80 - * - SCF/CCF X/Y flags is ((flags | A) & 0x28) on SGS/SHARP/ZiLOG NMOS Z80, - * (flags & A & 0x28) on NEC NMOS Z80, other models unknown. - * However, people from the Speccy scene mention that SCF/CCF X/Y results - * are inconsistant and may be influenced by I and R registers. - * This Z80 emulator assumes a ZiLOG NMOS model. - * - * Additional changes [Eke-Eke]: - * - Removed z80_burn function (unused) - * - Discarded multi-chip support (unused) - * - Fixed cycle counting for FD and DD prefixed instructions - * - Fixed behavior of chained FD and DD prefixes (R register should be only incremented by one - * - Implemented cycle-accurate INI/IND (needed by SMS emulation) - * - Fixed Z80 reset - * - Made SZHVC_add & SZHVC_sub tables statically allocated - * Changes in 3.9: - * - Fixed cycle counts for LD IYL/IXL/IYH/IXH,n [Marshmellow] - * - Fixed X/Y flags in CCF/SCF/BIT, ZEXALL is happy now [hap] - * - Simplified DAA, renamed MEMPTR (3.8) to WZ, added TODO [hap] - * - Fixed IM2 interrupt cycles [eke] - * Changes in 3.8 [Miodrag Milanovic]: - * - Added MEMPTR register (according to informations provided - * by Vladimir Kladov - * - BIT n,(HL) now return valid values due to use of MEMPTR - * - Fixed BIT 6,(XY+o) undocumented instructions - * Changes in 3.7 [Aaron Giles]: - * - Changed NMI handling. NMIs are now latched in set_irq_state - * but are not taken there. Instead they are taken at the start of the - * execute loop. - * - Changed IRQ handling. IRQ state is set in set_irq_state but not taken - * except during the inner execute loop. - * - Removed x86 assembly hacks and obsolete timing loop catchers. - * Changes in 3.6: - * - Got rid of the code that would inexactly emulate a Z80, i.e. removed - * all the #if Z80_EXACT #else branches. - * - Removed leading underscores from local register name shortcuts as - * this violates the C99 standard. - * - Renamed the registers inside the Z80 context to lower case to avoid - * ambiguities (shortcuts would have had the same names as the fields - * of the structure). - * Changes in 3.5: - * - Implemented OTIR, INIR, etc. without look-up table for PF flag. - * [Ramsoft, Sean Young] - * Changes in 3.4: - * - Removed Z80-MSX specific code as it's not needed any more. - * - Implemented DAA without look-up table [Ramsoft, Sean Young] - * Changes in 3.3: - * - Fixed undocumented flags XF & YF in the non-asm versions of CP, - * and all the 16 bit arithmetic instructions. [Sean Young] - * Changes in 3.2: - * - Fixed undocumented flags XF & YF of RRCA, and CF and HF of - * INI/IND/OUTI/OUTD/INIR/INDR/OTIR/OTDR [Sean Young] - * Changes in 3.1: - * - removed the REPEAT_AT_ONCE execution of LDIR/CPIR etc. opcodes - * for readabilities sake and because the implementation was buggy - * (and I was not able to find the difference) - * Changes in 3.0: - * - 'finished' switch to dynamically overrideable cycle count tables - * Changes in 2.9: - * - added methods to access and override the cycle count tables - * - fixed handling and timing of multiple DD/FD prefixed opcodes - * Changes in 2.8: - * - OUTI/OUTD/OTIR/OTDR also pre-decrement the B register now. - * This was wrong because of a bug fix on the wrong side - * (astrocade sound driver). - * Changes in 2.7: - * - removed z80_vm specific code, it's not needed (and never was). - * Changes in 2.6: - * - BUSY_LOOP_HACKS needed to call change_pc() earlier, before - * checking the opcodes at the new address, because otherwise they - * might access the old (wrong or even NULL) banked memory region. - * Thanks to Sean Young for finding this nasty bug. - * Changes in 2.5: - * - Burning cycles always adjusts the ICount by a multiple of 4. - * - In REPEAT_AT_ONCE cases the R register wasn't incremented twice - * per repetition as it should have been. Those repeated opcodes - * could also underflow the ICount. - * - Simplified TIME_LOOP_HACKS for BC and added two more for DE + HL - * timing loops. I think those hacks weren't endian safe before too. - * Changes in 2.4: - * - z80_reset zaps the entire context, sets IX and IY to 0xffff(!) and - * sets the Z flag. With these changes the Tehkan World Cup driver - * _seems_ to work again. - * Changes in 2.3: - * - External termination of the execution loop calls z80_burn() and - * z80_vm_burn() to burn an amount of cycles (R adjustment) - * - Shortcuts which burn CPU cycles (BUSY_LOOP_HACKS and TIME_LOOP_HACKS) - * now also adjust the R register depending on the skipped opcodes. - * Changes in 2.2: - * - Fixed bugs in CPL, SCF and CCF instructions flag handling. - * - Changed variable EA and ARG16() function to UINT32; this - * produces slightly more efficient code. - * - The DD/FD XY CB opcodes where XY is 40-7F and Y is not 6/E - * are changed to calls to the X6/XE opcodes to reduce object size. - * They're hardly ever used so this should not yield a speed penalty. - * New in 2.0: - * - Optional more exact Z80 emulation (#define Z80_EXACT 1) according - * to a detailed description by Sean Young which can be found at: - * http://www.msxnet.org/tech/z80-documented.pdf - *****************************************************************************/ -#include "shared.h" -#include "z80.h" - -#include "../cinterface/callbacks.h" - -/* execute main opcodes inside a big switch statement */ -#define BIG_SWITCH 1 - -#define VERBOSE 0 - -#if VERBOSE -#define LOG(x) logerror x -#else -#define LOG(x) -#endif - -#define cpu_readop(a) z80_readmap[(a) >> 10][(a) & 0x03FF] -#define cpu_readop_arg(a) z80_readmap[(a) >> 10][(a) & 0x03FF] - -#define CF 0x01 -#define NF 0x02 -#define PF 0x04 -#define VF PF -#define XF 0x08 -#define HF 0x10 -#define YF 0x20 -#define ZF 0x40 -#define SF 0x80 - -#define INT_IRQ 0x01 -#define NMI_IRQ 0x02 - -#define PCD Z80.pc.d -#define PC Z80.pc.w.l - -#define SPD Z80.sp.d -#define SP Z80.sp.w.l - -#define AFD Z80.af.d -#define AF Z80.af.w.l -#define A Z80.af.b.h -#define F Z80.af.b.l - -#define BCD Z80.bc.d -#define BC Z80.bc.w.l -#define B Z80.bc.b.h -#define C Z80.bc.b.l - -#define DED Z80.de.d -#define DE Z80.de.w.l -#define D Z80.de.b.h -#define E Z80.de.b.l - -#define HLD Z80.hl.d -#define HL Z80.hl.w.l -#define H Z80.hl.b.h -#define L Z80.hl.b.l - -#define IXD Z80.ix.d -#define IX Z80.ix.w.l -#define HX Z80.ix.b.h -#define LX Z80.ix.b.l - -#define IYD Z80.iy.d -#define IY Z80.iy.w.l -#define HY Z80.iy.b.h -#define LY Z80.iy.b.l - -#define WZ Z80.wz.w.l -#define WZ_H Z80.wz.b.h -#define WZ_L Z80.wz.b.l - -#define I Z80.i -#define R Z80.r -#define R2 Z80.r2 -#define IM Z80.im -#define IFF1 Z80.iff1 -#define IFF2 Z80.iff2 -#define HALT Z80.halt - -Z80_Regs Z80; - -unsigned char *z80_readmap[64]; -unsigned char *z80_writemap[64]; - -void (*z80_writemem)(unsigned int address, unsigned char data); -unsigned char (*z80_readmem)(unsigned int address); -void (*z80_writeport)(unsigned int port, unsigned char data); -unsigned char (*z80_readport)(unsigned int port); - -static UINT32 EA; - -static UINT8 SZ[256]; /* zero and sign flags */ -static UINT8 SZ_BIT[256]; /* zero, sign and parity/overflow (=zero) flags for BIT opcode */ -static UINT8 SZP[256]; /* zero, sign and parity flags */ -static UINT8 SZHV_inc[256]; /* zero, sign, half carry and overflow flags INC r8 */ -static UINT8 SZHV_dec[256]; /* zero, sign, half carry and overflow flags DEC r8 */ - -UINT8 *SZHVC_add; /* flags for ADD opcode */ -UINT8 *SZHVC_sub; /* flags for SUB opcode */ - -static const UINT16 cc_op[0x100] = { - 4*15,10*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15, 4*15,11*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15, - 8*15,10*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15,12*15,11*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15, - 7*15,10*15,16*15, 6*15, 4*15, 4*15, 7*15, 4*15, 7*15,11*15,16*15, 6*15, 4*15, 4*15, 7*15, 4*15, - 7*15,10*15,13*15, 6*15,11*15,11*15,10*15, 4*15, 7*15,11*15,13*15, 6*15, 4*15, 4*15, 7*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 7*15, 7*15, 7*15, 7*15, 7*15, 7*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, - 5*15,10*15,10*15,10*15,10*15,11*15, 7*15,11*15, 5*15,10*15,10*15, 0*15,10*15,17*15, 7*15,11*15, - 5*15,10*15,10*15,11*15,10*15,11*15, 7*15,11*15, 5*15, 4*15,10*15,11*15,10*15, 0*15, 7*15,11*15, - 5*15,10*15,10*15,19*15,10*15,11*15, 7*15,11*15, 5*15, 4*15,10*15, 4*15,10*15, 0*15, 7*15,11*15, - 5*15,10*15,10*15, 4*15,10*15,11*15, 7*15,11*15, 5*15, 6*15,10*15, 4*15,10*15, 0*15, 7*15,11*15}; - -static const UINT16 cc_cb[0x100] = { - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15}; - -static const UINT16 cc_ed[0x100] = { - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15, - 12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15, - 12*15,12*15,15*15,20*15, 8*15,14*15, 8*15,18*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15,18*15, - 12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 8*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15,16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15, - 16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15,16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15}; - -/*static const UINT8 cc_xy[0x100] = { - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,15*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,15*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, - 4*15,14*15,20*15,10*15, 9*15, 9*15,11*15, 4*15, 4*15,15*15,20*15,10*15, 9*15, 9*15,11*15, 4*15, - 4*15, 4*15, 4*15, 4*15,23*15,23*15,19*15, 4*15, 4*15,15*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, - 9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15, -19*15,19*15,19*15,19*15,19*15,19*15, 4*15,19*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 0*15, 4*15, 4*15, 4*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, - 4*15,14*15, 4*15,23*15, 4*15,15*15, 4*15, 4*15, 4*15, 8*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, - 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,10*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15}; -*/ - -/* illegal combo should return 4 + cc_op[i] */ -static const UINT16 cc_xy[0x100] ={ - 8*15,14*15,11*15,10*15, 8*15, 8*15,11*15, 8*15, 8*15,15*15,11*15,10*15, 8*15, 8*15,11*15, 8*15, - 12*15,14*15,11*15,10*15, 8*15, 8*15,11*15, 8*15,16*15,15*15,11*15,10*15, 8*15, 8*15,11*15, 8*15, - 11*15,14*15,20*15,10*15, 9*15, 9*15,12*15, 8*15,11*15,15*15,20*15,10*15, 9*15, 9*15,12*15, 8*15, - 11*15,14*15,17*15,10*15,23*15,23*15,19*15, 8*15,11*15,15*15,17*15,10*15, 8*15, 8*15,11*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, - 9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15, - 19*15,19*15,19*15,19*15,19*15,19*15, 8*15,19*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, - 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, - 9*15,14*15,14*15,14*15,14*15,15*15,11*15,15*15, 9*15,14*15,14*15, 0*15,14*15,21*15,11*15,15*15, - 9*15,14*15,14*15,15*15,14*15,15*15,11*15,15*15, 9*15, 8*15,14*15,15*15,14*15, 4*15,11*15,15*15, - 9*15,14*15,14*15,23*15,14*15,15*15,11*15,15*15, 9*15, 8*15,14*15, 8*15,14*15, 4*15,11*15,15*15, - 9*15,14*15,14*15, 8*15,14*15,15*15,11*15,15*15, 9*15,10*15,14*15, 8*15,14*15, 4*15,11*15,15*15}; - -static const UINT16 cc_xycb[0x100] = { - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15, - 20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15, - 20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15, - 20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15, - 23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15}; - -/* extra cycles if jr/jp/call taken and 'interrupt latency' on rst 0-7 */ -static const UINT16 cc_ex[0x100] = { - 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, - 5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* DJNZ */ - 5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* JR NZ/JR Z */ - 5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* JR NC/JR C */ - 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, - 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, - 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, - 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, - 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, - 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, - 0*15, 0*15, 4*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 4*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* INI/IND (cycle-accurate I/O port reads) */ - 5*15, 5*15, 5*15, 5*15, 0*15, 0*15, 0*15, 0*15, 5*15, 5*15, 5*15, 5*15, 0*15, 0*15, 0*15, 0*15, /* LDIR/CPIR/INIR/OTIR LDDR/CPDR/INDR/OTDR */ - 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, - 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, - 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, - 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15}; - -static const UINT16 *cc[6]; -#define Z80_TABLE_dd Z80_TABLE_xy -#define Z80_TABLE_fd Z80_TABLE_xy - -typedef void (*funcptr)(void); - -#define PROTOTYPES(tablename,prefix) \ - INLINE void prefix##_00(void); INLINE void prefix##_01(void); INLINE void prefix##_02(void); INLINE void prefix##_03(void); \ - INLINE void prefix##_04(void); INLINE void prefix##_05(void); INLINE void prefix##_06(void); INLINE void prefix##_07(void); \ - INLINE void prefix##_08(void); INLINE void prefix##_09(void); INLINE void prefix##_0a(void); INLINE void prefix##_0b(void); \ - INLINE void prefix##_0c(void); INLINE void prefix##_0d(void); INLINE void prefix##_0e(void); INLINE void prefix##_0f(void); \ - INLINE void prefix##_10(void); INLINE void prefix##_11(void); INLINE void prefix##_12(void); INLINE void prefix##_13(void); \ - INLINE void prefix##_14(void); INLINE void prefix##_15(void); INLINE void prefix##_16(void); INLINE void prefix##_17(void); \ - INLINE void prefix##_18(void); INLINE void prefix##_19(void); INLINE void prefix##_1a(void); INLINE void prefix##_1b(void); \ - INLINE void prefix##_1c(void); INLINE void prefix##_1d(void); INLINE void prefix##_1e(void); INLINE void prefix##_1f(void); \ - INLINE void prefix##_20(void); INLINE void prefix##_21(void); INLINE void prefix##_22(void); INLINE void prefix##_23(void); \ - INLINE void prefix##_24(void); INLINE void prefix##_25(void); INLINE void prefix##_26(void); INLINE void prefix##_27(void); \ - INLINE void prefix##_28(void); INLINE void prefix##_29(void); INLINE void prefix##_2a(void); INLINE void prefix##_2b(void); \ - INLINE void prefix##_2c(void); INLINE void prefix##_2d(void); INLINE void prefix##_2e(void); INLINE void prefix##_2f(void); \ - INLINE void prefix##_30(void); INLINE void prefix##_31(void); INLINE void prefix##_32(void); INLINE void prefix##_33(void); \ - INLINE void prefix##_34(void); INLINE void prefix##_35(void); INLINE void prefix##_36(void); INLINE void prefix##_37(void); \ - INLINE void prefix##_38(void); INLINE void prefix##_39(void); INLINE void prefix##_3a(void); INLINE void prefix##_3b(void); \ - INLINE void prefix##_3c(void); INLINE void prefix##_3d(void); INLINE void prefix##_3e(void); INLINE void prefix##_3f(void); \ - INLINE void prefix##_40(void); INLINE void prefix##_41(void); INLINE void prefix##_42(void); INLINE void prefix##_43(void); \ - INLINE void prefix##_44(void); INLINE void prefix##_45(void); INLINE void prefix##_46(void); INLINE void prefix##_47(void); \ - INLINE void prefix##_48(void); INLINE void prefix##_49(void); INLINE void prefix##_4a(void); INLINE void prefix##_4b(void); \ - INLINE void prefix##_4c(void); INLINE void prefix##_4d(void); INLINE void prefix##_4e(void); INLINE void prefix##_4f(void); \ - INLINE void prefix##_50(void); INLINE void prefix##_51(void); INLINE void prefix##_52(void); INLINE void prefix##_53(void); \ - INLINE void prefix##_54(void); INLINE void prefix##_55(void); INLINE void prefix##_56(void); INLINE void prefix##_57(void); \ - INLINE void prefix##_58(void); INLINE void prefix##_59(void); INLINE void prefix##_5a(void); INLINE void prefix##_5b(void); \ - INLINE void prefix##_5c(void); INLINE void prefix##_5d(void); INLINE void prefix##_5e(void); INLINE void prefix##_5f(void); \ - INLINE void prefix##_60(void); INLINE void prefix##_61(void); INLINE void prefix##_62(void); INLINE void prefix##_63(void); \ - INLINE void prefix##_64(void); INLINE void prefix##_65(void); INLINE void prefix##_66(void); INLINE void prefix##_67(void); \ - INLINE void prefix##_68(void); INLINE void prefix##_69(void); INLINE void prefix##_6a(void); INLINE void prefix##_6b(void); \ - INLINE void prefix##_6c(void); INLINE void prefix##_6d(void); INLINE void prefix##_6e(void); INLINE void prefix##_6f(void); \ - INLINE void prefix##_70(void); INLINE void prefix##_71(void); INLINE void prefix##_72(void); INLINE void prefix##_73(void); \ - INLINE void prefix##_74(void); INLINE void prefix##_75(void); INLINE void prefix##_76(void); INLINE void prefix##_77(void); \ - INLINE void prefix##_78(void); INLINE void prefix##_79(void); INLINE void prefix##_7a(void); INLINE void prefix##_7b(void); \ - INLINE void prefix##_7c(void); INLINE void prefix##_7d(void); INLINE void prefix##_7e(void); INLINE void prefix##_7f(void); \ - INLINE void prefix##_80(void); INLINE void prefix##_81(void); INLINE void prefix##_82(void); INLINE void prefix##_83(void); \ - INLINE void prefix##_84(void); INLINE void prefix##_85(void); INLINE void prefix##_86(void); INLINE void prefix##_87(void); \ - INLINE void prefix##_88(void); INLINE void prefix##_89(void); INLINE void prefix##_8a(void); INLINE void prefix##_8b(void); \ - INLINE void prefix##_8c(void); INLINE void prefix##_8d(void); INLINE void prefix##_8e(void); INLINE void prefix##_8f(void); \ - INLINE void prefix##_90(void); INLINE void prefix##_91(void); INLINE void prefix##_92(void); INLINE void prefix##_93(void); \ - INLINE void prefix##_94(void); INLINE void prefix##_95(void); INLINE void prefix##_96(void); INLINE void prefix##_97(void); \ - INLINE void prefix##_98(void); INLINE void prefix##_99(void); INLINE void prefix##_9a(void); INLINE void prefix##_9b(void); \ - INLINE void prefix##_9c(void); INLINE void prefix##_9d(void); INLINE void prefix##_9e(void); INLINE void prefix##_9f(void); \ - INLINE void prefix##_a0(void); INLINE void prefix##_a1(void); INLINE void prefix##_a2(void); INLINE void prefix##_a3(void); \ - INLINE void prefix##_a4(void); INLINE void prefix##_a5(void); INLINE void prefix##_a6(void); INLINE void prefix##_a7(void); \ - INLINE void prefix##_a8(void); INLINE void prefix##_a9(void); INLINE void prefix##_aa(void); INLINE void prefix##_ab(void); \ - INLINE void prefix##_ac(void); INLINE void prefix##_ad(void); INLINE void prefix##_ae(void); INLINE void prefix##_af(void); \ - INLINE void prefix##_b0(void); INLINE void prefix##_b1(void); INLINE void prefix##_b2(void); INLINE void prefix##_b3(void); \ - INLINE void prefix##_b4(void); INLINE void prefix##_b5(void); INLINE void prefix##_b6(void); INLINE void prefix##_b7(void); \ - INLINE void prefix##_b8(void); INLINE void prefix##_b9(void); INLINE void prefix##_ba(void); INLINE void prefix##_bb(void); \ - INLINE void prefix##_bc(void); INLINE void prefix##_bd(void); INLINE void prefix##_be(void); INLINE void prefix##_bf(void); \ - INLINE void prefix##_c0(void); INLINE void prefix##_c1(void); INLINE void prefix##_c2(void); INLINE void prefix##_c3(void); \ - INLINE void prefix##_c4(void); INLINE void prefix##_c5(void); INLINE void prefix##_c6(void); INLINE void prefix##_c7(void); \ - INLINE void prefix##_c8(void); INLINE void prefix##_c9(void); INLINE void prefix##_ca(void); INLINE void prefix##_cb(void); \ - INLINE void prefix##_cc(void); INLINE void prefix##_cd(void); INLINE void prefix##_ce(void); INLINE void prefix##_cf(void); \ - INLINE void prefix##_d0(void); INLINE void prefix##_d1(void); INLINE void prefix##_d2(void); INLINE void prefix##_d3(void); \ - INLINE void prefix##_d4(void); INLINE void prefix##_d5(void); INLINE void prefix##_d6(void); INLINE void prefix##_d7(void); \ - INLINE void prefix##_d8(void); INLINE void prefix##_d9(void); INLINE void prefix##_da(void); INLINE void prefix##_db(void); \ - INLINE void prefix##_dc(void); INLINE void prefix##_dd(void); INLINE void prefix##_de(void); INLINE void prefix##_df(void); \ - INLINE void prefix##_e0(void); INLINE void prefix##_e1(void); INLINE void prefix##_e2(void); INLINE void prefix##_e3(void); \ - INLINE void prefix##_e4(void); INLINE void prefix##_e5(void); INLINE void prefix##_e6(void); INLINE void prefix##_e7(void); \ - INLINE void prefix##_e8(void); INLINE void prefix##_e9(void); INLINE void prefix##_ea(void); INLINE void prefix##_eb(void); \ - INLINE void prefix##_ec(void); INLINE void prefix##_ed(void); INLINE void prefix##_ee(void); INLINE void prefix##_ef(void); \ - INLINE void prefix##_f0(void); INLINE void prefix##_f1(void); INLINE void prefix##_f2(void); INLINE void prefix##_f3(void); \ - INLINE void prefix##_f4(void); INLINE void prefix##_f5(void); INLINE void prefix##_f6(void); INLINE void prefix##_f7(void); \ - INLINE void prefix##_f8(void); INLINE void prefix##_f9(void); INLINE void prefix##_fa(void); INLINE void prefix##_fb(void); \ - INLINE void prefix##_fc(void); INLINE void prefix##_fd(void); INLINE void prefix##_fe(void); INLINE void prefix##_ff(void); \ -static const funcptr tablename[0x100] = { \ - prefix##_00,prefix##_01,prefix##_02,prefix##_03,prefix##_04,prefix##_05,prefix##_06,prefix##_07, \ - prefix##_08,prefix##_09,prefix##_0a,prefix##_0b,prefix##_0c,prefix##_0d,prefix##_0e,prefix##_0f, \ - prefix##_10,prefix##_11,prefix##_12,prefix##_13,prefix##_14,prefix##_15,prefix##_16,prefix##_17, \ - prefix##_18,prefix##_19,prefix##_1a,prefix##_1b,prefix##_1c,prefix##_1d,prefix##_1e,prefix##_1f, \ - prefix##_20,prefix##_21,prefix##_22,prefix##_23,prefix##_24,prefix##_25,prefix##_26,prefix##_27, \ - prefix##_28,prefix##_29,prefix##_2a,prefix##_2b,prefix##_2c,prefix##_2d,prefix##_2e,prefix##_2f, \ - prefix##_30,prefix##_31,prefix##_32,prefix##_33,prefix##_34,prefix##_35,prefix##_36,prefix##_37, \ - prefix##_38,prefix##_39,prefix##_3a,prefix##_3b,prefix##_3c,prefix##_3d,prefix##_3e,prefix##_3f, \ - prefix##_40,prefix##_41,prefix##_42,prefix##_43,prefix##_44,prefix##_45,prefix##_46,prefix##_47, \ - prefix##_48,prefix##_49,prefix##_4a,prefix##_4b,prefix##_4c,prefix##_4d,prefix##_4e,prefix##_4f, \ - prefix##_50,prefix##_51,prefix##_52,prefix##_53,prefix##_54,prefix##_55,prefix##_56,prefix##_57, \ - prefix##_58,prefix##_59,prefix##_5a,prefix##_5b,prefix##_5c,prefix##_5d,prefix##_5e,prefix##_5f, \ - prefix##_60,prefix##_61,prefix##_62,prefix##_63,prefix##_64,prefix##_65,prefix##_66,prefix##_67, \ - prefix##_68,prefix##_69,prefix##_6a,prefix##_6b,prefix##_6c,prefix##_6d,prefix##_6e,prefix##_6f, \ - prefix##_70,prefix##_71,prefix##_72,prefix##_73,prefix##_74,prefix##_75,prefix##_76,prefix##_77, \ - prefix##_78,prefix##_79,prefix##_7a,prefix##_7b,prefix##_7c,prefix##_7d,prefix##_7e,prefix##_7f, \ - prefix##_80,prefix##_81,prefix##_82,prefix##_83,prefix##_84,prefix##_85,prefix##_86,prefix##_87, \ - prefix##_88,prefix##_89,prefix##_8a,prefix##_8b,prefix##_8c,prefix##_8d,prefix##_8e,prefix##_8f, \ - prefix##_90,prefix##_91,prefix##_92,prefix##_93,prefix##_94,prefix##_95,prefix##_96,prefix##_97, \ - prefix##_98,prefix##_99,prefix##_9a,prefix##_9b,prefix##_9c,prefix##_9d,prefix##_9e,prefix##_9f, \ - prefix##_a0,prefix##_a1,prefix##_a2,prefix##_a3,prefix##_a4,prefix##_a5,prefix##_a6,prefix##_a7, \ - prefix##_a8,prefix##_a9,prefix##_aa,prefix##_ab,prefix##_ac,prefix##_ad,prefix##_ae,prefix##_af, \ - prefix##_b0,prefix##_b1,prefix##_b2,prefix##_b3,prefix##_b4,prefix##_b5,prefix##_b6,prefix##_b7, \ - prefix##_b8,prefix##_b9,prefix##_ba,prefix##_bb,prefix##_bc,prefix##_bd,prefix##_be,prefix##_bf, \ - prefix##_c0,prefix##_c1,prefix##_c2,prefix##_c3,prefix##_c4,prefix##_c5,prefix##_c6,prefix##_c7, \ - prefix##_c8,prefix##_c9,prefix##_ca,prefix##_cb,prefix##_cc,prefix##_cd,prefix##_ce,prefix##_cf, \ - prefix##_d0,prefix##_d1,prefix##_d2,prefix##_d3,prefix##_d4,prefix##_d5,prefix##_d6,prefix##_d7, \ - prefix##_d8,prefix##_d9,prefix##_da,prefix##_db,prefix##_dc,prefix##_dd,prefix##_de,prefix##_df, \ - prefix##_e0,prefix##_e1,prefix##_e2,prefix##_e3,prefix##_e4,prefix##_e5,prefix##_e6,prefix##_e7, \ - prefix##_e8,prefix##_e9,prefix##_ea,prefix##_eb,prefix##_ec,prefix##_ed,prefix##_ee,prefix##_ef, \ - prefix##_f0,prefix##_f1,prefix##_f2,prefix##_f3,prefix##_f4,prefix##_f5,prefix##_f6,prefix##_f7, \ - prefix##_f8,prefix##_f9,prefix##_fa,prefix##_fb,prefix##_fc,prefix##_fd,prefix##_fe,prefix##_ff \ -} - -PROTOTYPES(Z80op,op); -PROTOTYPES(Z80cb,cb); -PROTOTYPES(Z80dd,dd); -PROTOTYPES(Z80ed,ed); -PROTOTYPES(Z80fd,fd); -PROTOTYPES(Z80xycb,xycb); - -/****************************************************************************/ -/* Burn an odd amount of cycles, that is instructions taking something */ -/* different from 4 T-states per opcode (and R increment) */ -/****************************************************************************/ -INLINE void BURNODD(int cycles, int opcodes, int cyclesum) -{ - if( cycles > 0 ) - { - R += (cycles / cyclesum) * opcodes; - Z80.cycles += (cycles / cyclesum) * cyclesum * 15; - } -} - -/*************************************************************** - * define an opcode function - ***************************************************************/ -#define OP(prefix,opcode) INLINE void prefix##_##opcode(void) - -/*************************************************************** - * adjust cycle count by n T-states - ***************************************************************/ -#define CC(prefix,opcode) Z80.cycles += cc[Z80_TABLE_##prefix][opcode] - -/*************************************************************** - * execute an opcode - ***************************************************************/ -#define EXEC(prefix,opcode) \ -{ \ - unsigned op = opcode; \ - CC(prefix,op); \ - (*Z80##prefix[op])(); \ -} - -#if BIG_SWITCH -#define EXEC_INLINE(prefix,opcode) \ -{ \ - unsigned op = opcode; \ - CC(prefix,op); \ - switch(op) \ - { \ - case 0x00:prefix##_##00();break; case 0x01:prefix##_##01();break; case 0x02:prefix##_##02();break; case 0x03:prefix##_##03();break; \ - case 0x04:prefix##_##04();break; case 0x05:prefix##_##05();break; case 0x06:prefix##_##06();break; case 0x07:prefix##_##07();break; \ - case 0x08:prefix##_##08();break; case 0x09:prefix##_##09();break; case 0x0a:prefix##_##0a();break; case 0x0b:prefix##_##0b();break; \ - case 0x0c:prefix##_##0c();break; case 0x0d:prefix##_##0d();break; case 0x0e:prefix##_##0e();break; case 0x0f:prefix##_##0f();break; \ - case 0x10:prefix##_##10();break; case 0x11:prefix##_##11();break; case 0x12:prefix##_##12();break; case 0x13:prefix##_##13();break; \ - case 0x14:prefix##_##14();break; case 0x15:prefix##_##15();break; case 0x16:prefix##_##16();break; case 0x17:prefix##_##17();break; \ - case 0x18:prefix##_##18();break; case 0x19:prefix##_##19();break; case 0x1a:prefix##_##1a();break; case 0x1b:prefix##_##1b();break; \ - case 0x1c:prefix##_##1c();break; case 0x1d:prefix##_##1d();break; case 0x1e:prefix##_##1e();break; case 0x1f:prefix##_##1f();break; \ - case 0x20:prefix##_##20();break; case 0x21:prefix##_##21();break; case 0x22:prefix##_##22();break; case 0x23:prefix##_##23();break; \ - case 0x24:prefix##_##24();break; case 0x25:prefix##_##25();break; case 0x26:prefix##_##26();break; case 0x27:prefix##_##27();break; \ - case 0x28:prefix##_##28();break; case 0x29:prefix##_##29();break; case 0x2a:prefix##_##2a();break; case 0x2b:prefix##_##2b();break; \ - case 0x2c:prefix##_##2c();break; case 0x2d:prefix##_##2d();break; case 0x2e:prefix##_##2e();break; case 0x2f:prefix##_##2f();break; \ - case 0x30:prefix##_##30();break; case 0x31:prefix##_##31();break; case 0x32:prefix##_##32();break; case 0x33:prefix##_##33();break; \ - case 0x34:prefix##_##34();break; case 0x35:prefix##_##35();break; case 0x36:prefix##_##36();break; case 0x37:prefix##_##37();break; \ - case 0x38:prefix##_##38();break; case 0x39:prefix##_##39();break; case 0x3a:prefix##_##3a();break; case 0x3b:prefix##_##3b();break; \ - case 0x3c:prefix##_##3c();break; case 0x3d:prefix##_##3d();break; case 0x3e:prefix##_##3e();break; case 0x3f:prefix##_##3f();break; \ - case 0x40:prefix##_##40();break; case 0x41:prefix##_##41();break; case 0x42:prefix##_##42();break; case 0x43:prefix##_##43();break; \ - case 0x44:prefix##_##44();break; case 0x45:prefix##_##45();break; case 0x46:prefix##_##46();break; case 0x47:prefix##_##47();break; \ - case 0x48:prefix##_##48();break; case 0x49:prefix##_##49();break; case 0x4a:prefix##_##4a();break; case 0x4b:prefix##_##4b();break; \ - case 0x4c:prefix##_##4c();break; case 0x4d:prefix##_##4d();break; case 0x4e:prefix##_##4e();break; case 0x4f:prefix##_##4f();break; \ - case 0x50:prefix##_##50();break; case 0x51:prefix##_##51();break; case 0x52:prefix##_##52();break; case 0x53:prefix##_##53();break; \ - case 0x54:prefix##_##54();break; case 0x55:prefix##_##55();break; case 0x56:prefix##_##56();break; case 0x57:prefix##_##57();break; \ - case 0x58:prefix##_##58();break; case 0x59:prefix##_##59();break; case 0x5a:prefix##_##5a();break; case 0x5b:prefix##_##5b();break; \ - case 0x5c:prefix##_##5c();break; case 0x5d:prefix##_##5d();break; case 0x5e:prefix##_##5e();break; case 0x5f:prefix##_##5f();break; \ - case 0x60:prefix##_##60();break; case 0x61:prefix##_##61();break; case 0x62:prefix##_##62();break; case 0x63:prefix##_##63();break; \ - case 0x64:prefix##_##64();break; case 0x65:prefix##_##65();break; case 0x66:prefix##_##66();break; case 0x67:prefix##_##67();break; \ - case 0x68:prefix##_##68();break; case 0x69:prefix##_##69();break; case 0x6a:prefix##_##6a();break; case 0x6b:prefix##_##6b();break; \ - case 0x6c:prefix##_##6c();break; case 0x6d:prefix##_##6d();break; case 0x6e:prefix##_##6e();break; case 0x6f:prefix##_##6f();break; \ - case 0x70:prefix##_##70();break; case 0x71:prefix##_##71();break; case 0x72:prefix##_##72();break; case 0x73:prefix##_##73();break; \ - case 0x74:prefix##_##74();break; case 0x75:prefix##_##75();break; case 0x76:prefix##_##76();break; case 0x77:prefix##_##77();break; \ - case 0x78:prefix##_##78();break; case 0x79:prefix##_##79();break; case 0x7a:prefix##_##7a();break; case 0x7b:prefix##_##7b();break; \ - case 0x7c:prefix##_##7c();break; case 0x7d:prefix##_##7d();break; case 0x7e:prefix##_##7e();break; case 0x7f:prefix##_##7f();break; \ - case 0x80:prefix##_##80();break; case 0x81:prefix##_##81();break; case 0x82:prefix##_##82();break; case 0x83:prefix##_##83();break; \ - case 0x84:prefix##_##84();break; case 0x85:prefix##_##85();break; case 0x86:prefix##_##86();break; case 0x87:prefix##_##87();break; \ - case 0x88:prefix##_##88();break; case 0x89:prefix##_##89();break; case 0x8a:prefix##_##8a();break; case 0x8b:prefix##_##8b();break; \ - case 0x8c:prefix##_##8c();break; case 0x8d:prefix##_##8d();break; case 0x8e:prefix##_##8e();break; case 0x8f:prefix##_##8f();break; \ - case 0x90:prefix##_##90();break; case 0x91:prefix##_##91();break; case 0x92:prefix##_##92();break; case 0x93:prefix##_##93();break; \ - case 0x94:prefix##_##94();break; case 0x95:prefix##_##95();break; case 0x96:prefix##_##96();break; case 0x97:prefix##_##97();break; \ - case 0x98:prefix##_##98();break; case 0x99:prefix##_##99();break; case 0x9a:prefix##_##9a();break; case 0x9b:prefix##_##9b();break; \ - case 0x9c:prefix##_##9c();break; case 0x9d:prefix##_##9d();break; case 0x9e:prefix##_##9e();break; case 0x9f:prefix##_##9f();break; \ - case 0xa0:prefix##_##a0();break; case 0xa1:prefix##_##a1();break; case 0xa2:prefix##_##a2();break; case 0xa3:prefix##_##a3();break; \ - case 0xa4:prefix##_##a4();break; case 0xa5:prefix##_##a5();break; case 0xa6:prefix##_##a6();break; case 0xa7:prefix##_##a7();break; \ - case 0xa8:prefix##_##a8();break; case 0xa9:prefix##_##a9();break; case 0xaa:prefix##_##aa();break; case 0xab:prefix##_##ab();break; \ - case 0xac:prefix##_##ac();break; case 0xad:prefix##_##ad();break; case 0xae:prefix##_##ae();break; case 0xaf:prefix##_##af();break; \ - case 0xb0:prefix##_##b0();break; case 0xb1:prefix##_##b1();break; case 0xb2:prefix##_##b2();break; case 0xb3:prefix##_##b3();break; \ - case 0xb4:prefix##_##b4();break; case 0xb5:prefix##_##b5();break; case 0xb6:prefix##_##b6();break; case 0xb7:prefix##_##b7();break; \ - case 0xb8:prefix##_##b8();break; case 0xb9:prefix##_##b9();break; case 0xba:prefix##_##ba();break; case 0xbb:prefix##_##bb();break; \ - case 0xbc:prefix##_##bc();break; case 0xbd:prefix##_##bd();break; case 0xbe:prefix##_##be();break; case 0xbf:prefix##_##bf();break; \ - case 0xc0:prefix##_##c0();break; case 0xc1:prefix##_##c1();break; case 0xc2:prefix##_##c2();break; case 0xc3:prefix##_##c3();break; \ - case 0xc4:prefix##_##c4();break; case 0xc5:prefix##_##c5();break; case 0xc6:prefix##_##c6();break; case 0xc7:prefix##_##c7();break; \ - case 0xc8:prefix##_##c8();break; case 0xc9:prefix##_##c9();break; case 0xca:prefix##_##ca();break; case 0xcb:prefix##_##cb();break; \ - case 0xcc:prefix##_##cc();break; case 0xcd:prefix##_##cd();break; case 0xce:prefix##_##ce();break; case 0xcf:prefix##_##cf();break; \ - case 0xd0:prefix##_##d0();break; case 0xd1:prefix##_##d1();break; case 0xd2:prefix##_##d2();break; case 0xd3:prefix##_##d3();break; \ - case 0xd4:prefix##_##d4();break; case 0xd5:prefix##_##d5();break; case 0xd6:prefix##_##d6();break; case 0xd7:prefix##_##d7();break; \ - case 0xd8:prefix##_##d8();break; case 0xd9:prefix##_##d9();break; case 0xda:prefix##_##da();break; case 0xdb:prefix##_##db();break; \ - case 0xdc:prefix##_##dc();break; case 0xdd:prefix##_##dd();break; case 0xde:prefix##_##de();break; case 0xdf:prefix##_##df();break; \ - case 0xe0:prefix##_##e0();break; case 0xe1:prefix##_##e1();break; case 0xe2:prefix##_##e2();break; case 0xe3:prefix##_##e3();break; \ - case 0xe4:prefix##_##e4();break; case 0xe5:prefix##_##e5();break; case 0xe6:prefix##_##e6();break; case 0xe7:prefix##_##e7();break; \ - case 0xe8:prefix##_##e8();break; case 0xe9:prefix##_##e9();break; case 0xea:prefix##_##ea();break; case 0xeb:prefix##_##eb();break; \ - case 0xec:prefix##_##ec();break; case 0xed:prefix##_##ed();break; case 0xee:prefix##_##ee();break; case 0xef:prefix##_##ef();break; \ - case 0xf0:prefix##_##f0();break; case 0xf1:prefix##_##f1();break; case 0xf2:prefix##_##f2();break; case 0xf3:prefix##_##f3();break; \ - case 0xf4:prefix##_##f4();break; case 0xf5:prefix##_##f5();break; case 0xf6:prefix##_##f6();break; case 0xf7:prefix##_##f7();break; \ - case 0xf8:prefix##_##f8();break; case 0xf9:prefix##_##f9();break; case 0xfa:prefix##_##fa();break; case 0xfb:prefix##_##fb();break; \ - case 0xfc:prefix##_##fc();break; case 0xfd:prefix##_##fd();break; case 0xfe:prefix##_##fe();break; case 0xff:prefix##_##ff();break; \ - } \ -} -#else -#define EXEC_INLINE EXEC -#endif - - -void CDLog68k(uint addr, uint flags); - -void CDLogZ80(uint addr, uint flags) -{ - //in case we wrap around while reading a u16 from FFFF... - addr &= 0xFFFF; - - if(addr < 0x4000) - { - addr &= 0x1FFF; - biz_cdcallback(addr, eCDLog_AddrType_RAMZ80, flags); - return; - } - - if(addr >= 0x8000) - { - addr = zbank | (addr & 0x7FFF); - if (zbank_memory_map[addr >> 16].read) - { - //special memory maps are hard to support here. - //hopefully, most carts aren't setting this CB for simple accesses to ROMs - return; - } - - //punt to 68k mapper - CDLog68k(addr, flags); - return; - } -} - -INLINE unsigned char CDLogZ80_RM(uint addr) -{ - if(biz_cdcallback) - CDLogZ80(addr,eCDLog_Flags_DataZ80); - return z80_readmem(addr); -} - -/*************************************************************** - * Enter HALT state; write 1 to fake port on first execution - ***************************************************************/ -#define ENTER_HALT { \ - PC--; \ - HALT = 1; \ -} - -/*************************************************************** - * Leave HALT state; write 0 to fake port - ***************************************************************/ -#define LEAVE_HALT { \ - if( HALT ) \ - { \ - HALT = 0; \ - PC++; \ - } \ -} - -/*************************************************************** - * Input a byte from given I/O port - ***************************************************************/ -#define IN(port) z80_readport(port) - -/*************************************************************** - * Output a byte to given I/O port - ***************************************************************/ -#define OUT(port,value) z80_writeport(port,value) - -/*************************************************************** - * Read a byte from given memory location - ***************************************************************/ -#define RM(addr) CDLogZ80_RM(addr) - -/*************************************************************** - * Write a byte to given memory location - ***************************************************************/ -#define WM(addr,value) z80_writemem(addr,value) - -/*************************************************************** - * Read a word from given memory location - ***************************************************************/ -INLINE void RM16( UINT32 addr, PAIR *r ) -{ - r->b.l = RM(addr); - r->b.h = RM((addr+1)&0xffff); -} - -/*************************************************************** - * Write a word to given memory location - ***************************************************************/ -INLINE void WM16( UINT32 addr, PAIR *r ) -{ - WM(addr,r->b.l); - WM((addr+1)&0xffff,r->b.h); -} - -/*************************************************************** - * ROP() is identical to RM() except it is used for - * reading opcodes. In case of system with memory mapped I/O, - * this function can be used to greatly speed up emulation - ***************************************************************/ -INLINE UINT8 ROP(void) -{ - unsigned pc = PCD; - PC++; - - if(biz_cdcallback) - CDLogZ80(PC,eCDLog_Flags_ExecZ80First); - - return cpu_readop(pc); -} - -/**************************************************************** - * ARG() is identical to ROP() except it is used - * for reading opcode arguments. This difference can be used to - * support systems that use different encoding mechanisms for - * opcodes and opcode arguments - ***************************************************************/ -INLINE UINT8 ARG(void) -{ - unsigned pc = PCD; - PC++; - - if(biz_cdcallback) - CDLogZ80(pc,eCDLog_Flags_ExecZ80Operand); - - return cpu_readop_arg(pc); -} - -INLINE UINT32 ARG16(void) -{ - unsigned pc = PCD; - PC += 2; - - if(biz_cdcallback) - { - CDLogZ80(pc,eCDLog_Flags_ExecZ80Operand); - CDLogZ80(pc+1,eCDLog_Flags_ExecZ80Operand); - } - - return cpu_readop_arg(pc) | (cpu_readop_arg((pc+1)&0xffff) << 8); -} - -/*************************************************************** - * Calculate the effective address EA of an opcode using - * IX+offset resp. IY+offset addressing. - ***************************************************************/ -#define EAX do { EA = (UINT32)(UINT16)(IX + (INT8)ARG()); WZ = EA; } while (0) -#define EAY do { EA = (UINT32)(UINT16)(IY + (INT8)ARG()); WZ = EA; } while (0) - -/*************************************************************** - * POP - ***************************************************************/ -#define POP(DR) do { RM16( SPD, &Z80.DR ); SP += 2; } while (0) - -/*************************************************************** - * PUSH - ***************************************************************/ -#define PUSH(SR) do { SP -= 2; WM16( SPD, &Z80.SR ); } while (0) - -/*************************************************************** - * JP - ***************************************************************/ -#define JP { \ - PCD = ARG16(); \ - WZ = PCD; \ -} - -/*************************************************************** - * JP_COND - ***************************************************************/ -#define JP_COND(cond) { \ - if (cond) \ - { \ - PCD = ARG16(); \ - WZ = PCD; \ - } \ - else \ - { \ - WZ = ARG16(); /* implicit do PC += 2 */ \ - } \ -} - -/*************************************************************** - * JR - ***************************************************************/ -#define JR() { \ - INT8 arg = (INT8)ARG(); /* ARG() also increments PC */ \ - PC += arg; /* so don't do PC += ARG() */ \ - WZ = PC; \ -} - -/*************************************************************** - * JR_COND - ***************************************************************/ -#define JR_COND(cond, opcode) { \ - if (cond) \ - { \ - JR(); \ - CC(ex, opcode); \ - } \ - else PC++; \ -} - -/*************************************************************** - * CALL - ***************************************************************/ -#define CALL() { \ - EA = ARG16(); \ - WZ = EA; \ - PUSH(pc); \ - PCD = EA; \ -} - -/*************************************************************** - * CALL_COND - ***************************************************************/ -#define CALL_COND(cond, opcode) { \ - if (cond) \ - { \ - EA = ARG16(); \ - WZ = EA; \ - PUSH(pc); \ - PCD = EA; \ - CC(ex, opcode); \ - } \ - else \ - { \ - WZ = ARG16(); /* implicit call PC+=2; */ \ - } \ -} - -/*************************************************************** - * RET_COND - ***************************************************************/ -#define RET_COND(cond, opcode) do { \ - if (cond) \ - { \ - POP(pc); \ - WZ = PC; \ - CC(ex, opcode); \ - } \ -} while (0) - -/*************************************************************** - * RETN - ***************************************************************/ -#define RETN do { \ - LOG(("Z80 #%d RETN IFF1:%d IFF2:%d\n", cpu_getactivecpu(), IFF1, IFF2)); \ - POP( pc ); \ - WZ = PC; \ - IFF1 = IFF2; \ -} while (0) - -/*************************************************************** - * RETI - ***************************************************************/ -#define RETI { \ - POP( pc ); \ - WZ = PC; \ -/* according to http://www.msxnet.org/tech/z80-documented.pdf */ \ - IFF1 = IFF2; \ -} - -/*************************************************************** - * LD R,A - ***************************************************************/ -#define LD_R_A { \ - R = A; \ - R2 = A & 0x80; /* keep bit 7 of R */ \ -} - -/*************************************************************** - * LD A,R - ***************************************************************/ -#define LD_A_R { \ - A = (R & 0x7f) | R2; \ - F = (F & CF) | SZ[A] | ( IFF2 << 2 ); \ -} - -/*************************************************************** - * LD I,A - ***************************************************************/ -#define LD_I_A { \ - I = A; \ -} - -/*************************************************************** - * LD A,I - ***************************************************************/ -#define LD_A_I { \ - A = I; \ - F = (F & CF) | SZ[A] | ( IFF2 << 2 ); \ -} - -/*************************************************************** - * RST - ***************************************************************/ -#define RST(addr) \ - PUSH( pc ); \ - PCD = addr; \ - WZ = PC; \ - -/*************************************************************** - * INC r8 - ***************************************************************/ -INLINE UINT8 INC(UINT8 value) -{ - UINT8 res = value + 1; - F = (F & CF) | SZHV_inc[res]; - return (UINT8)res; -} - -/*************************************************************** - * DEC r8 - ***************************************************************/ -INLINE UINT8 DEC(UINT8 value) -{ - UINT8 res = value - 1; - F = (F & CF) | SZHV_dec[res]; - return res; -} - -/*************************************************************** - * RLCA - ***************************************************************/ -#define RLCA \ - A = (A << 1) | (A >> 7); \ - F = (F & (SF | ZF | PF)) | (A & (YF | XF | CF)) - -/*************************************************************** - * RRCA - ***************************************************************/ -#define RRCA \ - F = (F & (SF | ZF | PF)) | (A & CF); \ - A = (A >> 1) | (A << 7); \ - F |= (A & (YF | XF) ) - -/*************************************************************** - * RLA - ***************************************************************/ -#define RLA { \ - UINT8 res = (A << 1) | (F & CF); \ - UINT8 c = (A & 0x80) ? CF : 0; \ - F = (F & (SF | ZF | PF)) | c | (res & (YF | XF)); \ - A = res; \ -} - -/*************************************************************** - * RRA - ***************************************************************/ -#define RRA { \ - UINT8 res = (A >> 1) | (F << 7); \ - UINT8 c = (A & 0x01) ? CF : 0; \ - F = (F & (SF | ZF | PF)) | c | (res & (YF | XF)); \ - A = res; \ -} - -/*************************************************************** - * RRD - ***************************************************************/ -#define RRD { \ - UINT8 n = RM(HL); \ - WZ = HL+1; \ - WM( HL, (n >> 4) | (A << 4) ); \ - A = (A & 0xf0) | (n & 0x0f); \ - F = (F & CF) | SZP[A]; \ -} - -/*************************************************************** - * RLD - ***************************************************************/ -#define RLD { \ - UINT8 n = RM(HL); \ - WZ = HL+1; \ - WM( HL, (n << 4) | (A & 0x0f) ); \ - A = (A & 0xf0) | (n >> 4); \ - F = (F & CF) | SZP[A]; \ -} - -/*************************************************************** - * ADD A,n - ***************************************************************/ -#define ADD(value) \ -{ \ - UINT32 ah = AFD & 0xff00; \ - UINT32 res = (UINT8)((ah >> 8) + value); \ - F = SZHVC_add[ah | res]; \ - A = res; \ -} - -/*************************************************************** - * ADC A,n - ***************************************************************/ -#define ADC(value) \ -{ \ - UINT32 ah = AFD & 0xff00, c = AFD & 1; \ - UINT32 res = (UINT8)((ah >> 8) + value + c); \ - F = SZHVC_add[(c << 16) | ah | res]; \ - A = res; \ -} - -/*************************************************************** - * SUB n - ***************************************************************/ -#define SUB(value) \ -{ \ - UINT32 ah = AFD & 0xff00; \ - UINT32 res = (UINT8)((ah >> 8) - value); \ - F = SZHVC_sub[ah | res]; \ - A = res; \ -} - -/*************************************************************** - * SBC A,n - ***************************************************************/ -#define SBC(value) \ -{ \ - UINT32 ah = AFD & 0xff00, c = AFD & 1; \ - UINT32 res = (UINT8)((ah >> 8) - value - c); \ - F = SZHVC_sub[(c<<16) | ah | res]; \ - A = res; \ -} - -/*************************************************************** - * NEG - ***************************************************************/ -#define NEG { \ - UINT8 value = A; \ - A = 0; \ - SUB(value); \ -} - -/*************************************************************** - * DAA - ***************************************************************/ -#define DAA { \ - UINT8 a = A; \ - if (F & NF) { \ - if ((F&HF) | ((A&0xf)>9)) a-=6; \ - if ((F&CF) | (A>0x99)) a-=0x60; \ - } \ - else { \ - if ((F&HF) | ((A&0xf)>9)) a+=6; \ - if ((F&CF) | (A>0x99)) a+=0x60; \ - } \ - \ - F = (F&(CF|NF)) | (A>0x99) | ((A^a)&HF) | SZP[a]; \ - A = a; \ -} - -/*************************************************************** - * AND n - ***************************************************************/ -#define AND(value) \ - A &= value; \ - F = SZP[A] | HF - -/*************************************************************** - * OR n - ***************************************************************/ -#define OR(value) \ - A |= value; \ - F = SZP[A] - -/*************************************************************** - * XOR n - ***************************************************************/ -#define XOR(value) \ - A ^= value; \ - F = SZP[A] - -/*************************************************************** - * CP n - ***************************************************************/ -#define CP(value) \ -{ \ - unsigned val = value; \ - UINT32 ah = AFD & 0xff00; \ - UINT32 res = (UINT8)((ah >> 8) - val); \ - F = (SZHVC_sub[ah | res] & ~(YF | XF)) | (val & (YF | XF)); \ -} - -/*************************************************************** - * EX AF,AF' - ***************************************************************/ -#define EX_AF \ -{ \ - PAIR tmp; \ - tmp = Z80.af; Z80.af = Z80.af2; Z80.af2 = tmp; \ -} - -/*************************************************************** - * EX DE,HL - ***************************************************************/ -#define EX_DE_HL \ -{ \ - PAIR tmp; \ - tmp = Z80.de; Z80.de = Z80.hl; Z80.hl = tmp; \ -} - -/*************************************************************** - * EXX - ***************************************************************/ -#define EXX \ -{ \ - PAIR tmp; \ - tmp = Z80.bc; Z80.bc = Z80.bc2; Z80.bc2 = tmp; \ - tmp = Z80.de; Z80.de = Z80.de2; Z80.de2 = tmp; \ - tmp = Z80.hl; Z80.hl = Z80.hl2; Z80.hl2 = tmp; \ -} - -/*************************************************************** - * EX (SP),r16 - ***************************************************************/ -#define EXSP(DR) \ -{ \ - PAIR tmp = { { 0, 0, 0, 0 } }; \ - RM16( SPD, &tmp ); \ - WM16( SPD, &Z80.DR ); \ - Z80.DR = tmp; \ - WZ = Z80.DR.d; \ -} - - -/*************************************************************** - * ADD16 - ***************************************************************/ -#define ADD16(DR,SR) \ -{ \ - UINT32 res = Z80.DR.d + Z80.SR.d; \ - WZ = Z80.DR.d + 1; \ - F = (F & (SF | ZF | VF)) | \ - (((Z80.DR.d ^ res ^ Z80.SR.d) >> 8) & HF) | \ - ((res >> 16) & CF) | ((res >> 8) & (YF | XF)); \ - Z80.DR.w.l = (UINT16)res; \ -} - -/*************************************************************** - * ADC r16,r16 - ***************************************************************/ -#define ADC16(Reg) \ -{ \ - UINT32 res = HLD + Z80.Reg.d + (F & CF); \ - WZ = HL + 1; \ - F = (((HLD ^ res ^ Z80.Reg.d) >> 8) & HF) | \ - ((res >> 16) & CF) | \ - ((res >> 8) & (SF | YF | XF)) | \ - ((res & 0xffff) ? 0 : ZF) | \ - (((Z80.Reg.d ^ HLD ^ 0x8000) & (Z80.Reg.d ^ res) & 0x8000) >> 13); \ - HL = (UINT16)res; \ -} - -/*************************************************************** - * SBC r16,r16 - ***************************************************************/ -#define SBC16(Reg) \ -{ \ - UINT32 res = HLD - Z80.Reg.d - (F & CF); \ - WZ = HL + 1; \ - F = (((HLD ^ res ^ Z80.Reg.d) >> 8) & HF) | NF | \ - ((res >> 16) & CF) | \ - ((res >> 8) & (SF | YF | XF)) | \ - ((res & 0xffff) ? 0 : ZF) | \ - (((Z80.Reg.d ^ HLD) & (HLD ^ res) &0x8000) >> 13); \ - HL = (UINT16)res; \ -} - -/*************************************************************** - * RLC r8 - ***************************************************************/ -INLINE UINT8 RLC(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x80) ? CF : 0; - res = ((res << 1) | (res >> 7)) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * RRC r8 - ***************************************************************/ -INLINE UINT8 RRC(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x01) ? CF : 0; - res = ((res >> 1) | (res << 7)) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * RL r8 - ***************************************************************/ -INLINE UINT8 RL(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x80) ? CF : 0; - res = ((res << 1) | (F & CF)) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * RR r8 - ***************************************************************/ -INLINE UINT8 RR(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x01) ? CF : 0; - res = ((res >> 1) | (F << 7)) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * SLA r8 - ***************************************************************/ -INLINE UINT8 SLA(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x80) ? CF : 0; - res = (res << 1) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * SRA r8 - ***************************************************************/ -INLINE UINT8 SRA(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x01) ? CF : 0; - res = ((res >> 1) | (res & 0x80)) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * SLL r8 - ***************************************************************/ -INLINE UINT8 SLL(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x80) ? CF : 0; - res = ((res << 1) | 0x01) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * SRL r8 - ***************************************************************/ -INLINE UINT8 SRL(UINT8 value) -{ - unsigned res = value; - unsigned c = (res & 0x01) ? CF : 0; - res = (res >> 1) & 0xff; - F = SZP[res] | c; - return res; -} - -/*************************************************************** - * BIT bit,r8 - ***************************************************************/ -#undef BIT -#define BIT(bit,reg) \ - F = (F & CF) | HF | (SZ_BIT[reg & (1<>8) & (YF|XF)) - -/*************************************************************** - * RES bit,r8 - ***************************************************************/ -INLINE UINT8 RES(UINT8 bit, UINT8 value) -{ - return value & ~(1< flag 5 */ \ - if( (A + io) & 0x08 ) F |= XF; /* bit 3 -> flag 3 */ \ - HL++; DE++; BC--; \ - if( BC ) F |= VF; \ -} - -/*************************************************************** - * CPI - ***************************************************************/ -#define CPI { \ - UINT8 val = RM(HL); \ - UINT8 res = A - val; \ - WZ++; \ - HL++; BC--; \ - F = (F & CF) | (SZ[res]&~(YF|XF)) | ((A^val^res)&HF) | NF; \ - if( F & HF ) res -= 1; \ - if( res & 0x02 ) F |= YF; /* bit 1 -> flag 5 */ \ - if( res & 0x08 ) F |= XF; /* bit 3 -> flag 3 */ \ - if( BC ) F |= VF; \ -} - -/*************************************************************** - * INI - ***************************************************************/ -#define INI { \ - unsigned t; \ - UINT8 io = IN(BC); \ - WZ = BC + 1; \ - CC(ex,0xa2); \ - B--; \ - WM( HL, io ); \ - HL++; \ - F = SZ[B]; \ - t = (unsigned)((C + 1) & 0xff) + (unsigned)io; \ - if( io & SF ) F |= NF; \ - if( t & 0x100 ) F |= HF | CF; \ - F |= SZP[(UINT8)(t & 0x07) ^ B] & PF; \ -} - -/*************************************************************** - * OUTI - ***************************************************************/ -#define OUTI { \ - unsigned t; \ - UINT8 io = RM(HL); \ - B--; \ - WZ = BC + 1; \ - OUT( BC, io ); \ - HL++; \ - F = SZ[B]; \ - t = (unsigned)L + (unsigned)io; \ - if( io & SF ) F |= NF; \ - if( t & 0x100 ) F |= HF | CF; \ - F |= SZP[(UINT8)(t & 0x07) ^ B] & PF; \ -} - -/*************************************************************** - * LDD - ***************************************************************/ -#define LDD { \ - UINT8 io = RM(HL); \ - WM( DE, io ); \ - F &= SF | ZF | CF; \ - if( (A + io) & 0x02 ) F |= YF; /* bit 1 -> flag 5 */ \ - if( (A + io) & 0x08 ) F |= XF; /* bit 3 -> flag 3 */ \ - HL--; DE--; BC--; \ - if( BC ) F |= VF; \ -} - -/*************************************************************** - * CPD - ***************************************************************/ -#define CPD { \ - UINT8 val = RM(HL); \ - UINT8 res = A - val; \ - WZ--; \ - HL--; BC--; \ - F = (F & CF) | (SZ[res]&~(YF|XF)) | ((A^val^res)&HF) | NF; \ - if( F & HF ) res -= 1; \ - if( res & 0x02 ) F |= YF; /* bit 1 -> flag 5 */ \ - if( res & 0x08 ) F |= XF; /* bit 3 -> flag 3 */ \ - if( BC ) F |= VF; \ -} - -/*************************************************************** - * IND - ***************************************************************/ -#define IND { \ - unsigned t; \ - UINT8 io = IN(BC); \ - WZ = BC - 1; \ - CC(ex,0xaa); \ - B--; \ - WM( HL, io ); \ - HL--; \ - F = SZ[B]; \ - t = ((unsigned)(C - 1) & 0xff) + (unsigned)io; \ - if( io & SF ) F |= NF; \ - if( t & 0x100 ) F |= HF | CF; \ - F |= SZP[(UINT8)(t & 0x07) ^ B] & PF; \ -} - -/*************************************************************** - * OUTD - ***************************************************************/ -#define OUTD { \ - unsigned t; \ - UINT8 io = RM(HL); \ - B--; \ - WZ = BC - 1; \ - OUT( BC, io ); \ - HL--; \ - F = SZ[B]; \ - t = (unsigned)L + (unsigned)io; \ - if( io & SF ) F |= NF; \ - if( t & 0x100 ) F |= HF | CF; \ - F |= SZP[(UINT8)(t & 0x07) ^ B] & PF; \ -} - -/*************************************************************** - * LDIR - ***************************************************************/ -#define LDIR \ - LDI; \ - if( BC ) \ - { \ - PC -= 2; \ - WZ = PC + 1; \ - CC(ex,0xb0); \ - } - -/*************************************************************** - * CPIR - ***************************************************************/ -#define CPIR \ - CPI; \ - if( BC && !(F & ZF) ) \ - { \ - PC -= 2; \ - WZ = PC + 1; \ - CC(ex,0xb1); \ - } - -/*************************************************************** - * INIR - ***************************************************************/ -#define INIR \ - INI; \ - if( B ) \ - { \ - PC -= 2; \ - CC(ex,0xb2); \ - } - -/*************************************************************** - * OTIR - ***************************************************************/ -#define OTIR \ - OUTI; \ - if( B ) \ - { \ - PC -= 2; \ - CC(ex,0xb3); \ - } - -/*************************************************************** - * LDDR - ***************************************************************/ -#define LDDR \ - LDD; \ - if( BC ) \ - { \ - PC -= 2; \ - WZ = PC + 1; \ - CC(ex,0xb8); \ - } - -/*************************************************************** - * CPDR - ***************************************************************/ -#define CPDR \ - CPD; \ - if( BC && !(F & ZF) ) \ - { \ - PC -= 2; \ - WZ = PC + 1; \ - CC(ex,0xb9); \ - } - -/*************************************************************** - * INDR - ***************************************************************/ -#define INDR \ - IND; \ - if( B ) \ - { \ - PC -= 2; \ - CC(ex,0xba); \ - } - -/*************************************************************** - * OTDR - ***************************************************************/ -#define OTDR \ - OUTD; \ - if( B ) \ - { \ - PC -= 2; \ - CC(ex,0xbb); \ - } - -/*************************************************************** - * EI - ***************************************************************/ -#define EI { \ - IFF1 = IFF2 = 1; \ - Z80.after_ei = TRUE; \ -} - -/********************************************************** - * opcodes with CB prefix - * rotate, shift and bit operations - **********************************************************/ -OP(cb,00) { B = RLC(B); } /* RLC B */ -OP(cb,01) { C = RLC(C); } /* RLC C */ -OP(cb,02) { D = RLC(D); } /* RLC D */ -OP(cb,03) { E = RLC(E); } /* RLC E */ -OP(cb,04) { H = RLC(H); } /* RLC H */ -OP(cb,05) { L = RLC(L); } /* RLC L */ -OP(cb,06) { WM( HL, RLC(RM(HL)) ); } /* RLC (HL) */ -OP(cb,07) { A = RLC(A); } /* RLC A */ - -OP(cb,08) { B = RRC(B); } /* RRC B */ -OP(cb,09) { C = RRC(C); } /* RRC C */ -OP(cb,0a) { D = RRC(D); } /* RRC D */ -OP(cb,0b) { E = RRC(E); } /* RRC E */ -OP(cb,0c) { H = RRC(H); } /* RRC H */ -OP(cb,0d) { L = RRC(L); } /* RRC L */ -OP(cb,0e) { WM( HL, RRC(RM(HL)) ); } /* RRC (HL) */ -OP(cb,0f) { A = RRC(A); } /* RRC A */ - -OP(cb,10) { B = RL(B); } /* RL B */ -OP(cb,11) { C = RL(C); } /* RL C */ -OP(cb,12) { D = RL(D); } /* RL D */ -OP(cb,13) { E = RL(E); } /* RL E */ -OP(cb,14) { H = RL(H); } /* RL H */ -OP(cb,15) { L = RL(L); } /* RL L */ -OP(cb,16) { WM( HL, RL(RM(HL)) ); } /* RL (HL) */ -OP(cb,17) { A = RL(A); } /* RL A */ - -OP(cb,18) { B = RR(B); } /* RR B */ -OP(cb,19) { C = RR(C); } /* RR C */ -OP(cb,1a) { D = RR(D); } /* RR D */ -OP(cb,1b) { E = RR(E); } /* RR E */ -OP(cb,1c) { H = RR(H); } /* RR H */ -OP(cb,1d) { L = RR(L); } /* RR L */ -OP(cb,1e) { WM( HL, RR(RM(HL)) ); } /* RR (HL) */ -OP(cb,1f) { A = RR(A); } /* RR A */ - -OP(cb,20) { B = SLA(B); } /* SLA B */ -OP(cb,21) { C = SLA(C); } /* SLA C */ -OP(cb,22) { D = SLA(D); } /* SLA D */ -OP(cb,23) { E = SLA(E); } /* SLA E */ -OP(cb,24) { H = SLA(H); } /* SLA H */ -OP(cb,25) { L = SLA(L); } /* SLA L */ -OP(cb,26) { WM( HL, SLA(RM(HL)) ); } /* SLA (HL) */ -OP(cb,27) { A = SLA(A); } /* SLA A */ - -OP(cb,28) { B = SRA(B); } /* SRA B */ -OP(cb,29) { C = SRA(C); } /* SRA C */ -OP(cb,2a) { D = SRA(D); } /* SRA D */ -OP(cb,2b) { E = SRA(E); } /* SRA E */ -OP(cb,2c) { H = SRA(H); } /* SRA H */ -OP(cb,2d) { L = SRA(L); } /* SRA L */ -OP(cb,2e) { WM( HL, SRA(RM(HL)) ); } /* SRA (HL) */ -OP(cb,2f) { A = SRA(A); } /* SRA A */ - -OP(cb,30) { B = SLL(B); } /* SLL B */ -OP(cb,31) { C = SLL(C); } /* SLL C */ -OP(cb,32) { D = SLL(D); } /* SLL D */ -OP(cb,33) { E = SLL(E); } /* SLL E */ -OP(cb,34) { H = SLL(H); } /* SLL H */ -OP(cb,35) { L = SLL(L); } /* SLL L */ -OP(cb,36) { WM( HL, SLL(RM(HL)) ); } /* SLL (HL) */ -OP(cb,37) { A = SLL(A); } /* SLL A */ - -OP(cb,38) { B = SRL(B); } /* SRL B */ -OP(cb,39) { C = SRL(C); } /* SRL C */ -OP(cb,3a) { D = SRL(D); } /* SRL D */ -OP(cb,3b) { E = SRL(E); } /* SRL E */ -OP(cb,3c) { H = SRL(H); } /* SRL H */ -OP(cb,3d) { L = SRL(L); } /* SRL L */ -OP(cb,3e) { WM( HL, SRL(RM(HL)) ); } /* SRL (HL) */ -OP(cb,3f) { A = SRL(A); } /* SRL A */ - -OP(cb,40) { BIT(0,B); } /* BIT 0,B */ -OP(cb,41) { BIT(0,C); } /* BIT 0,C */ -OP(cb,42) { BIT(0,D); } /* BIT 0,D */ -OP(cb,43) { BIT(0,E); } /* BIT 0,E */ -OP(cb,44) { BIT(0,H); } /* BIT 0,H */ -OP(cb,45) { BIT(0,L); } /* BIT 0,L */ -OP(cb,46) { BIT_HL(0,RM(HL)); } /* BIT 0,(HL) */ -OP(cb,47) { BIT(0,A); } /* BIT 0,A */ - -OP(cb,48) { BIT(1,B); } /* BIT 1,B */ -OP(cb,49) { BIT(1,C); } /* BIT 1,C */ -OP(cb,4a) { BIT(1,D); } /* BIT 1,D */ -OP(cb,4b) { BIT(1,E); } /* BIT 1,E */ -OP(cb,4c) { BIT(1,H); } /* BIT 1,H */ -OP(cb,4d) { BIT(1,L); } /* BIT 1,L */ -OP(cb,4e) { BIT_HL(1,RM(HL)); } /* BIT 1,(HL) */ -OP(cb,4f) { BIT(1,A); } /* BIT 1,A */ - -OP(cb,50) { BIT(2,B); } /* BIT 2,B */ -OP(cb,51) { BIT(2,C); } /* BIT 2,C */ -OP(cb,52) { BIT(2,D); } /* BIT 2,D */ -OP(cb,53) { BIT(2,E); } /* BIT 2,E */ -OP(cb,54) { BIT(2,H); } /* BIT 2,H */ -OP(cb,55) { BIT(2,L); } /* BIT 2,L */ -OP(cb,56) { BIT_HL(2,RM(HL)); } /* BIT 2,(HL) */ -OP(cb,57) { BIT(2,A); } /* BIT 2,A */ - -OP(cb,58) { BIT(3,B); } /* BIT 3,B */ -OP(cb,59) { BIT(3,C); } /* BIT 3,C */ -OP(cb,5a) { BIT(3,D); } /* BIT 3,D */ -OP(cb,5b) { BIT(3,E); } /* BIT 3,E */ -OP(cb,5c) { BIT(3,H); } /* BIT 3,H */ -OP(cb,5d) { BIT(3,L); } /* BIT 3,L */ -OP(cb,5e) { BIT_HL(3,RM(HL)); } /* BIT 3,(HL) */ -OP(cb,5f) { BIT(3,A); } /* BIT 3,A */ - -OP(cb,60) { BIT(4,B); } /* BIT 4,B */ -OP(cb,61) { BIT(4,C); } /* BIT 4,C */ -OP(cb,62) { BIT(4,D); } /* BIT 4,D */ -OP(cb,63) { BIT(4,E); } /* BIT 4,E */ -OP(cb,64) { BIT(4,H); } /* BIT 4,H */ -OP(cb,65) { BIT(4,L); } /* BIT 4,L */ -OP(cb,66) { BIT_HL(4,RM(HL)); } /* BIT 4,(HL) */ -OP(cb,67) { BIT(4,A); } /* BIT 4,A */ - -OP(cb,68) { BIT(5,B); } /* BIT 5,B */ -OP(cb,69) { BIT(5,C); } /* BIT 5,C */ -OP(cb,6a) { BIT(5,D); } /* BIT 5,D */ -OP(cb,6b) { BIT(5,E); } /* BIT 5,E */ -OP(cb,6c) { BIT(5,H); } /* BIT 5,H */ -OP(cb,6d) { BIT(5,L); } /* BIT 5,L */ -OP(cb,6e) { BIT_HL(5,RM(HL)); } /* BIT 5,(HL) */ -OP(cb,6f) { BIT(5,A); } /* BIT 5,A */ - -OP(cb,70) { BIT(6,B); } /* BIT 6,B */ -OP(cb,71) { BIT(6,C); } /* BIT 6,C */ -OP(cb,72) { BIT(6,D); } /* BIT 6,D */ -OP(cb,73) { BIT(6,E); } /* BIT 6,E */ -OP(cb,74) { BIT(6,H); } /* BIT 6,H */ -OP(cb,75) { BIT(6,L); } /* BIT 6,L */ -OP(cb,76) { BIT_HL(6,RM(HL)); } /* BIT 6,(HL) */ -OP(cb,77) { BIT(6,A); } /* BIT 6,A */ - -OP(cb,78) { BIT(7,B); } /* BIT 7,B */ -OP(cb,79) { BIT(7,C); } /* BIT 7,C */ -OP(cb,7a) { BIT(7,D); } /* BIT 7,D */ -OP(cb,7b) { BIT(7,E); } /* BIT 7,E */ -OP(cb,7c) { BIT(7,H); } /* BIT 7,H */ -OP(cb,7d) { BIT(7,L); } /* BIT 7,L */ -OP(cb,7e) { BIT_HL(7,RM(HL)); } /* BIT 7,(HL) */ -OP(cb,7f) { BIT(7,A); } /* BIT 7,A */ - -OP(cb,80) { B = RES(0,B); } /* RES 0,B */ -OP(cb,81) { C = RES(0,C); } /* RES 0,C */ -OP(cb,82) { D = RES(0,D); } /* RES 0,D */ -OP(cb,83) { E = RES(0,E); } /* RES 0,E */ -OP(cb,84) { H = RES(0,H); } /* RES 0,H */ -OP(cb,85) { L = RES(0,L); } /* RES 0,L */ -OP(cb,86) { WM( HL, RES(0,RM(HL)) ); } /* RES 0,(HL) */ -OP(cb,87) { A = RES(0,A); } /* RES 0,A */ - -OP(cb,88) { B = RES(1,B); } /* RES 1,B */ -OP(cb,89) { C = RES(1,C); } /* RES 1,C */ -OP(cb,8a) { D = RES(1,D); } /* RES 1,D */ -OP(cb,8b) { E = RES(1,E); } /* RES 1,E */ -OP(cb,8c) { H = RES(1,H); } /* RES 1,H */ -OP(cb,8d) { L = RES(1,L); } /* RES 1,L */ -OP(cb,8e) { WM( HL, RES(1,RM(HL)) ); } /* RES 1,(HL) */ -OP(cb,8f) { A = RES(1,A); } /* RES 1,A */ - -OP(cb,90) { B = RES(2,B); } /* RES 2,B */ -OP(cb,91) { C = RES(2,C); } /* RES 2,C */ -OP(cb,92) { D = RES(2,D); } /* RES 2,D */ -OP(cb,93) { E = RES(2,E); } /* RES 2,E */ -OP(cb,94) { H = RES(2,H); } /* RES 2,H */ -OP(cb,95) { L = RES(2,L); } /* RES 2,L */ -OP(cb,96) { WM( HL, RES(2,RM(HL)) ); } /* RES 2,(HL) */ -OP(cb,97) { A = RES(2,A); } /* RES 2,A */ - -OP(cb,98) { B = RES(3,B); } /* RES 3,B */ -OP(cb,99) { C = RES(3,C); } /* RES 3,C */ -OP(cb,9a) { D = RES(3,D); } /* RES 3,D */ -OP(cb,9b) { E = RES(3,E); } /* RES 3,E */ -OP(cb,9c) { H = RES(3,H); } /* RES 3,H */ -OP(cb,9d) { L = RES(3,L); } /* RES 3,L */ -OP(cb,9e) { WM( HL, RES(3,RM(HL)) ); } /* RES 3,(HL) */ -OP(cb,9f) { A = RES(3,A); } /* RES 3,A */ - -OP(cb,a0) { B = RES(4,B); } /* RES 4,B */ -OP(cb,a1) { C = RES(4,C); } /* RES 4,C */ -OP(cb,a2) { D = RES(4,D); } /* RES 4,D */ -OP(cb,a3) { E = RES(4,E); } /* RES 4,E */ -OP(cb,a4) { H = RES(4,H); } /* RES 4,H */ -OP(cb,a5) { L = RES(4,L); } /* RES 4,L */ -OP(cb,a6) { WM( HL, RES(4,RM(HL)) ); } /* RES 4,(HL) */ -OP(cb,a7) { A = RES(4,A); } /* RES 4,A */ - -OP(cb,a8) { B = RES(5,B); } /* RES 5,B */ -OP(cb,a9) { C = RES(5,C); } /* RES 5,C */ -OP(cb,aa) { D = RES(5,D); } /* RES 5,D */ -OP(cb,ab) { E = RES(5,E); } /* RES 5,E */ -OP(cb,ac) { H = RES(5,H); } /* RES 5,H */ -OP(cb,ad) { L = RES(5,L); } /* RES 5,L */ -OP(cb,ae) { WM( HL, RES(5,RM(HL)) ); } /* RES 5,(HL) */ -OP(cb,af) { A = RES(5,A); } /* RES 5,A */ - -OP(cb,b0) { B = RES(6,B); } /* RES 6,B */ -OP(cb,b1) { C = RES(6,C); } /* RES 6,C */ -OP(cb,b2) { D = RES(6,D); } /* RES 6,D */ -OP(cb,b3) { E = RES(6,E); } /* RES 6,E */ -OP(cb,b4) { H = RES(6,H); } /* RES 6,H */ -OP(cb,b5) { L = RES(6,L); } /* RES 6,L */ -OP(cb,b6) { WM( HL, RES(6,RM(HL)) ); } /* RES 6,(HL) */ -OP(cb,b7) { A = RES(6,A); } /* RES 6,A */ - -OP(cb,b8) { B = RES(7,B); } /* RES 7,B */ -OP(cb,b9) { C = RES(7,C); } /* RES 7,C */ -OP(cb,ba) { D = RES(7,D); } /* RES 7,D */ -OP(cb,bb) { E = RES(7,E); } /* RES 7,E */ -OP(cb,bc) { H = RES(7,H); } /* RES 7,H */ -OP(cb,bd) { L = RES(7,L); } /* RES 7,L */ -OP(cb,be) { WM( HL, RES(7,RM(HL)) ); } /* RES 7,(HL) */ -OP(cb,bf) { A = RES(7,A); } /* RES 7,A */ - -OP(cb,c0) { B = SET(0,B); } /* SET 0,B */ -OP(cb,c1) { C = SET(0,C); } /* SET 0,C */ -OP(cb,c2) { D = SET(0,D); } /* SET 0,D */ -OP(cb,c3) { E = SET(0,E); } /* SET 0,E */ -OP(cb,c4) { H = SET(0,H); } /* SET 0,H */ -OP(cb,c5) { L = SET(0,L); } /* SET 0,L */ -OP(cb,c6) { WM( HL, SET(0,RM(HL)) ); } /* SET 0,(HL) */ -OP(cb,c7) { A = SET(0,A); } /* SET 0,A */ - -OP(cb,c8) { B = SET(1,B); } /* SET 1,B */ -OP(cb,c9) { C = SET(1,C); } /* SET 1,C */ -OP(cb,ca) { D = SET(1,D); } /* SET 1,D */ -OP(cb,cb) { E = SET(1,E); } /* SET 1,E */ -OP(cb,cc) { H = SET(1,H); } /* SET 1,H */ -OP(cb,cd) { L = SET(1,L); } /* SET 1,L */ -OP(cb,ce) { WM( HL, SET(1,RM(HL)) ); } /* SET 1,(HL) */ -OP(cb,cf) { A = SET(1,A); } /* SET 1,A */ - -OP(cb,d0) { B = SET(2,B); } /* SET 2,B */ -OP(cb,d1) { C = SET(2,C); } /* SET 2,C */ -OP(cb,d2) { D = SET(2,D); } /* SET 2,D */ -OP(cb,d3) { E = SET(2,E); } /* SET 2,E */ -OP(cb,d4) { H = SET(2,H); } /* SET 2,H */ -OP(cb,d5) { L = SET(2,L); } /* SET 2,L */ -OP(cb,d6) { WM( HL, SET(2,RM(HL)) ); } /* SET 2,(HL) */ -OP(cb,d7) { A = SET(2,A); } /* SET 2,A */ - -OP(cb,d8) { B = SET(3,B); } /* SET 3,B */ -OP(cb,d9) { C = SET(3,C); } /* SET 3,C */ -OP(cb,da) { D = SET(3,D); } /* SET 3,D */ -OP(cb,db) { E = SET(3,E); } /* SET 3,E */ -OP(cb,dc) { H = SET(3,H); } /* SET 3,H */ -OP(cb,dd) { L = SET(3,L); } /* SET 3,L */ -OP(cb,de) { WM( HL, SET(3,RM(HL)) ); } /* SET 3,(HL) */ -OP(cb,df) { A = SET(3,A); } /* SET 3,A */ - -OP(cb,e0) { B = SET(4,B); } /* SET 4,B */ -OP(cb,e1) { C = SET(4,C); } /* SET 4,C */ -OP(cb,e2) { D = SET(4,D); } /* SET 4,D */ -OP(cb,e3) { E = SET(4,E); } /* SET 4,E */ -OP(cb,e4) { H = SET(4,H); } /* SET 4,H */ -OP(cb,e5) { L = SET(4,L); } /* SET 4,L */ -OP(cb,e6) { WM( HL, SET(4,RM(HL)) ); } /* SET 4,(HL) */ -OP(cb,e7) { A = SET(4,A); } /* SET 4,A */ - -OP(cb,e8) { B = SET(5,B); } /* SET 5,B */ -OP(cb,e9) { C = SET(5,C); } /* SET 5,C */ -OP(cb,ea) { D = SET(5,D); } /* SET 5,D */ -OP(cb,eb) { E = SET(5,E); } /* SET 5,E */ -OP(cb,ec) { H = SET(5,H); } /* SET 5,H */ -OP(cb,ed) { L = SET(5,L); } /* SET 5,L */ -OP(cb,ee) { WM( HL, SET(5,RM(HL)) ); } /* SET 5,(HL) */ -OP(cb,ef) { A = SET(5,A); } /* SET 5,A */ - -OP(cb,f0) { B = SET(6,B); } /* SET 6,B */ -OP(cb,f1) { C = SET(6,C); } /* SET 6,C */ -OP(cb,f2) { D = SET(6,D); } /* SET 6,D */ -OP(cb,f3) { E = SET(6,E); } /* SET 6,E */ -OP(cb,f4) { H = SET(6,H); } /* SET 6,H */ -OP(cb,f5) { L = SET(6,L); } /* SET 6,L */ -OP(cb,f6) { WM( HL, SET(6,RM(HL)) ); } /* SET 6,(HL) */ -OP(cb,f7) { A = SET(6,A); } /* SET 6,A */ - -OP(cb,f8) { B = SET(7,B); } /* SET 7,B */ -OP(cb,f9) { C = SET(7,C); } /* SET 7,C */ -OP(cb,fa) { D = SET(7,D); } /* SET 7,D */ -OP(cb,fb) { E = SET(7,E); } /* SET 7,E */ -OP(cb,fc) { H = SET(7,H); } /* SET 7,H */ -OP(cb,fd) { L = SET(7,L); } /* SET 7,L */ -OP(cb,fe) { WM( HL, SET(7,RM(HL)) ); } /* SET 7,(HL) */ -OP(cb,ff) { A = SET(7,A); } /* SET 7,A */ - - -/********************************************************** -* opcodes with DD/FD CB prefix -* rotate, shift and bit operations with (IX+o) -**********************************************************/ -OP(xycb,00) { B = RLC( RM(EA) ); WM( EA,B ); } /* RLC B=(XY+o) */ -OP(xycb,01) { C = RLC( RM(EA) ); WM( EA,C ); } /* RLC C=(XY+o) */ -OP(xycb,02) { D = RLC( RM(EA) ); WM( EA,D ); } /* RLC D=(XY+o) */ -OP(xycb,03) { E = RLC( RM(EA) ); WM( EA,E ); } /* RLC E=(XY+o) */ -OP(xycb,04) { H = RLC( RM(EA) ); WM( EA,H ); } /* RLC H=(XY+o) */ -OP(xycb,05) { L = RLC( RM(EA) ); WM( EA,L ); } /* RLC L=(XY+o) */ -OP(xycb,06) { WM( EA, RLC( RM(EA) ) ); } /* RLC (XY+o) */ -OP(xycb,07) { A = RLC( RM(EA) ); WM( EA,A ); } /* RLC A=(XY+o) */ - -OP(xycb,08) { B = RRC( RM(EA) ); WM( EA,B ); } /* RRC B=(XY+o) */ -OP(xycb,09) { C = RRC( RM(EA) ); WM( EA,C ); } /* RRC C=(XY+o) */ -OP(xycb,0a) { D = RRC( RM(EA) ); WM( EA,D ); } /* RRC D=(XY+o) */ -OP(xycb,0b) { E = RRC( RM(EA) ); WM( EA,E ); } /* RRC E=(XY+o) */ -OP(xycb,0c) { H = RRC( RM(EA) ); WM( EA,H ); } /* RRC H=(XY+o) */ -OP(xycb,0d) { L = RRC( RM(EA) ); WM( EA,L ); } /* RRC L=(XY+o) */ -OP(xycb,0e) { WM( EA,RRC( RM(EA) ) ); } /* RRC (XY+o) */ -OP(xycb,0f) { A = RRC( RM(EA) ); WM( EA,A ); } /* RRC A=(XY+o) */ - -OP(xycb,10) { B = RL( RM(EA) ); WM( EA,B ); } /* RL B=(XY+o) */ -OP(xycb,11) { C = RL( RM(EA) ); WM( EA,C ); } /* RL C=(XY+o) */ -OP(xycb,12) { D = RL( RM(EA) ); WM( EA,D ); } /* RL D=(XY+o) */ -OP(xycb,13) { E = RL( RM(EA) ); WM( EA,E ); } /* RL E=(XY+o) */ -OP(xycb,14) { H = RL( RM(EA) ); WM( EA,H ); } /* RL H=(XY+o) */ -OP(xycb,15) { L = RL( RM(EA) ); WM( EA,L ); } /* RL L=(XY+o) */ -OP(xycb,16) { WM( EA,RL( RM(EA) ) ); } /* RL (XY+o) */ -OP(xycb,17) { A = RL( RM(EA) ); WM( EA,A ); } /* RL A=(XY+o) */ - -OP(xycb,18) { B = RR( RM(EA) ); WM( EA,B ); } /* RR B=(XY+o) */ -OP(xycb,19) { C = RR( RM(EA) ); WM( EA,C ); } /* RR C=(XY+o) */ -OP(xycb,1a) { D = RR( RM(EA) ); WM( EA,D ); } /* RR D=(XY+o) */ -OP(xycb,1b) { E = RR( RM(EA) ); WM( EA,E ); } /* RR E=(XY+o) */ -OP(xycb,1c) { H = RR( RM(EA) ); WM( EA,H ); } /* RR H=(XY+o) */ -OP(xycb,1d) { L = RR( RM(EA) ); WM( EA,L ); } /* RR L=(XY+o) */ -OP(xycb,1e) { WM( EA,RR( RM(EA) ) ); } /* RR (XY+o) */ -OP(xycb,1f) { A = RR( RM(EA) ); WM( EA,A ); } /* RR A=(XY+o) */ - -OP(xycb,20) { B = SLA( RM(EA) ); WM( EA,B ); } /* SLA B=(XY+o) */ -OP(xycb,21) { C = SLA( RM(EA) ); WM( EA,C ); } /* SLA C=(XY+o) */ -OP(xycb,22) { D = SLA( RM(EA) ); WM( EA,D ); } /* SLA D=(XY+o) */ -OP(xycb,23) { E = SLA( RM(EA) ); WM( EA,E ); } /* SLA E=(XY+o) */ -OP(xycb,24) { H = SLA( RM(EA) ); WM( EA,H ); } /* SLA H=(XY+o) */ -OP(xycb,25) { L = SLA( RM(EA) ); WM( EA,L ); } /* SLA L=(XY+o) */ -OP(xycb,26) { WM( EA,SLA( RM(EA) ) ); } /* SLA (XY+o) */ -OP(xycb,27) { A = SLA( RM(EA) ); WM( EA,A ); } /* SLA A=(XY+o) */ - -OP(xycb,28) { B = SRA( RM(EA) ); WM( EA,B ); } /* SRA B=(XY+o) */ -OP(xycb,29) { C = SRA( RM(EA) ); WM( EA,C ); } /* SRA C=(XY+o) */ -OP(xycb,2a) { D = SRA( RM(EA) ); WM( EA,D ); } /* SRA D=(XY+o) */ -OP(xycb,2b) { E = SRA( RM(EA) ); WM( EA,E ); } /* SRA E=(XY+o) */ -OP(xycb,2c) { H = SRA( RM(EA) ); WM( EA,H ); } /* SRA H=(XY+o) */ -OP(xycb,2d) { L = SRA( RM(EA) ); WM( EA,L ); } /* SRA L=(XY+o) */ -OP(xycb,2e) { WM( EA,SRA( RM(EA) ) ); } /* SRA (XY+o) */ -OP(xycb,2f) { A = SRA( RM(EA) ); WM( EA,A ); } /* SRA A=(XY+o) */ - -OP(xycb,30) { B = SLL( RM(EA) ); WM( EA,B ); } /* SLL B=(XY+o) */ -OP(xycb,31) { C = SLL( RM(EA) ); WM( EA,C ); } /* SLL C=(XY+o) */ -OP(xycb,32) { D = SLL( RM(EA) ); WM( EA,D ); } /* SLL D=(XY+o) */ -OP(xycb,33) { E = SLL( RM(EA) ); WM( EA,E ); } /* SLL E=(XY+o) */ -OP(xycb,34) { H = SLL( RM(EA) ); WM( EA,H ); } /* SLL H=(XY+o) */ -OP(xycb,35) { L = SLL( RM(EA) ); WM( EA,L ); } /* SLL L=(XY+o) */ -OP(xycb,36) { WM( EA,SLL( RM(EA) ) ); } /* SLL (XY+o) */ -OP(xycb,37) { A = SLL( RM(EA) ); WM( EA,A ); } /* SLL A=(XY+o) */ - -OP(xycb,38) { B = SRL( RM(EA) ); WM( EA,B ); } /* SRL B=(XY+o) */ -OP(xycb,39) { C = SRL( RM(EA) ); WM( EA,C ); } /* SRL C=(XY+o) */ -OP(xycb,3a) { D = SRL( RM(EA) ); WM( EA,D ); } /* SRL D=(XY+o) */ -OP(xycb,3b) { E = SRL( RM(EA) ); WM( EA,E ); } /* SRL E=(XY+o) */ -OP(xycb,3c) { H = SRL( RM(EA) ); WM( EA,H ); } /* SRL H=(XY+o) */ -OP(xycb,3d) { L = SRL( RM(EA) ); WM( EA,L ); } /* SRL L=(XY+o) */ -OP(xycb,3e) { WM( EA,SRL( RM(EA) ) ); } /* SRL (XY+o) */ -OP(xycb,3f) { A = SRL( RM(EA) ); WM( EA,A ); } /* SRL A=(XY+o) */ - -OP(xycb,40) { xycb_46(); } /* BIT 0,(XY+o) */ -OP(xycb,41) { xycb_46(); } /* BIT 0,(XY+o) */ -OP(xycb,42) { xycb_46(); } /* BIT 0,(XY+o) */ -OP(xycb,43) { xycb_46(); } /* BIT 0,(XY+o) */ -OP(xycb,44) { xycb_46(); } /* BIT 0,(XY+o) */ -OP(xycb,45) { xycb_46(); } /* BIT 0,(XY+o) */ -OP(xycb,46) { BIT_XY(0,RM(EA)); } /* BIT 0,(XY+o) */ -OP(xycb,47) { xycb_46(); } /* BIT 0,(XY+o) */ - -OP(xycb,48) { xycb_4e(); } /* BIT 1,(XY+o) */ -OP(xycb,49) { xycb_4e(); } /* BIT 1,(XY+o) */ -OP(xycb,4a) { xycb_4e(); } /* BIT 1,(XY+o) */ -OP(xycb,4b) { xycb_4e(); } /* BIT 1,(XY+o) */ -OP(xycb,4c) { xycb_4e(); } /* BIT 1,(XY+o) */ -OP(xycb,4d) { xycb_4e(); } /* BIT 1,(XY+o) */ -OP(xycb,4e) { BIT_XY(1,RM(EA)); } /* BIT 1,(XY+o) */ -OP(xycb,4f) { xycb_4e(); } /* BIT 1,(XY+o) */ - -OP(xycb,50) { xycb_56(); } /* BIT 2,(XY+o) */ -OP(xycb,51) { xycb_56(); } /* BIT 2,(XY+o) */ -OP(xycb,52) { xycb_56(); } /* BIT 2,(XY+o) */ -OP(xycb,53) { xycb_56(); } /* BIT 2,(XY+o) */ -OP(xycb,54) { xycb_56(); } /* BIT 2,(XY+o) */ -OP(xycb,55) { xycb_56(); } /* BIT 2,(XY+o) */ -OP(xycb,56) { BIT_XY(2,RM(EA)); } /* BIT 2,(XY+o) */ -OP(xycb,57) { xycb_56(); } /* BIT 2,(XY+o) */ - -OP(xycb,58) { xycb_5e(); } /* BIT 3,(XY+o) */ -OP(xycb,59) { xycb_5e(); } /* BIT 3,(XY+o) */ -OP(xycb,5a) { xycb_5e(); } /* BIT 3,(XY+o) */ -OP(xycb,5b) { xycb_5e(); } /* BIT 3,(XY+o) */ -OP(xycb,5c) { xycb_5e(); } /* BIT 3,(XY+o) */ -OP(xycb,5d) { xycb_5e(); } /* BIT 3,(XY+o) */ -OP(xycb,5e) { BIT_XY(3,RM(EA)); } /* BIT 3,(XY+o) */ -OP(xycb,5f) { xycb_5e(); } /* BIT 3,(XY+o) */ - -OP(xycb,60) { xycb_66(); } /* BIT 4,(XY+o) */ -OP(xycb,61) { xycb_66(); } /* BIT 4,(XY+o) */ -OP(xycb,62) { xycb_66(); } /* BIT 4,(XY+o) */ -OP(xycb,63) { xycb_66(); } /* BIT 4,(XY+o) */ -OP(xycb,64) { xycb_66(); } /* BIT 4,(XY+o) */ -OP(xycb,65) { xycb_66(); } /* BIT 4,(XY+o) */ -OP(xycb,66) { BIT_XY(4,RM(EA)); } /* BIT 4,(XY+o) */ -OP(xycb,67) { xycb_66(); } /* BIT 4,(XY+o) */ - -OP(xycb,68) { xycb_6e(); } /* BIT 5,(XY+o) */ -OP(xycb,69) { xycb_6e(); } /* BIT 5,(XY+o) */ -OP(xycb,6a) { xycb_6e(); } /* BIT 5,(XY+o) */ -OP(xycb,6b) { xycb_6e(); } /* BIT 5,(XY+o) */ -OP(xycb,6c) { xycb_6e(); } /* BIT 5,(XY+o) */ -OP(xycb,6d) { xycb_6e(); } /* BIT 5,(XY+o) */ -OP(xycb,6e) { BIT_XY(5,RM(EA)); } /* BIT 5,(XY+o) */ -OP(xycb,6f) { xycb_6e(); } /* BIT 5,(XY+o) */ - -OP(xycb,70) { xycb_76(); } /* BIT 6,(XY+o) */ -OP(xycb,71) { xycb_76(); } /* BIT 6,(XY+o) */ -OP(xycb,72) { xycb_76(); } /* BIT 6,(XY+o) */ -OP(xycb,73) { xycb_76(); } /* BIT 6,(XY+o) */ -OP(xycb,74) { xycb_76(); } /* BIT 6,(XY+o) */ -OP(xycb,75) { xycb_76(); } /* BIT 6,(XY+o) */ -OP(xycb,76) { BIT_XY(6,RM(EA)); } /* BIT 6,(XY+o) */ -OP(xycb,77) { xycb_76(); } /* BIT 6,(XY+o) */ - -OP(xycb,78) { xycb_7e(); } /* BIT 7,(XY+o) */ -OP(xycb,79) { xycb_7e(); } /* BIT 7,(XY+o) */ -OP(xycb,7a) { xycb_7e(); } /* BIT 7,(XY+o) */ -OP(xycb,7b) { xycb_7e(); } /* BIT 7,(XY+o) */ -OP(xycb,7c) { xycb_7e(); } /* BIT 7,(XY+o) */ -OP(xycb,7d) { xycb_7e(); } /* BIT 7,(XY+o) */ -OP(xycb,7e) { BIT_XY(7,RM(EA)); } /* BIT 7,(XY+o) */ -OP(xycb,7f) { xycb_7e(); } /* BIT 7,(XY+o) */ - -OP(xycb,80) { B = RES(0, RM(EA) ); WM( EA,B ); } /* RES 0,B=(XY+o) */ -OP(xycb,81) { C = RES(0, RM(EA) ); WM( EA,C ); } /* RES 0,C=(XY+o) */ -OP(xycb,82) { D = RES(0, RM(EA) ); WM( EA,D ); } /* RES 0,D=(XY+o) */ -OP(xycb,83) { E = RES(0, RM(EA) ); WM( EA,E ); } /* RES 0,E=(XY+o) */ -OP(xycb,84) { H = RES(0, RM(EA) ); WM( EA,H ); } /* RES 0,H=(XY+o) */ -OP(xycb,85) { L = RES(0, RM(EA) ); WM( EA,L ); } /* RES 0,L=(XY+o) */ -OP(xycb,86) { WM( EA, RES(0,RM(EA)) ); } /* RES 0,(XY+o) */ -OP(xycb,87) { A = RES(0, RM(EA) ); WM( EA,A ); } /* RES 0,A=(XY+o) */ - -OP(xycb,88) { B = RES(1, RM(EA) ); WM( EA,B ); } /* RES 1,B=(XY+o) */ -OP(xycb,89) { C = RES(1, RM(EA) ); WM( EA,C ); } /* RES 1,C=(XY+o) */ -OP(xycb,8a) { D = RES(1, RM(EA) ); WM( EA,D ); } /* RES 1,D=(XY+o) */ -OP(xycb,8b) { E = RES(1, RM(EA) ); WM( EA,E ); } /* RES 1,E=(XY+o) */ -OP(xycb,8c) { H = RES(1, RM(EA) ); WM( EA,H ); } /* RES 1,H=(XY+o) */ -OP(xycb,8d) { L = RES(1, RM(EA) ); WM( EA,L ); } /* RES 1,L=(XY+o) */ -OP(xycb,8e) { WM( EA, RES(1,RM(EA)) ); } /* RES 1,(XY+o) */ -OP(xycb,8f) { A = RES(1, RM(EA) ); WM( EA,A ); } /* RES 1,A=(XY+o) */ - -OP(xycb,90) { B = RES(2, RM(EA) ); WM( EA,B ); } /* RES 2,B=(XY+o) */ -OP(xycb,91) { C = RES(2, RM(EA) ); WM( EA,C ); } /* RES 2,C=(XY+o) */ -OP(xycb,92) { D = RES(2, RM(EA) ); WM( EA,D ); } /* RES 2,D=(XY+o) */ -OP(xycb,93) { E = RES(2, RM(EA) ); WM( EA,E ); } /* RES 2,E=(XY+o) */ -OP(xycb,94) { H = RES(2, RM(EA) ); WM( EA,H ); } /* RES 2,H=(XY+o) */ -OP(xycb,95) { L = RES(2, RM(EA) ); WM( EA,L ); } /* RES 2,L=(XY+o) */ -OP(xycb,96) { WM( EA, RES(2,RM(EA)) ); } /* RES 2,(XY+o) */ -OP(xycb,97) { A = RES(2, RM(EA) ); WM( EA,A ); } /* RES 2,A=(XY+o) */ - -OP(xycb,98) { B = RES(3, RM(EA) ); WM( EA,B ); } /* RES 3,B=(XY+o) */ -OP(xycb,99) { C = RES(3, RM(EA) ); WM( EA,C ); } /* RES 3,C=(XY+o) */ -OP(xycb,9a) { D = RES(3, RM(EA) ); WM( EA,D ); } /* RES 3,D=(XY+o) */ -OP(xycb,9b) { E = RES(3, RM(EA) ); WM( EA,E ); } /* RES 3,E=(XY+o) */ -OP(xycb,9c) { H = RES(3, RM(EA) ); WM( EA,H ); } /* RES 3,H=(XY+o) */ -OP(xycb,9d) { L = RES(3, RM(EA) ); WM( EA,L ); } /* RES 3,L=(XY+o) */ -OP(xycb,9e) { WM( EA, RES(3,RM(EA)) ); } /* RES 3,(XY+o) */ -OP(xycb,9f) { A = RES(3, RM(EA) ); WM( EA,A ); } /* RES 3,A=(XY+o) */ - -OP(xycb,a0) { B = RES(4, RM(EA) ); WM( EA,B ); } /* RES 4,B=(XY+o) */ -OP(xycb,a1) { C = RES(4, RM(EA) ); WM( EA,C ); } /* RES 4,C=(XY+o) */ -OP(xycb,a2) { D = RES(4, RM(EA) ); WM( EA,D ); } /* RES 4,D=(XY+o) */ -OP(xycb,a3) { E = RES(4, RM(EA) ); WM( EA,E ); } /* RES 4,E=(XY+o) */ -OP(xycb,a4) { H = RES(4, RM(EA) ); WM( EA,H ); } /* RES 4,H=(XY+o) */ -OP(xycb,a5) { L = RES(4, RM(EA) ); WM( EA,L ); } /* RES 4,L=(XY+o) */ -OP(xycb,a6) { WM( EA, RES(4,RM(EA)) ); } /* RES 4,(XY+o) */ -OP(xycb,a7) { A = RES(4, RM(EA) ); WM( EA,A ); } /* RES 4,A=(XY+o) */ - -OP(xycb,a8) { B = RES(5, RM(EA) ); WM( EA,B ); } /* RES 5,B=(XY+o) */ -OP(xycb,a9) { C = RES(5, RM(EA) ); WM( EA,C ); } /* RES 5,C=(XY+o) */ -OP(xycb,aa) { D = RES(5, RM(EA) ); WM( EA,D ); } /* RES 5,D=(XY+o) */ -OP(xycb,ab) { E = RES(5, RM(EA) ); WM( EA,E ); } /* RES 5,E=(XY+o) */ -OP(xycb,ac) { H = RES(5, RM(EA) ); WM( EA,H ); } /* RES 5,H=(XY+o) */ -OP(xycb,ad) { L = RES(5, RM(EA) ); WM( EA,L ); } /* RES 5,L=(XY+o) */ -OP(xycb,ae) { WM( EA, RES(5,RM(EA)) ); } /* RES 5,(XY+o) */ -OP(xycb,af) { A = RES(5, RM(EA) ); WM( EA,A ); } /* RES 5,A=(XY+o) */ - -OP(xycb,b0) { B = RES(6, RM(EA) ); WM( EA,B ); } /* RES 6,B=(XY+o) */ -OP(xycb,b1) { C = RES(6, RM(EA) ); WM( EA,C ); } /* RES 6,C=(XY+o) */ -OP(xycb,b2) { D = RES(6, RM(EA) ); WM( EA,D ); } /* RES 6,D=(XY+o) */ -OP(xycb,b3) { E = RES(6, RM(EA) ); WM( EA,E ); } /* RES 6,E=(XY+o) */ -OP(xycb,b4) { H = RES(6, RM(EA) ); WM( EA,H ); } /* RES 6,H=(XY+o) */ -OP(xycb,b5) { L = RES(6, RM(EA) ); WM( EA,L ); } /* RES 6,L=(XY+o) */ -OP(xycb,b6) { WM( EA, RES(6,RM(EA)) ); } /* RES 6,(XY+o) */ -OP(xycb,b7) { A = RES(6, RM(EA) ); WM( EA,A ); } /* RES 6,A=(XY+o) */ - -OP(xycb,b8) { B = RES(7, RM(EA) ); WM( EA,B ); } /* RES 7,B=(XY+o) */ -OP(xycb,b9) { C = RES(7, RM(EA) ); WM( EA,C ); } /* RES 7,C=(XY+o) */ -OP(xycb,ba) { D = RES(7, RM(EA) ); WM( EA,D ); } /* RES 7,D=(XY+o) */ -OP(xycb,bb) { E = RES(7, RM(EA) ); WM( EA,E ); } /* RES 7,E=(XY+o) */ -OP(xycb,bc) { H = RES(7, RM(EA) ); WM( EA,H ); } /* RES 7,H=(XY+o) */ -OP(xycb,bd) { L = RES(7, RM(EA) ); WM( EA,L ); } /* RES 7,L=(XY+o) */ -OP(xycb,be) { WM( EA, RES(7,RM(EA)) ); } /* RES 7,(XY+o) */ -OP(xycb,bf) { A = RES(7, RM(EA) ); WM( EA,A ); } /* RES 7,A=(XY+o) */ - -OP(xycb,c0) { B = SET(0, RM(EA) ); WM( EA,B ); } /* SET 0,B=(XY+o) */ -OP(xycb,c1) { C = SET(0, RM(EA) ); WM( EA,C ); } /* SET 0,C=(XY+o) */ -OP(xycb,c2) { D = SET(0, RM(EA) ); WM( EA,D ); } /* SET 0,D=(XY+o) */ -OP(xycb,c3) { E = SET(0, RM(EA) ); WM( EA,E ); } /* SET 0,E=(XY+o) */ -OP(xycb,c4) { H = SET(0, RM(EA) ); WM( EA,H ); } /* SET 0,H=(XY+o) */ -OP(xycb,c5) { L = SET(0, RM(EA) ); WM( EA,L ); } /* SET 0,L=(XY+o) */ -OP(xycb,c6) { WM( EA, SET(0,RM(EA)) ); } /* SET 0,(XY+o) */ -OP(xycb,c7) { A = SET(0, RM(EA) ); WM( EA,A ); } /* SET 0,A=(XY+o) */ - -OP(xycb,c8) { B = SET(1, RM(EA) ); WM( EA,B ); } /* SET 1,B=(XY+o) */ -OP(xycb,c9) { C = SET(1, RM(EA) ); WM( EA,C ); } /* SET 1,C=(XY+o) */ -OP(xycb,ca) { D = SET(1, RM(EA) ); WM( EA,D ); } /* SET 1,D=(XY+o) */ -OP(xycb,cb) { E = SET(1, RM(EA) ); WM( EA,E ); } /* SET 1,E=(XY+o) */ -OP(xycb,cc) { H = SET(1, RM(EA) ); WM( EA,H ); } /* SET 1,H=(XY+o) */ -OP(xycb,cd) { L = SET(1, RM(EA) ); WM( EA,L ); } /* SET 1,L=(XY+o) */ -OP(xycb,ce) { WM( EA, SET(1,RM(EA)) ); } /* SET 1,(XY+o) */ -OP(xycb,cf) { A = SET(1, RM(EA) ); WM( EA,A ); } /* SET 1,A=(XY+o) */ - -OP(xycb,d0) { B = SET(2, RM(EA) ); WM( EA,B ); } /* SET 2,B=(XY+o) */ -OP(xycb,d1) { C = SET(2, RM(EA) ); WM( EA,C ); } /* SET 2,C=(XY+o) */ -OP(xycb,d2) { D = SET(2, RM(EA) ); WM( EA,D ); } /* SET 2,D=(XY+o) */ -OP(xycb,d3) { E = SET(2, RM(EA) ); WM( EA,E ); } /* SET 2,E=(XY+o) */ -OP(xycb,d4) { H = SET(2, RM(EA) ); WM( EA,H ); } /* SET 2,H=(XY+o) */ -OP(xycb,d5) { L = SET(2, RM(EA) ); WM( EA,L ); } /* SET 2,L=(XY+o) */ -OP(xycb,d6) { WM( EA, SET(2,RM(EA)) ); } /* SET 2,(XY+o) */ -OP(xycb,d7) { A = SET(2, RM(EA) ); WM( EA,A ); } /* SET 2,A=(XY+o) */ - -OP(xycb,d8) { B = SET(3, RM(EA) ); WM( EA,B ); } /* SET 3,B=(XY+o) */ -OP(xycb,d9) { C = SET(3, RM(EA) ); WM( EA,C ); } /* SET 3,C=(XY+o) */ -OP(xycb,da) { D = SET(3, RM(EA) ); WM( EA,D ); } /* SET 3,D=(XY+o) */ -OP(xycb,db) { E = SET(3, RM(EA) ); WM( EA,E ); } /* SET 3,E=(XY+o) */ -OP(xycb,dc) { H = SET(3, RM(EA) ); WM( EA,H ); } /* SET 3,H=(XY+o) */ -OP(xycb,dd) { L = SET(3, RM(EA) ); WM( EA,L ); } /* SET 3,L=(XY+o) */ -OP(xycb,de) { WM( EA, SET(3,RM(EA)) ); } /* SET 3,(XY+o) */ -OP(xycb,df) { A = SET(3, RM(EA) ); WM( EA,A ); } /* SET 3,A=(XY+o) */ - -OP(xycb,e0) { B = SET(4, RM(EA) ); WM( EA,B ); } /* SET 4,B=(XY+o) */ -OP(xycb,e1) { C = SET(4, RM(EA) ); WM( EA,C ); } /* SET 4,C=(XY+o) */ -OP(xycb,e2) { D = SET(4, RM(EA) ); WM( EA,D ); } /* SET 4,D=(XY+o) */ -OP(xycb,e3) { E = SET(4, RM(EA) ); WM( EA,E ); } /* SET 4,E=(XY+o) */ -OP(xycb,e4) { H = SET(4, RM(EA) ); WM( EA,H ); } /* SET 4,H=(XY+o) */ -OP(xycb,e5) { L = SET(4, RM(EA) ); WM( EA,L ); } /* SET 4,L=(XY+o) */ -OP(xycb,e6) { WM( EA, SET(4,RM(EA)) ); } /* SET 4,(XY+o) */ -OP(xycb,e7) { A = SET(4, RM(EA) ); WM( EA,A ); } /* SET 4,A=(XY+o) */ - -OP(xycb,e8) { B = SET(5, RM(EA) ); WM( EA,B ); } /* SET 5,B=(XY+o) */ -OP(xycb,e9) { C = SET(5, RM(EA) ); WM( EA,C ); } /* SET 5,C=(XY+o) */ -OP(xycb,ea) { D = SET(5, RM(EA) ); WM( EA,D ); } /* SET 5,D=(XY+o) */ -OP(xycb,eb) { E = SET(5, RM(EA) ); WM( EA,E ); } /* SET 5,E=(XY+o) */ -OP(xycb,ec) { H = SET(5, RM(EA) ); WM( EA,H ); } /* SET 5,H=(XY+o) */ -OP(xycb,ed) { L = SET(5, RM(EA) ); WM( EA,L ); } /* SET 5,L=(XY+o) */ -OP(xycb,ee) { WM( EA, SET(5,RM(EA)) ); } /* SET 5,(XY+o) */ -OP(xycb,ef) { A = SET(5, RM(EA) ); WM( EA,A ); } /* SET 5,A=(XY+o) */ - -OP(xycb,f0) { B = SET(6, RM(EA) ); WM( EA,B ); } /* SET 6,B=(XY+o) */ -OP(xycb,f1) { C = SET(6, RM(EA) ); WM( EA,C ); } /* SET 6,C=(XY+o) */ -OP(xycb,f2) { D = SET(6, RM(EA) ); WM( EA,D ); } /* SET 6,D=(XY+o) */ -OP(xycb,f3) { E = SET(6, RM(EA) ); WM( EA,E ); } /* SET 6,E=(XY+o) */ -OP(xycb,f4) { H = SET(6, RM(EA) ); WM( EA,H ); } /* SET 6,H=(XY+o) */ -OP(xycb,f5) { L = SET(6, RM(EA) ); WM( EA,L ); } /* SET 6,L=(XY+o) */ -OP(xycb,f6) { WM( EA, SET(6,RM(EA)) ); } /* SET 6,(XY+o) */ -OP(xycb,f7) { A = SET(6, RM(EA) ); WM( EA,A ); } /* SET 6,A=(XY+o) */ - -OP(xycb,f8) { B = SET(7, RM(EA) ); WM( EA,B ); } /* SET 7,B=(XY+o) */ -OP(xycb,f9) { C = SET(7, RM(EA) ); WM( EA,C ); } /* SET 7,C=(XY+o) */ -OP(xycb,fa) { D = SET(7, RM(EA) ); WM( EA,D ); } /* SET 7,D=(XY+o) */ -OP(xycb,fb) { E = SET(7, RM(EA) ); WM( EA,E ); } /* SET 7,E=(XY+o) */ -OP(xycb,fc) { H = SET(7, RM(EA) ); WM( EA,H ); } /* SET 7,H=(XY+o) */ -OP(xycb,fd) { L = SET(7, RM(EA) ); WM( EA,L ); } /* SET 7,L=(XY+o) */ -OP(xycb,fe) { WM( EA, SET(7,RM(EA)) ); } /* SET 7,(XY+o) */ -OP(xycb,ff) { A = SET(7, RM(EA) ); WM( EA,A ); } /* SET 7,A=(XY+o) */ - -OP(illegal,1) { -#if VERBOSE - logerror("Z80 #%d ill. opcode $%02x $%02x\n", - cpu_getactivecpu(), cpu_readop((PCD-1)&0xffff), cpu_readop(PCD)); -#endif -} -/********************************************************** - * IX register related opcodes (DD prefix) - **********************************************************/ -OP(dd,00) { illegal_1(); op_00(); } /* DB DD */ -OP(dd,01) { illegal_1(); op_01(); } /* DB DD */ -OP(dd,02) { illegal_1(); op_02(); } /* DB DD */ -OP(dd,03) { illegal_1(); op_03(); } /* DB DD */ -OP(dd,04) { illegal_1(); op_04(); } /* DB DD */ -OP(dd,05) { illegal_1(); op_05(); } /* DB DD */ -OP(dd,06) { illegal_1(); op_06(); } /* DB DD */ -OP(dd,07) { illegal_1(); op_07(); } /* DB DD */ - -OP(dd,08) { illegal_1(); op_08(); } /* DB DD */ -OP(dd,09) { ADD16(ix,bc); } /* ADD IX,BC */ -OP(dd,0a) { illegal_1(); op_0a(); } /* DB DD */ -OP(dd,0b) { illegal_1(); op_0b(); } /* DB DD */ -OP(dd,0c) { illegal_1(); op_0c(); } /* DB DD */ -OP(dd,0d) { illegal_1(); op_0d(); } /* DB DD */ -OP(dd,0e) { illegal_1(); op_0e(); } /* DB DD */ -OP(dd,0f) { illegal_1(); op_0f(); } /* DB DD */ - -OP(dd,10) { illegal_1(); op_10(); } /* DB DD */ -OP(dd,11) { illegal_1(); op_11(); } /* DB DD */ -OP(dd,12) { illegal_1(); op_12(); } /* DB DD */ -OP(dd,13) { illegal_1(); op_13(); } /* DB DD */ -OP(dd,14) { illegal_1(); op_14(); } /* DB DD */ -OP(dd,15) { illegal_1(); op_15(); } /* DB DD */ -OP(dd,16) { illegal_1(); op_16(); } /* DB DD */ -OP(dd,17) { illegal_1(); op_17(); } /* DB DD */ - -OP(dd,18) { illegal_1(); op_18(); } /* DB DD */ -OP(dd,19) { ADD16(ix,de); } /* ADD IX,DE */ -OP(dd,1a) { illegal_1(); op_1a(); } /* DB DD */ -OP(dd,1b) { illegal_1(); op_1b(); } /* DB DD */ -OP(dd,1c) { illegal_1(); op_1c(); } /* DB DD */ -OP(dd,1d) { illegal_1(); op_1d(); } /* DB DD */ -OP(dd,1e) { illegal_1(); op_1e(); } /* DB DD */ -OP(dd,1f) { illegal_1(); op_1f(); } /* DB DD */ - -OP(dd,20) { illegal_1(); op_20(); } /* DB DD */ -OP(dd,21) { IX = ARG16(); } /* LD IX,w */ -OP(dd,22) { EA = ARG16(); WM16( EA, &Z80.ix ); WZ = EA+1; } /* LD (w),IX */ -OP(dd,23) { IX++; } /* INC IX */ -OP(dd,24) { HX = INC(HX); } /* INC HX */ -OP(dd,25) { HX = DEC(HX); } /* DEC HX */ -OP(dd,26) { HX = ARG(); } /* LD HX,n */ -OP(dd,27) { illegal_1(); op_27(); } /* DB DD */ - -OP(dd,28) { illegal_1(); op_28(); } /* DB DD */ -OP(dd,29) { ADD16(ix,ix); } /* ADD IX,IX */ -OP(dd,2a) { EA = ARG16(); RM16( EA, &Z80.ix ); WZ = EA+1; } /* LD IX,(w) */ -OP(dd,2b) { IX--; } /* DEC IX */ -OP(dd,2c) { LX = INC(LX); } /* INC LX */ -OP(dd,2d) { LX = DEC(LX); } /* DEC LX */ -OP(dd,2e) { LX = ARG(); } /* LD LX,n */ -OP(dd,2f) { illegal_1(); op_2f(); } /* DB DD */ - -OP(dd,30) { illegal_1(); op_30(); } /* DB DD */ -OP(dd,31) { illegal_1(); op_31(); } /* DB DD */ -OP(dd,32) { illegal_1(); op_32(); } /* DB DD */ -OP(dd,33) { illegal_1(); op_33(); } /* DB DD */ -OP(dd,34) { EAX; WM( EA, INC(RM(EA)) ); } /* INC (IX+o) */ -OP(dd,35) { EAX; WM( EA, DEC(RM(EA)) ); } /* DEC (IX+o) */ -OP(dd,36) { EAX; WM( EA, ARG() ); } /* LD (IX+o),n */ -OP(dd,37) { illegal_1(); op_37(); } /* DB DD */ - -OP(dd,38) { illegal_1(); op_38(); } /* DB DD */ -OP(dd,39) { ADD16(ix,sp); } /* ADD IX,SP */ -OP(dd,3a) { illegal_1(); op_3a(); } /* DB DD */ -OP(dd,3b) { illegal_1(); op_3b(); } /* DB DD */ -OP(dd,3c) { illegal_1(); op_3c(); } /* DB DD */ -OP(dd,3d) { illegal_1(); op_3d(); } /* DB DD */ -OP(dd,3e) { illegal_1(); op_3e(); } /* DB DD */ -OP(dd,3f) { illegal_1(); op_3f(); } /* DB DD */ - -OP(dd,40) { illegal_1(); op_40(); } /* DB DD */ -OP(dd,41) { illegal_1(); op_41(); } /* DB DD */ -OP(dd,42) { illegal_1(); op_42(); } /* DB DD */ -OP(dd,43) { illegal_1(); op_43(); } /* DB DD */ -OP(dd,44) { B = HX; } /* LD B,HX */ -OP(dd,45) { B = LX; } /* LD B,LX */ -OP(dd,46) { EAX; B = RM(EA); } /* LD B,(IX+o) */ -OP(dd,47) { illegal_1(); op_47(); } /* DB DD */ - -OP(dd,48) { illegal_1(); op_48(); } /* DB DD */ -OP(dd,49) { illegal_1(); op_49(); } /* DB DD */ -OP(dd,4a) { illegal_1(); op_4a(); } /* DB DD */ -OP(dd,4b) { illegal_1(); op_4b(); } /* DB DD */ -OP(dd,4c) { C = HX; } /* LD C,HX */ -OP(dd,4d) { C = LX; } /* LD C,LX */ -OP(dd,4e) { EAX; C = RM(EA); } /* LD C,(IX+o) */ -OP(dd,4f) { illegal_1(); op_4f(); } /* DB DD */ - -OP(dd,50) { illegal_1(); op_50(); } /* DB DD */ -OP(dd,51) { illegal_1(); op_51(); } /* DB DD */ -OP(dd,52) { illegal_1(); op_52(); } /* DB DD */ -OP(dd,53) { illegal_1(); op_53(); } /* DB DD */ -OP(dd,54) { D = HX; } /* LD D,HX */ -OP(dd,55) { D = LX; } /* LD D,LX */ -OP(dd,56) { EAX; D = RM(EA); } /* LD D,(IX+o) */ -OP(dd,57) { illegal_1(); op_57(); } /* DB DD */ - -OP(dd,58) { illegal_1(); op_58(); } /* DB DD */ -OP(dd,59) { illegal_1(); op_59(); } /* DB DD */ -OP(dd,5a) { illegal_1(); op_5a(); } /* DB DD */ -OP(dd,5b) { illegal_1(); op_5b(); } /* DB DD */ -OP(dd,5c) { E = HX; } /* LD E,HX */ -OP(dd,5d) { E = LX; } /* LD E,LX */ -OP(dd,5e) { EAX; E = RM(EA); } /* LD E,(IX+o) */ -OP(dd,5f) { illegal_1(); op_5f(); } /* DB DD */ - -OP(dd,60) { HX = B; } /* LD HX,B */ -OP(dd,61) { HX = C; } /* LD HX,C */ -OP(dd,62) { HX = D; } /* LD HX,D */ -OP(dd,63) { HX = E; } /* LD HX,E */ -OP(dd,64) { } /* LD HX,HX */ -OP(dd,65) { HX = LX; } /* LD HX,LX */ -OP(dd,66) { EAX; H = RM(EA); } /* LD H,(IX+o) */ -OP(dd,67) { HX = A; } /* LD HX,A */ - -OP(dd,68) { LX = B; } /* LD LX,B */ -OP(dd,69) { LX = C; } /* LD LX,C */ -OP(dd,6a) { LX = D; } /* LD LX,D */ -OP(dd,6b) { LX = E; } /* LD LX,E */ -OP(dd,6c) { LX = HX; } /* LD LX,HX */ -OP(dd,6d) { } /* LD LX,LX */ -OP(dd,6e) { EAX; L = RM(EA); } /* LD L,(IX+o) */ -OP(dd,6f) { LX = A; } /* LD LX,A */ - -OP(dd,70) { EAX; WM( EA, B ); } /* LD (IX+o),B */ -OP(dd,71) { EAX; WM( EA, C ); } /* LD (IX+o),C */ -OP(dd,72) { EAX; WM( EA, D ); } /* LD (IX+o),D */ -OP(dd,73) { EAX; WM( EA, E ); } /* LD (IX+o),E */ -OP(dd,74) { EAX; WM( EA, H ); } /* LD (IX+o),H */ -OP(dd,75) { EAX; WM( EA, L ); } /* LD (IX+o),L */ -OP(dd,76) { illegal_1(); op_76(); } /* DB DD */ -OP(dd,77) { EAX; WM( EA, A ); } /* LD (IX+o),A */ - -OP(dd,78) { illegal_1(); op_78(); } /* DB DD */ -OP(dd,79) { illegal_1(); op_79(); } /* DB DD */ -OP(dd,7a) { illegal_1(); op_7a(); } /* DB DD */ -OP(dd,7b) { illegal_1(); op_7b(); } /* DB DD */ -OP(dd,7c) { A = HX; } /* LD A,HX */ -OP(dd,7d) { A = LX; } /* LD A,LX */ -OP(dd,7e) { EAX; A = RM(EA); } /* LD A,(IX+o) */ -OP(dd,7f) { illegal_1(); op_7f(); } /* DB DD */ - -OP(dd,80) { illegal_1(); op_80(); } /* DB DD */ -OP(dd,81) { illegal_1(); op_81(); } /* DB DD */ -OP(dd,82) { illegal_1(); op_82(); } /* DB DD */ -OP(dd,83) { illegal_1(); op_83(); } /* DB DD */ -OP(dd,84) { ADD(HX); } /* ADD A,HX */ -OP(dd,85) { ADD(LX); } /* ADD A,LX */ -OP(dd,86) { EAX; ADD(RM(EA)); } /* ADD A,(IX+o) */ -OP(dd,87) { illegal_1(); op_87(); } /* DB DD */ - -OP(dd,88) { illegal_1(); op_88(); } /* DB DD */ -OP(dd,89) { illegal_1(); op_89(); } /* DB DD */ -OP(dd,8a) { illegal_1(); op_8a(); } /* DB DD */ -OP(dd,8b) { illegal_1(); op_8b(); } /* DB DD */ -OP(dd,8c) { ADC(HX); } /* ADC A,HX */ -OP(dd,8d) { ADC(LX); } /* ADC A,LX */ -OP(dd,8e) { EAX; ADC(RM(EA)); } /* ADC A,(IX+o) */ -OP(dd,8f) { illegal_1(); op_8f(); } /* DB DD */ - -OP(dd,90) { illegal_1(); op_90(); } /* DB DD */ -OP(dd,91) { illegal_1(); op_91(); } /* DB DD */ -OP(dd,92) { illegal_1(); op_92(); } /* DB DD */ -OP(dd,93) { illegal_1(); op_93(); } /* DB DD */ -OP(dd,94) { SUB(HX); } /* SUB HX */ -OP(dd,95) { SUB(LX); } /* SUB LX */ -OP(dd,96) { EAX; SUB(RM(EA)); } /* SUB (IX+o) */ -OP(dd,97) { illegal_1(); op_97(); } /* DB DD */ - -OP(dd,98) { illegal_1(); op_98(); } /* DB DD */ -OP(dd,99) { illegal_1(); op_99(); } /* DB DD */ -OP(dd,9a) { illegal_1(); op_9a(); } /* DB DD */ -OP(dd,9b) { illegal_1(); op_9b(); } /* DB DD */ -OP(dd,9c) { SBC(HX); } /* SBC A,HX */ -OP(dd,9d) { SBC(LX); } /* SBC A,LX */ -OP(dd,9e) { EAX; SBC(RM(EA)); } /* SBC A,(IX+o) */ -OP(dd,9f) { illegal_1(); op_9f(); } /* DB DD */ - -OP(dd,a0) { illegal_1(); op_a0(); } /* DB DD */ -OP(dd,a1) { illegal_1(); op_a1(); } /* DB DD */ -OP(dd,a2) { illegal_1(); op_a2(); } /* DB DD */ -OP(dd,a3) { illegal_1(); op_a3(); } /* DB DD */ -OP(dd,a4) { AND(HX); } /* AND HX */ -OP(dd,a5) { AND(LX); } /* AND LX */ -OP(dd,a6) { EAX; AND(RM(EA)); } /* AND (IX+o) */ -OP(dd,a7) { illegal_1(); op_a7(); } /* DB DD */ - -OP(dd,a8) { illegal_1(); op_a8(); } /* DB DD */ -OP(dd,a9) { illegal_1(); op_a9(); } /* DB DD */ -OP(dd,aa) { illegal_1(); op_aa(); } /* DB DD */ -OP(dd,ab) { illegal_1(); op_ab(); } /* DB DD */ -OP(dd,ac) { XOR(HX); } /* XOR HX */ -OP(dd,ad) { XOR(LX); } /* XOR LX */ -OP(dd,ae) { EAX; XOR(RM(EA)); } /* XOR (IX+o) */ -OP(dd,af) { illegal_1(); op_af(); } /* DB DD */ - -OP(dd,b0) { illegal_1(); op_b0(); } /* DB DD */ -OP(dd,b1) { illegal_1(); op_b1(); } /* DB DD */ -OP(dd,b2) { illegal_1(); op_b2(); } /* DB DD */ -OP(dd,b3) { illegal_1(); op_b3(); } /* DB DD */ -OP(dd,b4) { OR(HX); } /* OR HX */ -OP(dd,b5) { OR(LX); } /* OR LX */ -OP(dd,b6) { EAX; OR(RM(EA)); } /* OR (IX+o) */ -OP(dd,b7) { illegal_1(); op_b7(); } /* DB DD */ - -OP(dd,b8) { illegal_1(); op_b8(); } /* DB DD */ -OP(dd,b9) { illegal_1(); op_b9(); } /* DB DD */ -OP(dd,ba) { illegal_1(); op_ba(); } /* DB DD */ -OP(dd,bb) { illegal_1(); op_bb(); } /* DB DD */ -OP(dd,bc) { CP(HX); } /* CP HX */ -OP(dd,bd) { CP(LX); } /* CP LX */ -OP(dd,be) { EAX; CP(RM(EA)); } /* CP (IX+o) */ -OP(dd,bf) { illegal_1(); op_bf(); } /* DB DD */ - -OP(dd,c0) { illegal_1(); op_c0(); } /* DB DD */ -OP(dd,c1) { illegal_1(); op_c1(); } /* DB DD */ -OP(dd,c2) { illegal_1(); op_c2(); } /* DB DD */ -OP(dd,c3) { illegal_1(); op_c3(); } /* DB DD */ -OP(dd,c4) { illegal_1(); op_c4(); } /* DB DD */ -OP(dd,c5) { illegal_1(); op_c5(); } /* DB DD */ -OP(dd,c6) { illegal_1(); op_c6(); } /* DB DD */ -OP(dd,c7) { illegal_1(); op_c7(); } /* DB DD */ - -OP(dd,c8) { illegal_1(); op_c8(); } /* DB DD */ -OP(dd,c9) { illegal_1(); op_c9(); } /* DB DD */ -OP(dd,ca) { illegal_1(); op_ca(); } /* DB DD */ -OP(dd,cb) { EAX; EXEC(xycb,ARG()); } /* **** DD CB xx */ -OP(dd,cc) { illegal_1(); op_cc(); } /* DB DD */ -OP(dd,cd) { illegal_1(); op_cd(); } /* DB DD */ -OP(dd,ce) { illegal_1(); op_ce(); } /* DB DD */ -OP(dd,cf) { illegal_1(); op_cf(); } /* DB DD */ - -OP(dd,d0) { illegal_1(); op_d0(); } /* DB DD */ -OP(dd,d1) { illegal_1(); op_d1(); } /* DB DD */ -OP(dd,d2) { illegal_1(); op_d2(); } /* DB DD */ -OP(dd,d3) { illegal_1(); op_d3(); } /* DB DD */ -OP(dd,d4) { illegal_1(); op_d4(); } /* DB DD */ -OP(dd,d5) { illegal_1(); op_d5(); } /* DB DD */ -OP(dd,d6) { illegal_1(); op_d6(); } /* DB DD */ -OP(dd,d7) { illegal_1(); op_d7(); } /* DB DD */ - -OP(dd,d8) { illegal_1(); op_d8(); } /* DB DD */ -OP(dd,d9) { illegal_1(); op_d9(); } /* DB DD */ -OP(dd,da) { illegal_1(); op_da(); } /* DB DD */ -OP(dd,db) { illegal_1(); op_db(); } /* DB DD */ -OP(dd,dc) { illegal_1(); op_dc(); } /* DB DD */ -OP(dd,dd) { EXEC(dd,ROP()); } /* **** DD DD xx */ -OP(dd,de) { illegal_1(); op_de(); } /* DB DD */ -OP(dd,df) { illegal_1(); op_df(); } /* DB DD */ - -OP(dd,e0) { illegal_1(); op_e0(); } /* DB DD */ -OP(dd,e1) { POP( ix ); } /* POP IX */ -OP(dd,e2) { illegal_1(); op_e2(); } /* DB DD */ -OP(dd,e3) { EXSP( ix ); } /* EX (SP),IX */ -OP(dd,e4) { illegal_1(); op_e4(); } /* DB DD */ -OP(dd,e5) { PUSH( ix ); } /* PUSH IX */ -OP(dd,e6) { illegal_1(); op_e6(); } /* DB DD */ -OP(dd,e7) { illegal_1(); op_e7(); } /* DB DD */ - -OP(dd,e8) { illegal_1(); op_e8(); } /* DB DD */ -OP(dd,e9) { PC = IX; } /* JP (IX) */ -OP(dd,ea) { illegal_1(); op_ea(); } /* DB DD */ -OP(dd,eb) { illegal_1(); op_eb(); } /* DB DD */ -OP(dd,ec) { illegal_1(); op_ec(); } /* DB DD */ -OP(dd,ed) { illegal_1(); op_ed(); } /* DB DD */ -OP(dd,ee) { illegal_1(); op_ee(); } /* DB DD */ -OP(dd,ef) { illegal_1(); op_ef(); } /* DB DD */ - -OP(dd,f0) { illegal_1(); op_f0(); } /* DB DD */ -OP(dd,f1) { illegal_1(); op_f1(); } /* DB DD */ -OP(dd,f2) { illegal_1(); op_f2(); } /* DB DD */ -OP(dd,f3) { illegal_1(); op_f3(); } /* DB DD */ -OP(dd,f4) { illegal_1(); op_f4(); } /* DB DD */ -OP(dd,f5) { illegal_1(); op_f5(); } /* DB DD */ -OP(dd,f6) { illegal_1(); op_f6(); } /* DB DD */ -OP(dd,f7) { illegal_1(); op_f7(); } /* DB DD */ - -OP(dd,f8) { illegal_1(); op_f8(); } /* DB DD */ -OP(dd,f9) { SP = IX; } /* LD SP,IX */ -OP(dd,fa) { illegal_1(); op_fa(); } /* DB DD */ -OP(dd,fb) { illegal_1(); op_fb(); } /* DB DD */ -OP(dd,fc) { illegal_1(); op_fc(); } /* DB DD */ -OP(dd,fd) { EXEC(fd,ROP()); } /* **** DD FD xx */ -OP(dd,fe) { illegal_1(); op_fe(); } /* DB DD */ -OP(dd,ff) { illegal_1(); op_ff(); } /* DB DD */ - -/********************************************************** - * IY register related opcodes (FD prefix) - **********************************************************/ -OP(fd,00) { illegal_1(); op_00(); } /* DB FD */ -OP(fd,01) { illegal_1(); op_01(); } /* DB FD */ -OP(fd,02) { illegal_1(); op_02(); } /* DB FD */ -OP(fd,03) { illegal_1(); op_03(); } /* DB FD */ -OP(fd,04) { illegal_1(); op_04(); } /* DB FD */ -OP(fd,05) { illegal_1(); op_05(); } /* DB FD */ -OP(fd,06) { illegal_1(); op_06(); } /* DB FD */ -OP(fd,07) { illegal_1(); op_07(); } /* DB FD */ - -OP(fd,08) { illegal_1(); op_08(); } /* DB FD */ -OP(fd,09) { ADD16(iy,bc); } /* ADD IY,BC */ -OP(fd,0a) { illegal_1(); op_0a(); } /* DB FD */ -OP(fd,0b) { illegal_1(); op_0b(); } /* DB FD */ -OP(fd,0c) { illegal_1(); op_0c(); } /* DB FD */ -OP(fd,0d) { illegal_1(); op_0d(); } /* DB FD */ -OP(fd,0e) { illegal_1(); op_0e(); } /* DB FD */ -OP(fd,0f) { illegal_1(); op_0f(); } /* DB FD */ - -OP(fd,10) { illegal_1(); op_10(); } /* DB FD */ -OP(fd,11) { illegal_1(); op_11(); } /* DB FD */ -OP(fd,12) { illegal_1(); op_12(); } /* DB FD */ -OP(fd,13) { illegal_1(); op_13(); } /* DB FD */ -OP(fd,14) { illegal_1(); op_14(); } /* DB FD */ -OP(fd,15) { illegal_1(); op_15(); } /* DB FD */ -OP(fd,16) { illegal_1(); op_16(); } /* DB FD */ -OP(fd,17) { illegal_1(); op_17(); } /* DB FD */ - -OP(fd,18) { illegal_1(); op_18(); } /* DB FD */ -OP(fd,19) { ADD16(iy,de); } /* ADD IY,DE */ -OP(fd,1a) { illegal_1(); op_1a(); } /* DB FD */ -OP(fd,1b) { illegal_1(); op_1b(); } /* DB FD */ -OP(fd,1c) { illegal_1(); op_1c(); } /* DB FD */ -OP(fd,1d) { illegal_1(); op_1d(); } /* DB FD */ -OP(fd,1e) { illegal_1(); op_1e(); } /* DB FD */ -OP(fd,1f) { illegal_1(); op_1f(); } /* DB FD */ - -OP(fd,20) { illegal_1(); op_20(); } /* DB FD */ -OP(fd,21) { IY = ARG16(); } /* LD IY,w */ -OP(fd,22) { EA = ARG16(); WM16( EA, &Z80.iy ); WZ = EA+1; } /* LD (w),IY */ -OP(fd,23) { IY++; } /* INC IY */ -OP(fd,24) { HY = INC(HY); } /* INC HY */ -OP(fd,25) { HY = DEC(HY); } /* DEC HY */ -OP(fd,26) { HY = ARG(); } /* LD HY,n */ -OP(fd,27) { illegal_1(); op_27(); } /* DB FD */ - -OP(fd,28) { illegal_1(); op_28(); } /* DB FD */ -OP(fd,29) { ADD16(iy,iy); } /* ADD IY,IY */ -OP(fd,2a) { EA = ARG16(); RM16( EA, &Z80.iy ); WZ = EA+1; } /* LD IY,(w) */ -OP(fd,2b) { IY--; } /* DEC IY */ -OP(fd,2c) { LY = INC(LY); } /* INC LY */ -OP(fd,2d) { LY = DEC(LY); } /* DEC LY */ -OP(fd,2e) { LY = ARG(); } /* LD LY,n */ -OP(fd,2f) { illegal_1(); op_2f(); } /* DB FD */ - -OP(fd,30) { illegal_1(); op_30(); } /* DB FD */ -OP(fd,31) { illegal_1(); op_31(); } /* DB FD */ -OP(fd,32) { illegal_1(); op_32(); } /* DB FD */ -OP(fd,33) { illegal_1(); op_33(); } /* DB FD */ -OP(fd,34) { EAY; WM( EA, INC(RM(EA)) ); } /* INC (IY+o) */ -OP(fd,35) { EAY; WM( EA, DEC(RM(EA)) ); } /* DEC (IY+o) */ -OP(fd,36) { EAY; WM( EA, ARG() ); } /* LD (IY+o),n */ -OP(fd,37) { illegal_1(); op_37(); } /* DB FD */ - -OP(fd,38) { illegal_1(); op_38(); } /* DB FD */ -OP(fd,39) { ADD16(iy,sp); } /* ADD IY,SP */ -OP(fd,3a) { illegal_1(); op_3a(); } /* DB FD */ -OP(fd,3b) { illegal_1(); op_3b(); } /* DB FD */ -OP(fd,3c) { illegal_1(); op_3c(); } /* DB FD */ -OP(fd,3d) { illegal_1(); op_3d(); } /* DB FD */ -OP(fd,3e) { illegal_1(); op_3e(); } /* DB FD */ -OP(fd,3f) { illegal_1(); op_3f(); } /* DB FD */ - -OP(fd,40) { illegal_1(); op_40(); } /* DB FD */ -OP(fd,41) { illegal_1(); op_41(); } /* DB FD */ -OP(fd,42) { illegal_1(); op_42(); } /* DB FD */ -OP(fd,43) { illegal_1(); op_43(); } /* DB FD */ -OP(fd,44) { B = HY; } /* LD B,HY */ -OP(fd,45) { B = LY; } /* LD B,LY */ -OP(fd,46) { EAY; B = RM(EA); } /* LD B,(IY+o) */ -OP(fd,47) { illegal_1(); op_47(); } /* DB FD */ - -OP(fd,48) { illegal_1(); op_48(); } /* DB FD */ -OP(fd,49) { illegal_1(); op_49(); } /* DB FD */ -OP(fd,4a) { illegal_1(); op_4a(); } /* DB FD */ -OP(fd,4b) { illegal_1(); op_4b(); } /* DB FD */ -OP(fd,4c) { C = HY; } /* LD C,HY */ -OP(fd,4d) { C = LY; } /* LD C,LY */ -OP(fd,4e) { EAY; C = RM(EA); } /* LD C,(IY+o) */ -OP(fd,4f) { illegal_1(); op_4f(); } /* DB FD */ - -OP(fd,50) { illegal_1(); op_50(); } /* DB FD */ -OP(fd,51) { illegal_1(); op_51(); } /* DB FD */ -OP(fd,52) { illegal_1(); op_52(); } /* DB FD */ -OP(fd,53) { illegal_1(); op_53(); } /* DB FD */ -OP(fd,54) { D = HY; } /* LD D,HY */ -OP(fd,55) { D = LY; } /* LD D,LY */ -OP(fd,56) { EAY; D = RM(EA); } /* LD D,(IY+o) */ -OP(fd,57) { illegal_1(); op_57(); } /* DB FD */ - -OP(fd,58) { illegal_1(); op_58(); } /* DB FD */ -OP(fd,59) { illegal_1(); op_59(); } /* DB FD */ -OP(fd,5a) { illegal_1(); op_5a(); } /* DB FD */ -OP(fd,5b) { illegal_1(); op_5b(); } /* DB FD */ -OP(fd,5c) { E = HY; } /* LD E,HY */ -OP(fd,5d) { E = LY; } /* LD E,LY */ -OP(fd,5e) { EAY; E = RM(EA); } /* LD E,(IY+o) */ -OP(fd,5f) { illegal_1(); op_5f(); } /* DB FD */ - -OP(fd,60) { HY = B; } /* LD HY,B */ -OP(fd,61) { HY = C; } /* LD HY,C */ -OP(fd,62) { HY = D; } /* LD HY,D */ -OP(fd,63) { HY = E; } /* LD HY,E */ -OP(fd,64) { } /* LD HY,HY */ -OP(fd,65) { HY = LY; } /* LD HY,LY */ -OP(fd,66) { EAY; H = RM(EA); } /* LD H,(IY+o) */ -OP(fd,67) { HY = A; } /* LD HY,A */ - -OP(fd,68) { LY = B; } /* LD LY,B */ -OP(fd,69) { LY = C; } /* LD LY,C */ -OP(fd,6a) { LY = D; } /* LD LY,D */ -OP(fd,6b) { LY = E; } /* LD LY,E */ -OP(fd,6c) { LY = HY; } /* LD LY,HY */ -OP(fd,6d) { } /* LD LY,LY */ -OP(fd,6e) { EAY; L = RM(EA); } /* LD L,(IY+o) */ -OP(fd,6f) { LY = A; } /* LD LY,A */ - -OP(fd,70) { EAY; WM( EA, B ); } /* LD (IY+o),B */ -OP(fd,71) { EAY; WM( EA, C ); } /* LD (IY+o),C */ -OP(fd,72) { EAY; WM( EA, D ); } /* LD (IY+o),D */ -OP(fd,73) { EAY; WM( EA, E ); } /* LD (IY+o),E */ -OP(fd,74) { EAY; WM( EA, H ); } /* LD (IY+o),H */ -OP(fd,75) { EAY; WM( EA, L ); } /* LD (IY+o),L */ -OP(fd,76) { illegal_1(); op_76(); } /* DB FD */ -OP(fd,77) { EAY; WM( EA, A ); } /* LD (IY+o),A */ - -OP(fd,78) { illegal_1(); op_78(); } /* DB FD */ -OP(fd,79) { illegal_1(); op_79(); } /* DB FD */ -OP(fd,7a) { illegal_1(); op_7a(); } /* DB FD */ -OP(fd,7b) { illegal_1(); op_7b(); } /* DB FD */ -OP(fd,7c) { A = HY; } /* LD A,HY */ -OP(fd,7d) { A = LY; } /* LD A,LY */ -OP(fd,7e) { EAY; A = RM(EA); } /* LD A,(IY+o) */ -OP(fd,7f) { illegal_1(); op_7f(); } /* DB FD */ - -OP(fd,80) { illegal_1(); op_80(); } /* DB FD */ -OP(fd,81) { illegal_1(); op_81(); } /* DB FD */ -OP(fd,82) { illegal_1(); op_82(); } /* DB FD */ -OP(fd,83) { illegal_1(); op_83(); } /* DB FD */ -OP(fd,84) { ADD(HY); } /* ADD A,HY */ -OP(fd,85) { ADD(LY); } /* ADD A,LY */ -OP(fd,86) { EAY; ADD(RM(EA)); } /* ADD A,(IY+o) */ -OP(fd,87) { illegal_1(); op_87(); } /* DB FD */ - -OP(fd,88) { illegal_1(); op_88(); } /* DB FD */ -OP(fd,89) { illegal_1(); op_89(); } /* DB FD */ -OP(fd,8a) { illegal_1(); op_8a(); } /* DB FD */ -OP(fd,8b) { illegal_1(); op_8b(); } /* DB FD */ -OP(fd,8c) { ADC(HY); } /* ADC A,HY */ -OP(fd,8d) { ADC(LY); } /* ADC A,LY */ -OP(fd,8e) { EAY; ADC(RM(EA)); } /* ADC A,(IY+o) */ -OP(fd,8f) { illegal_1(); op_8f(); } /* DB FD */ - -OP(fd,90) { illegal_1(); op_90(); } /* DB FD */ -OP(fd,91) { illegal_1(); op_91(); } /* DB FD */ -OP(fd,92) { illegal_1(); op_92(); } /* DB FD */ -OP(fd,93) { illegal_1(); op_93(); } /* DB FD */ -OP(fd,94) { SUB(HY); } /* SUB HY */ -OP(fd,95) { SUB(LY); } /* SUB LY */ -OP(fd,96) { EAY; SUB(RM(EA)); } /* SUB (IY+o) */ -OP(fd,97) { illegal_1(); op_97(); } /* DB FD */ - -OP(fd,98) { illegal_1(); op_98(); } /* DB FD */ -OP(fd,99) { illegal_1(); op_99(); } /* DB FD */ -OP(fd,9a) { illegal_1(); op_9a(); } /* DB FD */ -OP(fd,9b) { illegal_1(); op_9b(); } /* DB FD */ -OP(fd,9c) { SBC(HY); } /* SBC A,HY */ -OP(fd,9d) { SBC(LY); } /* SBC A,LY */ -OP(fd,9e) { EAY; SBC(RM(EA)); } /* SBC A,(IY+o) */ -OP(fd,9f) { illegal_1(); op_9f(); } /* DB FD */ - -OP(fd,a0) { illegal_1(); op_a0(); } /* DB FD */ -OP(fd,a1) { illegal_1(); op_a1(); } /* DB FD */ -OP(fd,a2) { illegal_1(); op_a2(); } /* DB FD */ -OP(fd,a3) { illegal_1(); op_a3(); } /* DB FD */ -OP(fd,a4) { AND(HY); } /* AND HY */ -OP(fd,a5) { AND(LY); } /* AND LY */ -OP(fd,a6) { EAY; AND(RM(EA)); } /* AND (IY+o) */ -OP(fd,a7) { illegal_1(); op_a7(); } /* DB FD */ - -OP(fd,a8) { illegal_1(); op_a8(); } /* DB FD */ -OP(fd,a9) { illegal_1(); op_a9(); } /* DB FD */ -OP(fd,aa) { illegal_1(); op_aa(); } /* DB FD */ -OP(fd,ab) { illegal_1(); op_ab(); } /* DB FD */ -OP(fd,ac) { XOR(HY); } /* XOR HY */ -OP(fd,ad) { XOR(LY); } /* XOR LY */ -OP(fd,ae) { EAY; XOR(RM(EA)); } /* XOR (IY+o) */ -OP(fd,af) { illegal_1(); op_af(); } /* DB FD */ - -OP(fd,b0) { illegal_1(); op_b0(); } /* DB FD */ -OP(fd,b1) { illegal_1(); op_b1(); } /* DB FD */ -OP(fd,b2) { illegal_1(); op_b2(); } /* DB FD */ -OP(fd,b3) { illegal_1(); op_b3(); } /* DB FD */ -OP(fd,b4) { OR(HY); } /* OR HY */ -OP(fd,b5) { OR(LY); } /* OR LY */ -OP(fd,b6) { EAY; OR(RM(EA)); } /* OR (IY+o) */ -OP(fd,b7) { illegal_1(); op_b7(); } /* DB FD */ - -OP(fd,b8) { illegal_1(); op_b8(); } /* DB FD */ -OP(fd,b9) { illegal_1(); op_b9(); } /* DB FD */ -OP(fd,ba) { illegal_1(); op_ba(); } /* DB FD */ -OP(fd,bb) { illegal_1(); op_bb(); } /* DB FD */ -OP(fd,bc) { CP(HY); } /* CP HY */ -OP(fd,bd) { CP(LY); } /* CP LY */ -OP(fd,be) { EAY; CP(RM(EA)); } /* CP (IY+o) */ -OP(fd,bf) { illegal_1(); op_bf(); } /* DB FD */ - -OP(fd,c0) { illegal_1(); op_c0(); } /* DB FD */ -OP(fd,c1) { illegal_1(); op_c1(); } /* DB FD */ -OP(fd,c2) { illegal_1(); op_c2(); } /* DB FD */ -OP(fd,c3) { illegal_1(); op_c3(); } /* DB FD */ -OP(fd,c4) { illegal_1(); op_c4(); } /* DB FD */ -OP(fd,c5) { illegal_1(); op_c5(); } /* DB FD */ -OP(fd,c6) { illegal_1(); op_c6(); } /* DB FD */ -OP(fd,c7) { illegal_1(); op_c7(); } /* DB FD */ - -OP(fd,c8) { illegal_1(); op_c8(); } /* DB FD */ -OP(fd,c9) { illegal_1(); op_c9(); } /* DB FD */ -OP(fd,ca) { illegal_1(); op_ca(); } /* DB FD */ -OP(fd,cb) { EAY; EXEC(xycb,ARG()); } /* **** FD CB xx */ -OP(fd,cc) { illegal_1(); op_cc(); } /* DB FD */ -OP(fd,cd) { illegal_1(); op_cd(); } /* DB FD */ -OP(fd,ce) { illegal_1(); op_ce(); } /* DB FD */ -OP(fd,cf) { illegal_1(); op_cf(); } /* DB FD */ - -OP(fd,d0) { illegal_1(); op_d0(); } /* DB FD */ -OP(fd,d1) { illegal_1(); op_d1(); } /* DB FD */ -OP(fd,d2) { illegal_1(); op_d2(); } /* DB FD */ -OP(fd,d3) { illegal_1(); op_d3(); } /* DB FD */ -OP(fd,d4) { illegal_1(); op_d4(); } /* DB FD */ -OP(fd,d5) { illegal_1(); op_d5(); } /* DB FD */ -OP(fd,d6) { illegal_1(); op_d6(); } /* DB FD */ -OP(fd,d7) { illegal_1(); op_d7(); } /* DB FD */ - -OP(fd,d8) { illegal_1(); op_d8(); } /* DB FD */ -OP(fd,d9) { illegal_1(); op_d9(); } /* DB FD */ -OP(fd,da) { illegal_1(); op_da(); } /* DB FD */ -OP(fd,db) { illegal_1(); op_db(); } /* DB FD */ -OP(fd,dc) { illegal_1(); op_dc(); } /* DB FD */ -OP(fd,dd) { EXEC(dd,ROP()); } /* **** FD DD xx */ -OP(fd,de) { illegal_1(); op_de(); } /* DB FD */ -OP(fd,df) { illegal_1(); op_df(); } /* DB FD */ - -OP(fd,e0) { illegal_1(); op_e0(); } /* DB FD */ -OP(fd,e1) { POP( iy ); } /* POP IY */ -OP(fd,e2) { illegal_1(); op_e2(); } /* DB FD */ -OP(fd,e3) { EXSP( iy ); } /* EX (SP),IY */ -OP(fd,e4) { illegal_1(); op_e4(); } /* DB FD */ -OP(fd,e5) { PUSH( iy ); } /* PUSH IY */ -OP(fd,e6) { illegal_1(); op_e6(); } /* DB FD */ -OP(fd,e7) { illegal_1(); op_e7(); } /* DB FD */ - -OP(fd,e8) { illegal_1(); op_e8(); } /* DB FD */ -OP(fd,e9) { PC = IY; } /* JP (IY) */ -OP(fd,ea) { illegal_1(); op_ea(); } /* DB FD */ -OP(fd,eb) { illegal_1(); op_eb(); } /* DB FD */ -OP(fd,ec) { illegal_1(); op_ec(); } /* DB FD */ -OP(fd,ed) { illegal_1(); op_ed(); } /* DB FD */ -OP(fd,ee) { illegal_1(); op_ee(); } /* DB FD */ -OP(fd,ef) { illegal_1(); op_ef(); } /* DB FD */ - -OP(fd,f0) { illegal_1(); op_f0(); } /* DB FD */ -OP(fd,f1) { illegal_1(); op_f1(); } /* DB FD */ -OP(fd,f2) { illegal_1(); op_f2(); } /* DB FD */ -OP(fd,f3) { illegal_1(); op_f3(); } /* DB FD */ -OP(fd,f4) { illegal_1(); op_f4(); } /* DB FD */ -OP(fd,f5) { illegal_1(); op_f5(); } /* DB FD */ -OP(fd,f6) { illegal_1(); op_f6(); } /* DB FD */ -OP(fd,f7) { illegal_1(); op_f7(); } /* DB FD */ - -OP(fd,f8) { illegal_1(); op_f8(); } /* DB FD */ -OP(fd,f9) { SP = IY; } /* LD SP,IY */ -OP(fd,fa) { illegal_1(); op_fa(); } /* DB FD */ -OP(fd,fb) { illegal_1(); op_fb(); } /* DB FD */ -OP(fd,fc) { illegal_1(); op_fc(); } /* DB FD */ -OP(fd,fd) { EXEC(fd,ROP()); } /* **** FD FD xx */ -OP(fd,fe) { illegal_1(); op_fe(); } /* DB FD */ -OP(fd,ff) { illegal_1(); op_ff(); } /* DB FD */ - -OP(illegal,2) -{ -#if VERBOSE -logerror("Z80 #%d ill. opcode $ed $%02x\n", - cpu_getactivecpu(), cpu_readop((PCD-1)&0xffff)); -#endif -} - -/********************************************************** - * special opcodes (ED prefix) - **********************************************************/ -OP(ed,00) { illegal_2(); } /* DB ED */ -OP(ed,01) { illegal_2(); } /* DB ED */ -OP(ed,02) { illegal_2(); } /* DB ED */ -OP(ed,03) { illegal_2(); } /* DB ED */ -OP(ed,04) { illegal_2(); } /* DB ED */ -OP(ed,05) { illegal_2(); } /* DB ED */ -OP(ed,06) { illegal_2(); } /* DB ED */ -OP(ed,07) { illegal_2(); } /* DB ED */ - -OP(ed,08) { illegal_2(); } /* DB ED */ -OP(ed,09) { illegal_2(); } /* DB ED */ -OP(ed,0a) { illegal_2(); } /* DB ED */ -OP(ed,0b) { illegal_2(); } /* DB ED */ -OP(ed,0c) { illegal_2(); } /* DB ED */ -OP(ed,0d) { illegal_2(); } /* DB ED */ -OP(ed,0e) { illegal_2(); } /* DB ED */ -OP(ed,0f) { illegal_2(); } /* DB ED */ - -OP(ed,10) { illegal_2(); } /* DB ED */ -OP(ed,11) { illegal_2(); } /* DB ED */ -OP(ed,12) { illegal_2(); } /* DB ED */ -OP(ed,13) { illegal_2(); } /* DB ED */ -OP(ed,14) { illegal_2(); } /* DB ED */ -OP(ed,15) { illegal_2(); } /* DB ED */ -OP(ed,16) { illegal_2(); } /* DB ED */ -OP(ed,17) { illegal_2(); } /* DB ED */ - -OP(ed,18) { illegal_2(); } /* DB ED */ -OP(ed,19) { illegal_2(); } /* DB ED */ -OP(ed,1a) { illegal_2(); } /* DB ED */ -OP(ed,1b) { illegal_2(); } /* DB ED */ -OP(ed,1c) { illegal_2(); } /* DB ED */ -OP(ed,1d) { illegal_2(); } /* DB ED */ -OP(ed,1e) { illegal_2(); } /* DB ED */ -OP(ed,1f) { illegal_2(); } /* DB ED */ - -OP(ed,20) { illegal_2(); } /* DB ED */ -OP(ed,21) { illegal_2(); } /* DB ED */ -OP(ed,22) { illegal_2(); } /* DB ED */ -OP(ed,23) { illegal_2(); } /* DB ED */ -OP(ed,24) { illegal_2(); } /* DB ED */ -OP(ed,25) { illegal_2(); } /* DB ED */ -OP(ed,26) { illegal_2(); } /* DB ED */ -OP(ed,27) { illegal_2(); } /* DB ED */ - -OP(ed,28) { illegal_2(); } /* DB ED */ -OP(ed,29) { illegal_2(); } /* DB ED */ -OP(ed,2a) { illegal_2(); } /* DB ED */ -OP(ed,2b) { illegal_2(); } /* DB ED */ -OP(ed,2c) { illegal_2(); } /* DB ED */ -OP(ed,2d) { illegal_2(); } /* DB ED */ -OP(ed,2e) { illegal_2(); } /* DB ED */ -OP(ed,2f) { illegal_2(); } /* DB ED */ - -OP(ed,30) { illegal_2(); } /* DB ED */ -OP(ed,31) { illegal_2(); } /* DB ED */ -OP(ed,32) { illegal_2(); } /* DB ED */ -OP(ed,33) { illegal_2(); } /* DB ED */ -OP(ed,34) { illegal_2(); } /* DB ED */ -OP(ed,35) { illegal_2(); } /* DB ED */ -OP(ed,36) { illegal_2(); } /* DB ED */ -OP(ed,37) { illegal_2(); } /* DB ED */ - -OP(ed,38) { illegal_2(); } /* DB ED */ -OP(ed,39) { illegal_2(); } /* DB ED */ -OP(ed,3a) { illegal_2(); } /* DB ED */ -OP(ed,3b) { illegal_2(); } /* DB ED */ -OP(ed,3c) { illegal_2(); } /* DB ED */ -OP(ed,3d) { illegal_2(); } /* DB ED */ -OP(ed,3e) { illegal_2(); } /* DB ED */ -OP(ed,3f) { illegal_2(); } /* DB ED */ - -OP(ed,40) { B = IN(BC); F = (F & CF) | SZP[B]; } /* IN B,(C) */ -OP(ed,41) { OUT(BC, B); } /* OUT (C),B */ -OP(ed,42) { SBC16( bc ); } /* SBC HL,BC */ -OP(ed,43) { EA = ARG16(); WM16( EA, &Z80.bc ); WZ = EA+1; } /* LD (w),BC */ -OP(ed,44) { NEG; } /* NEG */ -OP(ed,45) { RETN; } /* RETN; */ -OP(ed,46) { IM = 0; } /* IM 0 */ -OP(ed,47) { LD_I_A; } /* LD I,A */ - -OP(ed,48) { C = IN(BC); F = (F & CF) | SZP[C]; } /* IN C,(C) */ -OP(ed,49) { OUT(BC, C); } /* OUT (C),C */ -OP(ed,4a) { ADC16( bc ); } /* ADC HL,BC */ -OP(ed,4b) { EA = ARG16(); RM16( EA, &Z80.bc ); WZ = EA+1; } /* LD BC,(w) */ -OP(ed,4c) { NEG; } /* NEG */ -OP(ed,4d) { RETI; } /* RETI */ -OP(ed,4e) { IM = 0; } /* IM 0 */ -OP(ed,4f) { LD_R_A; } /* LD R,A */ - -OP(ed,50) { D = IN(BC); F = (F & CF) | SZP[D]; } /* IN D,(C) */ -OP(ed,51) { OUT(BC, D); } /* OUT (C),D */ -OP(ed,52) { SBC16( de ); } /* SBC HL,DE */ -OP(ed,53) { EA = ARG16(); WM16( EA, &Z80.de ); WZ = EA+1; } /* LD (w),DE */ -OP(ed,54) { NEG; } /* NEG */ -OP(ed,55) { RETN; } /* RETN; */ -OP(ed,56) { IM = 1; } /* IM 1 */ -OP(ed,57) { LD_A_I; } /* LD A,I */ - -OP(ed,58) { E = IN(BC); F = (F & CF) | SZP[E]; } /* IN E,(C) */ -OP(ed,59) { OUT(BC, E); } /* OUT (C),E */ -OP(ed,5a) { ADC16( de ); } /* ADC HL,DE */ -OP(ed,5b) { EA = ARG16(); RM16( EA, &Z80.de ); WZ = EA+1; } /* LD DE,(w) */ -OP(ed,5c) { NEG; } /* NEG */ -OP(ed,5d) { RETI; } /* RETI */ -OP(ed,5e) { IM = 2; } /* IM 2 */ -OP(ed,5f) { LD_A_R; } /* LD A,R */ - -OP(ed,60) { H = IN(BC); F = (F & CF) | SZP[H]; } /* IN H,(C) */ -OP(ed,61) { OUT(BC, H); } /* OUT (C),H */ -OP(ed,62) { SBC16( hl ); } /* SBC HL,HL */ -OP(ed,63) { EA = ARG16(); WM16( EA, &Z80.hl ); WZ = EA+1; } /* LD (w),HL */ -OP(ed,64) { NEG; } /* NEG */ -OP(ed,65) { RETN; } /* RETN; */ -OP(ed,66) { IM = 0; } /* IM 0 */ -OP(ed,67) { RRD; } /* RRD (HL) */ - -OP(ed,68) { L = IN(BC); F = (F & CF) | SZP[L]; } /* IN L,(C) */ -OP(ed,69) { OUT(BC, L); } /* OUT (C),L */ -OP(ed,6a) { ADC16( hl ); } /* ADC HL,HL */ -OP(ed,6b) { EA = ARG16(); RM16( EA, &Z80.hl ); WZ = EA+1; } /* LD HL,(w) */ -OP(ed,6c) { NEG; } /* NEG */ -OP(ed,6d) { RETI; } /* RETI */ -OP(ed,6e) { IM = 0; } /* IM 0 */ -OP(ed,6f) { RLD; } /* RLD (HL) */ - -OP(ed,70) { UINT8 res = IN(BC); F = (F & CF) | SZP[res]; } /* IN 0,(C) */ -OP(ed,71) { OUT(BC, 0); } /* OUT (C),0 */ -OP(ed,72) { SBC16( sp ); } /* SBC HL,SP */ -OP(ed,73) { EA = ARG16(); WM16( EA, &Z80.sp ); WZ = EA+1; } /* LD (w),SP */ -OP(ed,74) { NEG; } /* NEG */ -OP(ed,75) { RETN; } /* RETN; */ -OP(ed,76) { IM = 1; } /* IM 1 */ -OP(ed,77) { illegal_2(); } /* DB ED,77 */ - -OP(ed,78) { A = IN(BC); F = (F & CF) | SZP[A]; WZ = BC+1; } /* IN E,(C) */ -OP(ed,79) { OUT(BC, A); WZ = BC + 1; } /* OUT (C),A */ -OP(ed,7a) { ADC16( sp ); } /* ADC HL,SP */ -OP(ed,7b) { EA = ARG16(); RM16( EA, &Z80.sp ); WZ = EA+1; } /* LD SP,(w) */ -OP(ed,7c) { NEG; } /* NEG */ -OP(ed,7d) { RETI; } /* RETI */ -OP(ed,7e) { IM = 2; } /* IM 2 */ -OP(ed,7f) { illegal_2(); } /* DB ED,7F */ - -OP(ed,80) { illegal_2(); } /* DB ED */ -OP(ed,81) { illegal_2(); } /* DB ED */ -OP(ed,82) { illegal_2(); } /* DB ED */ -OP(ed,83) { illegal_2(); } /* DB ED */ -OP(ed,84) { illegal_2(); } /* DB ED */ -OP(ed,85) { illegal_2(); } /* DB ED */ -OP(ed,86) { illegal_2(); } /* DB ED */ -OP(ed,87) { illegal_2(); } /* DB ED */ - -OP(ed,88) { illegal_2(); } /* DB ED */ -OP(ed,89) { illegal_2(); } /* DB ED */ -OP(ed,8a) { illegal_2(); } /* DB ED */ -OP(ed,8b) { illegal_2(); } /* DB ED */ -OP(ed,8c) { illegal_2(); } /* DB ED */ -OP(ed,8d) { illegal_2(); } /* DB ED */ -OP(ed,8e) { illegal_2(); } /* DB ED */ -OP(ed,8f) { illegal_2(); } /* DB ED */ - -OP(ed,90) { illegal_2(); } /* DB ED */ -OP(ed,91) { illegal_2(); } /* DB ED */ -OP(ed,92) { illegal_2(); } /* DB ED */ -OP(ed,93) { illegal_2(); } /* DB ED */ -OP(ed,94) { illegal_2(); } /* DB ED */ -OP(ed,95) { illegal_2(); } /* DB ED */ -OP(ed,96) { illegal_2(); } /* DB ED */ -OP(ed,97) { illegal_2(); } /* DB ED */ - -OP(ed,98) { illegal_2(); } /* DB ED */ -OP(ed,99) { illegal_2(); } /* DB ED */ -OP(ed,9a) { illegal_2(); } /* DB ED */ -OP(ed,9b) { illegal_2(); } /* DB ED */ -OP(ed,9c) { illegal_2(); } /* DB ED */ -OP(ed,9d) { illegal_2(); } /* DB ED */ -OP(ed,9e) { illegal_2(); } /* DB ED */ -OP(ed,9f) { illegal_2(); } /* DB ED */ - -OP(ed,a0) { LDI; } /* LDI */ -OP(ed,a1) { CPI; } /* CPI */ -OP(ed,a2) { INI; } /* INI */ -OP(ed,a3) { OUTI; } /* OUTI */ -OP(ed,a4) { illegal_2(); } /* DB ED */ -OP(ed,a5) { illegal_2(); } /* DB ED */ -OP(ed,a6) { illegal_2(); } /* DB ED */ -OP(ed,a7) { illegal_2(); } /* DB ED */ - -OP(ed,a8) { LDD; } /* LDD */ -OP(ed,a9) { CPD; } /* CPD */ -OP(ed,aa) { IND; } /* IND */ -OP(ed,ab) { OUTD; } /* OUTD */ -OP(ed,ac) { illegal_2(); } /* DB ED */ -OP(ed,ad) { illegal_2(); } /* DB ED */ -OP(ed,ae) { illegal_2(); } /* DB ED */ -OP(ed,af) { illegal_2(); } /* DB ED */ - -OP(ed,b0) { LDIR; } /* LDIR */ -OP(ed,b1) { CPIR; } /* CPIR */ -OP(ed,b2) { INIR; } /* INIR */ -OP(ed,b3) { OTIR; } /* OTIR */ -OP(ed,b4) { illegal_2(); } /* DB ED */ -OP(ed,b5) { illegal_2(); } /* DB ED */ -OP(ed,b6) { illegal_2(); } /* DB ED */ -OP(ed,b7) { illegal_2(); } /* DB ED */ - -OP(ed,b8) { LDDR; } /* LDDR */ -OP(ed,b9) { CPDR; } /* CPDR */ -OP(ed,ba) { INDR; } /* INDR */ -OP(ed,bb) { OTDR; } /* OTDR */ -OP(ed,bc) { illegal_2(); } /* DB ED */ -OP(ed,bd) { illegal_2(); } /* DB ED */ -OP(ed,be) { illegal_2(); } /* DB ED */ -OP(ed,bf) { illegal_2(); } /* DB ED */ - -OP(ed,c0) { illegal_2(); } /* DB ED */ -OP(ed,c1) { illegal_2(); } /* DB ED */ -OP(ed,c2) { illegal_2(); } /* DB ED */ -OP(ed,c3) { illegal_2(); } /* DB ED */ -OP(ed,c4) { illegal_2(); } /* DB ED */ -OP(ed,c5) { illegal_2(); } /* DB ED */ -OP(ed,c6) { illegal_2(); } /* DB ED */ -OP(ed,c7) { illegal_2(); } /* DB ED */ - -OP(ed,c8) { illegal_2(); } /* DB ED */ -OP(ed,c9) { illegal_2(); } /* DB ED */ -OP(ed,ca) { illegal_2(); } /* DB ED */ -OP(ed,cb) { illegal_2(); } /* DB ED */ -OP(ed,cc) { illegal_2(); } /* DB ED */ -OP(ed,cd) { illegal_2(); } /* DB ED */ -OP(ed,ce) { illegal_2(); } /* DB ED */ -OP(ed,cf) { illegal_2(); } /* DB ED */ - -OP(ed,d0) { illegal_2(); } /* DB ED */ -OP(ed,d1) { illegal_2(); } /* DB ED */ -OP(ed,d2) { illegal_2(); } /* DB ED */ -OP(ed,d3) { illegal_2(); } /* DB ED */ -OP(ed,d4) { illegal_2(); } /* DB ED */ -OP(ed,d5) { illegal_2(); } /* DB ED */ -OP(ed,d6) { illegal_2(); } /* DB ED */ -OP(ed,d7) { illegal_2(); } /* DB ED */ - -OP(ed,d8) { illegal_2(); } /* DB ED */ -OP(ed,d9) { illegal_2(); } /* DB ED */ -OP(ed,da) { illegal_2(); } /* DB ED */ -OP(ed,db) { illegal_2(); } /* DB ED */ -OP(ed,dc) { illegal_2(); } /* DB ED */ -OP(ed,dd) { illegal_2(); } /* DB ED */ -OP(ed,de) { illegal_2(); } /* DB ED */ -OP(ed,df) { illegal_2(); } /* DB ED */ - -OP(ed,e0) { illegal_2(); } /* DB ED */ -OP(ed,e1) { illegal_2(); } /* DB ED */ -OP(ed,e2) { illegal_2(); } /* DB ED */ -OP(ed,e3) { illegal_2(); } /* DB ED */ -OP(ed,e4) { illegal_2(); } /* DB ED */ -OP(ed,e5) { illegal_2(); } /* DB ED */ -OP(ed,e6) { illegal_2(); } /* DB ED */ -OP(ed,e7) { illegal_2(); } /* DB ED */ - -OP(ed,e8) { illegal_2(); } /* DB ED */ -OP(ed,e9) { illegal_2(); } /* DB ED */ -OP(ed,ea) { illegal_2(); } /* DB ED */ -OP(ed,eb) { illegal_2(); } /* DB ED */ -OP(ed,ec) { illegal_2(); } /* DB ED */ -OP(ed,ed) { illegal_2(); } /* DB ED */ -OP(ed,ee) { illegal_2(); } /* DB ED */ -OP(ed,ef) { illegal_2(); } /* DB ED */ - -OP(ed,f0) { illegal_2(); } /* DB ED */ -OP(ed,f1) { illegal_2(); } /* DB ED */ -OP(ed,f2) { illegal_2(); } /* DB ED */ -OP(ed,f3) { illegal_2(); } /* DB ED */ -OP(ed,f4) { illegal_2(); } /* DB ED */ -OP(ed,f5) { illegal_2(); } /* DB ED */ -OP(ed,f6) { illegal_2(); } /* DB ED */ -OP(ed,f7) { illegal_2(); } /* DB ED */ - -OP(ed,f8) { illegal_2(); } /* DB ED */ -OP(ed,f9) { illegal_2(); } /* DB ED */ -OP(ed,fa) { illegal_2(); } /* DB ED */ -OP(ed,fb) { illegal_2(); } /* DB ED */ -OP(ed,fc) { illegal_2(); } /* DB ED */ -OP(ed,fd) { illegal_2(); } /* DB ED */ -OP(ed,fe) { illegal_2(); } /* DB ED */ -OP(ed,ff) { illegal_2(); } /* DB ED */ - - -/********************************************************** - * main opcodes - **********************************************************/ -OP(op,00) { } /* NOP */ -OP(op,01) { BC = ARG16(); } /* LD BC,w */ -OP(op,02) { WM( BC, A ); WZ_L = (BC + 1) & 0xFF; WZ_H = A; } /* LD (BC),A */ -OP(op,03) { BC++; } /* INC BC */ -OP(op,04) { B = INC(B); } /* INC B */ -OP(op,05) { B = DEC(B); } /* DEC B */ -OP(op,06) { B = ARG(); } /* LD B,n */ -OP(op,07) { RLCA; } /* RLCA */ - -OP(op,08) { EX_AF; } /* EX AF,AF' */ -OP(op,09) { ADD16(hl, bc); } /* ADD HL,BC */ -OP(op,0a) { A = RM( BC ); WZ=BC+1; } /* LD A,(BC) */ -OP(op,0b) { BC--; } /* DEC BC */ -OP(op,0c) { C = INC(C); } /* INC C */ -OP(op,0d) { C = DEC(C); } /* DEC C */ -OP(op,0e) { C = ARG(); } /* LD C,n */ -OP(op,0f) { RRCA; } /* RRCA */ - -OP(op,10) { B--; JR_COND( B, 0x10 ); } /* DJNZ o */ -OP(op,11) { DE = ARG16(); } /* LD DE,w */ -OP(op,12) { WM( DE, A ); WZ_L = (DE + 1) & 0xFF; WZ_H = A; } /* LD (DE),A */ -OP(op,13) { DE++; } /* INC DE */ -OP(op,14) { D = INC(D); } /* INC D */ -OP(op,15) { D = DEC(D); } /* DEC D */ -OP(op,16) { D = ARG(); } /* LD D,n */ -OP(op,17) { RLA; } /* RLA */ - -OP(op,18) { JR(); } /* JR o */ -OP(op,19) { ADD16(hl, de); } /* ADD HL,DE */ -OP(op,1a) { A = RM( DE ); WZ=DE+1; } /* LD A,(DE) */ -OP(op,1b) { DE--; } /* DEC DE */ -OP(op,1c) { E = INC(E); } /* INC E */ -OP(op,1d) { E = DEC(E); } /* DEC E */ -OP(op,1e) { E = ARG(); } /* LD E,n */ -OP(op,1f) { RRA; } /* RRA */ - -OP(op,20) { JR_COND( !(F & ZF), 0x20 ); } /* JR NZ,o */ -OP(op,21) { HL = ARG16(); } /* LD HL,w */ -OP(op,22) { EA = ARG16(); WM16( EA, &Z80.hl ); WZ = EA+1; } /* LD (w),HL */ -OP(op,23) { HL++; } /* INC HL */ -OP(op,24) { H = INC(H); } /* INC H */ -OP(op,25) { H = DEC(H); } /* DEC H */ -OP(op,26) { H = ARG(); } /* LD H,n */ -OP(op,27) { DAA; } /* DAA */ - -OP(op,28) { JR_COND( F & ZF, 0x28 ); } /* JR Z,o */ -OP(op,29) { ADD16(hl, hl); } /* ADD HL,HL */ -OP(op,2a) { EA = ARG16(); RM16( EA, &Z80.hl ); WZ = EA+1; } /* LD HL,(w) */ -OP(op,2b) { HL--; } /* DEC HL */ -OP(op,2c) { L = INC(L); } /* INC L */ -OP(op,2d) { L = DEC(L); } /* DEC L */ -OP(op,2e) { L = ARG(); } /* LD L,n */ -OP(op,2f) { A ^= 0xff; F = (F&(SF|ZF|PF|CF))|HF|NF|(A&(YF|XF)); } /* CPL */ - -OP(op,30) { JR_COND( !(F & CF), 0x30 ); } /* JR NC,o */ -OP(op,31) { SP = ARG16(); } /* LD SP,w */ -OP(op,32) { EA = ARG16(); WM( EA, A ); WZ_L=(EA+1)&0xFF;WZ_H=A; } /* LD (w),A */ -OP(op,33) { SP++; } /* INC SP */ -OP(op,34) { WM( HL, INC(RM(HL)) ); } /* INC (HL) */ -OP(op,35) { WM( HL, DEC(RM(HL)) ); } /* DEC (HL) */ -OP(op,36) { WM( HL, ARG() ); } /* LD (HL),n */ -OP(op,37) { F = (F & (SF|ZF|YF|XF|PF)) | CF | (A & (YF|XF)); } /* SCF */ - -OP(op,38) { JR_COND( F & CF, 0x38 ); } /* JR C,o */ -OP(op,39) { ADD16(hl, sp); } /* ADD HL,SP */ -OP(op,3a) { EA = ARG16(); A = RM( EA ); WZ = EA+1; } /* LD A,(w) */ -OP(op,3b) { SP--; } /* DEC SP */ -OP(op,3c) { A = INC(A); } /* INC A */ -OP(op,3d) { A = DEC(A); } /* DEC A */ -OP(op,3e) { A = ARG(); } /* LD A,n */ -OP(op,3f) { F = ((F&(SF|ZF|YF|XF|PF|CF))|((F&CF)<<4)|(A&(YF|XF)))^CF; } /* CCF */ - -OP(op,40) { } /* LD B,B */ -OP(op,41) { B = C; } /* LD B,C */ -OP(op,42) { B = D; } /* LD B,D */ -OP(op,43) { B = E; } /* LD B,E */ -OP(op,44) { B = H; } /* LD B,H */ -OP(op,45) { B = L; } /* LD B,L */ -OP(op,46) { B = RM(HL); } /* LD B,(HL) */ -OP(op,47) { B = A; } /* LD B,A */ - -OP(op,48) { C = B; } /* LD C,B */ -OP(op,49) { } /* LD C,C */ -OP(op,4a) { C = D; } /* LD C,D */ -OP(op,4b) { C = E; } /* LD C,E */ -OP(op,4c) { C = H; } /* LD C,H */ -OP(op,4d) { C = L; } /* LD C,L */ -OP(op,4e) { C = RM(HL); } /* LD C,(HL) */ -OP(op,4f) { C = A; } /* LD C,A */ - -OP(op,50) { D = B; } /* LD D,B */ -OP(op,51) { D = C; } /* LD D,C */ -OP(op,52) { } /* LD D,D */ -OP(op,53) { D = E; } /* LD D,E */ -OP(op,54) { D = H; } /* LD D,H */ -OP(op,55) { D = L; } /* LD D,L */ -OP(op,56) { D = RM(HL); } /* LD D,(HL) */ -OP(op,57) { D = A; } /* LD D,A */ - -OP(op,58) { E = B; } /* LD E,B */ -OP(op,59) { E = C; } /* LD E,C */ -OP(op,5a) { E = D; } /* LD E,D */ -OP(op,5b) { } /* LD E,E */ -OP(op,5c) { E = H; } /* LD E,H */ -OP(op,5d) { E = L; } /* LD E,L */ -OP(op,5e) { E = RM(HL); } /* LD E,(HL) */ -OP(op,5f) { E = A; } /* LD E,A */ - -OP(op,60) { H = B; } /* LD H,B */ -OP(op,61) { H = C; } /* LD H,C */ -OP(op,62) { H = D; } /* LD H,D */ -OP(op,63) { H = E; } /* LD H,E */ -OP(op,64) { } /* LD H,H */ -OP(op,65) { H = L; } /* LD H,L */ -OP(op,66) { H = RM(HL); } /* LD H,(HL) */ -OP(op,67) { H = A; } /* LD H,A */ - -OP(op,68) { L = B; } /* LD L,B */ -OP(op,69) { L = C; } /* LD L,C */ -OP(op,6a) { L = D; } /* LD L,D */ -OP(op,6b) { L = E; } /* LD L,E */ -OP(op,6c) { L = H; } /* LD L,H */ -OP(op,6d) { } /* LD L,L */ -OP(op,6e) { L = RM(HL); } /* LD L,(HL) */ -OP(op,6f) { L = A; } /* LD L,A */ - -OP(op,70) { WM( HL, B ); } /* LD (HL),B */ -OP(op,71) { WM( HL, C ); } /* LD (HL),C */ -OP(op,72) { WM( HL, D ); } /* LD (HL),D */ -OP(op,73) { WM( HL, E ); } /* LD (HL),E */ -OP(op,74) { WM( HL, H ); } /* LD (HL),H */ -OP(op,75) { WM( HL, L ); } /* LD (HL),L */ -OP(op,76) { ENTER_HALT; } /* HALT */ -OP(op,77) { WM( HL, A ); } /* LD (HL),A */ - -OP(op,78) { A = B; } /* LD A,B */ -OP(op,79) { A = C; } /* LD A,C */ -OP(op,7a) { A = D; } /* LD A,D */ -OP(op,7b) { A = E; } /* LD A,E */ -OP(op,7c) { A = H; } /* LD A,H */ -OP(op,7d) { A = L; } /* LD A,L */ -OP(op,7e) { A = RM(HL); } /* LD A,(HL) */ -OP(op,7f) { } /* LD A,A */ - -OP(op,80) { ADD(B); } /* ADD A,B */ -OP(op,81) { ADD(C); } /* ADD A,C */ -OP(op,82) { ADD(D); } /* ADD A,D */ -OP(op,83) { ADD(E); } /* ADD A,E */ -OP(op,84) { ADD(H); } /* ADD A,H */ -OP(op,85) { ADD(L); } /* ADD A,L */ -OP(op,86) { ADD(RM(HL)); } /* ADD A,(HL) */ -OP(op,87) { ADD(A); } /* ADD A,A */ - -OP(op,88) { ADC(B); } /* ADC A,B */ -OP(op,89) { ADC(C); } /* ADC A,C */ -OP(op,8a) { ADC(D); } /* ADC A,D */ -OP(op,8b) { ADC(E); } /* ADC A,E */ -OP(op,8c) { ADC(H); } /* ADC A,H */ -OP(op,8d) { ADC(L); } /* ADC A,L */ -OP(op,8e) { ADC(RM(HL)); } /* ADC A,(HL) */ -OP(op,8f) { ADC(A); } /* ADC A,A */ - -OP(op,90) { SUB(B); } /* SUB B */ -OP(op,91) { SUB(C); } /* SUB C */ -OP(op,92) { SUB(D); } /* SUB D */ -OP(op,93) { SUB(E); } /* SUB E */ -OP(op,94) { SUB(H); } /* SUB H */ -OP(op,95) { SUB(L); } /* SUB L */ -OP(op,96) { SUB(RM(HL)); } /* SUB (HL) */ -OP(op,97) { SUB(A); } /* SUB A */ - -OP(op,98) { SBC(B); } /* SBC A,B */ -OP(op,99) { SBC(C); } /* SBC A,C */ -OP(op,9a) { SBC(D); } /* SBC A,D */ -OP(op,9b) { SBC(E); } /* SBC A,E */ -OP(op,9c) { SBC(H); } /* SBC A,H */ -OP(op,9d) { SBC(L); } /* SBC A,L */ -OP(op,9e) { SBC(RM(HL)); } /* SBC A,(HL) */ -OP(op,9f) { SBC(A); } /* SBC A,A */ - -OP(op,a0) { AND(B); } /* AND B */ -OP(op,a1) { AND(C); } /* AND C */ -OP(op,a2) { AND(D); } /* AND D */ -OP(op,a3) { AND(E); } /* AND E */ -OP(op,a4) { AND(H); } /* AND H */ -OP(op,a5) { AND(L); } /* AND L */ -OP(op,a6) { AND(RM(HL)); } /* AND (HL) */ -OP(op,a7) { AND(A); } /* AND A */ - -OP(op,a8) { XOR(B); } /* XOR B */ -OP(op,a9) { XOR(C); } /* XOR C */ -OP(op,aa) { XOR(D); } /* XOR D */ -OP(op,ab) { XOR(E); } /* XOR E */ -OP(op,ac) { XOR(H); } /* XOR H */ -OP(op,ad) { XOR(L); } /* XOR L */ -OP(op,ae) { XOR(RM(HL)); } /* XOR (HL) */ -OP(op,af) { XOR(A); } /* XOR A */ - -OP(op,b0) { OR(B); } /* OR B */ -OP(op,b1) { OR(C); } /* OR C */ -OP(op,b2) { OR(D); } /* OR D */ -OP(op,b3) { OR(E); } /* OR E */ -OP(op,b4) { OR(H); } /* OR H */ -OP(op,b5) { OR(L); } /* OR L */ -OP(op,b6) { OR(RM(HL)); } /* OR (HL) */ -OP(op,b7) { OR(A); } /* OR A */ - -OP(op,b8) { CP(B); } /* CP B */ -OP(op,b9) { CP(C); } /* CP C */ -OP(op,ba) { CP(D); } /* CP D */ -OP(op,bb) { CP(E); } /* CP E */ -OP(op,bc) { CP(H); } /* CP H */ -OP(op,bd) { CP(L); } /* CP L */ -OP(op,be) { CP(RM(HL)); } /* CP (HL) */ -OP(op,bf) { CP(A); } /* CP A */ - -OP(op,c0) { RET_COND( !(F & ZF), 0xc0 ); } /* RET NZ */ -OP(op,c1) { POP( bc ); } /* POP BC */ -OP(op,c2) { JP_COND( !(F & ZF) ); } /* JP NZ,a */ -OP(op,c3) { JP; } /* JP a */ -OP(op,c4) { CALL_COND( !(F & ZF), 0xc4 ); } /* CALL NZ,a */ -OP(op,c5) { PUSH( bc ); } /* PUSH BC */ -OP(op,c6) { ADD(ARG()); } /* ADD A,n */ -OP(op,c7) { RST(0x00); } /* RST 0 */ - -OP(op,c8) { RET_COND( F & ZF, 0xc8 ); } /* RET Z */ -OP(op,c9) { POP( pc ); WZ=PCD; } /* RET */ -OP(op,ca) { JP_COND( F & ZF ); } /* JP Z,a */ -OP(op,cb) { R++; EXEC(cb,ROP()); } /* **** CB xx */ -OP(op,cc) { CALL_COND( F & ZF, 0xcc ); } /* CALL Z,a */ -OP(op,cd) { CALL(); } /* CALL a */ -OP(op,ce) { ADC(ARG()); } /* ADC A,n */ -OP(op,cf) { RST(0x08); } /* RST 1 */ - -OP(op,d0) { RET_COND( !(F & CF), 0xd0 ); } /* RET NC */ -OP(op,d1) { POP( de ); } /* POP DE */ -OP(op,d2) { JP_COND( !(F & CF) ); } /* JP NC,a */ -OP(op,d3) { unsigned n = ARG() | (A << 8); OUT( n, A ); WZ_L = ((n & 0xff) + 1) & 0xff; WZ_H = A; } /* OUT (n),A */ -OP(op,d4) { CALL_COND( !(F & CF), 0xd4 ); } /* CALL NC,a */ -OP(op,d5) { PUSH( de ); } /* PUSH DE */ -OP(op,d6) { SUB(ARG()); } /* SUB n */ -OP(op,d7) { RST(0x10); } /* RST 2 */ - -OP(op,d8) { RET_COND( F & CF, 0xd8 ); } /* RET C */ -OP(op,d9) { EXX; } /* EXX */ -OP(op,da) { JP_COND( F & CF ); } /* JP C,a */ -OP(op,db) { unsigned n = ARG() | (A << 8); A = IN( n ); WZ = n + 1; } /* IN A,(n) */ -OP(op,dc) { CALL_COND( F & CF, 0xdc ); } /* CALL C,a */ -OP(op,dd) { R++; EXEC(dd,ROP()); } /* **** DD xx */ -OP(op,de) { SBC(ARG()); } /* SBC A,n */ -OP(op,df) { RST(0x18); } /* RST 3 */ - -OP(op,e0) { RET_COND( !(F & PF), 0xe0 ); } /* RET PO */ -OP(op,e1) { POP( hl ); } /* POP HL */ -OP(op,e2) { JP_COND( !(F & PF) ); } /* JP PO,a */ -OP(op,e3) { EXSP( hl ); } /* EX HL,(SP) */ -OP(op,e4) { CALL_COND( !(F & PF), 0xe4 ); } /* CALL PO,a */ -OP(op,e5) { PUSH( hl ); } /* PUSH HL */ -OP(op,e6) { AND(ARG()); } /* AND n */ -OP(op,e7) { RST(0x20); } /* RST 4 */ - -OP(op,e8) { RET_COND( F & PF, 0xe8 ); } /* RET PE */ -OP(op,e9) { PC = HL; } /* JP (HL) */ -OP(op,ea) { JP_COND( F & PF ); } /* JP PE,a */ -OP(op,eb) { EX_DE_HL; } /* EX DE,HL */ -OP(op,ec) { CALL_COND( F & PF, 0xec ); } /* CALL PE,a */ -OP(op,ed) { R++; EXEC(ed,ROP()); } /* **** ED xx */ -OP(op,ee) { XOR(ARG()); } /* XOR n */ -OP(op,ef) { RST(0x28); } /* RST 5 */ - -OP(op,f0) { RET_COND( !(F & SF), 0xf0 ); } /* RET P */ -OP(op,f1) { POP( af ); } /* POP AF */ -OP(op,f2) { JP_COND( !(F & SF) ); } /* JP P,a */ -OP(op,f3) { IFF1 = IFF2 = 0; } /* DI */ -OP(op,f4) { CALL_COND( !(F & SF), 0xf4 ); } /* CALL P,a */ -OP(op,f5) { PUSH( af ); } /* PUSH AF */ -OP(op,f6) { OR(ARG()); } /* OR n */ -OP(op,f7) { RST(0x30); } /* RST 6 */ - -OP(op,f8) { RET_COND( F & SF, 0xf8 ); } /* RET M */ -OP(op,f9) { SP = HL; } /* LD SP,HL */ -OP(op,fa) { JP_COND(F & SF); } /* JP M,a */ -OP(op,fb) { EI; } /* EI */ -OP(op,fc) { CALL_COND( F & SF, 0xfc ); } /* CALL M,a */ -OP(op,fd) { R++; EXEC(fd,ROP()); } /* **** FD xx */ -OP(op,fe) { CP(ARG()); } /* CP n */ -OP(op,ff) { RST(0x38); } /* RST 7 */ - - -static void take_interrupt(void) -{ - /* Check if processor was halted */ - LEAVE_HALT; - - /* Clear both interrupt flip flops */ - IFF1 = IFF2 = 0; - - LOG(("Z80 #%d single int. irq_vector $%02x\n", cpu_getactivecpu(), irq_vector)); - - /* Interrupt mode 1. RST 38h */ - if( IM == 1 ) - { - LOG(("Z80 #%d IM1 $0038\n",cpu_getactivecpu() )); - PUSH( pc ); - PCD = 0x0038; - /* RST $38 + 'interrupt latency' cycles */ - Z80.cycles += cc[Z80_TABLE_op][0xff] + cc[Z80_TABLE_ex][0xff]; - } - else - { - /* call back the cpu interface to retrieve the vector */ - int irq_vector = (*Z80.irq_callback)(0); - - /* Interrupt mode 2. Call [Z80.i:databyte] */ - if( IM == 2 ) - { - irq_vector = (irq_vector & 0xff) | (I << 8); - PUSH( pc ); - RM16( irq_vector, &Z80.pc ); - LOG(("Z80 #%d IM2 [$%04x] = $%04x\n",cpu_getactivecpu() , irq_vector, PCD)); - /* CALL $xxxx + 'interrupt latency' cycles */ - Z80.cycles += cc[Z80_TABLE_op][0xcd] + cc[Z80_TABLE_ex][0xff]; - } - else - { - /* Interrupt mode 0. We check for CALL and JP instructions, */ - /* if neither of these were found we assume a 1 byte opcode */ - /* was placed on the databus */ - LOG(("Z80 #%d IM0 $%04x\n",cpu_getactivecpu() , irq_vector)); - switch (irq_vector & 0xff0000) - { - case 0xcd0000: /* call */ - PUSH( pc ); - PCD = irq_vector & 0xffff; - /* CALL $xxxx + 'interrupt latency' cycles */ - Z80.cycles += cc[Z80_TABLE_op][0xcd] + cc[Z80_TABLE_ex][0xff]; - break; - case 0xc30000: /* jump */ - PCD = irq_vector & 0xffff; - /* JP $xxxx + 2 cycles */ - Z80.cycles += cc[Z80_TABLE_op][0xc3] + cc[Z80_TABLE_ex][0xff]; - break; - default: /* rst (or other opcodes?) */ - PUSH( pc ); - PCD = irq_vector & 0x0038; - /* RST $xx + 2 cycles */ - Z80.cycles += cc[Z80_TABLE_op][0xff] + cc[Z80_TABLE_ex][0xff]; - break; - } - } - } - WZ=PCD; -} - -/**************************************************************************** - * Processor initialization - ****************************************************************************/ -void z80_init(const void *config, int (*irqcallback)(int)) -{ - int i, p; - - int oldval, newval, val; - UINT8 *padd = &SZHVC_add[ 0*256]; - UINT8 *padc = &SZHVC_add[256*256]; - UINT8 *psub = &SZHVC_sub[ 0*256]; - UINT8 *psbc = &SZHVC_sub[256*256]; - for (oldval = 0; oldval < 256; oldval++) - { - for (newval = 0; newval < 256; newval++) - { - /* add or adc w/o carry set */ - val = newval - oldval; - *padd = (newval) ? ((newval & 0x80) ? SF : 0) : ZF; - *padd |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ - if( (newval & 0x0f) < (oldval & 0x0f) ) *padd |= HF; - if( newval < oldval ) *padd |= CF; - if( (val^oldval^0x80) & (val^newval) & 0x80 ) *padd |= VF; - padd++; - - /* adc with carry set */ - val = newval - oldval - 1; - *padc = (newval) ? ((newval & 0x80) ? SF : 0) : ZF; - *padc |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ - if( (newval & 0x0f) <= (oldval & 0x0f) ) *padc |= HF; - if( newval <= oldval ) *padc |= CF; - if( (val^oldval^0x80) & (val^newval) & 0x80 ) *padc |= VF; - padc++; - - /* cp, sub or sbc w/o carry set */ - val = oldval - newval; - *psub = NF | ((newval) ? ((newval & 0x80) ? SF : 0) : ZF); - *psub |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ - if( (newval & 0x0f) > (oldval & 0x0f) ) *psub |= HF; - if( newval > oldval ) *psub |= CF; - if( (val^oldval) & (oldval^newval) & 0x80 ) *psub |= VF; - psub++; - - /* sbc with carry set */ - val = oldval - newval - 1; - *psbc = NF | ((newval) ? ((newval & 0x80) ? SF : 0) : ZF); - *psbc |= (newval & (YF | XF)); /* undocumented flag bits 5+3 */ - if( (newval & 0x0f) >= (oldval & 0x0f) ) *psbc |= HF; - if( newval >= oldval ) *psbc |= CF; - if( (val^oldval) & (oldval^newval) & 0x80 ) *psbc |= VF; - psbc++; - } - } - - for (i = 0; i < 256; i++) - { - p = 0; - if( i&0x01 ) ++p; - if( i&0x02 ) ++p; - if( i&0x04 ) ++p; - if( i&0x08 ) ++p; - if( i&0x10 ) ++p; - if( i&0x20 ) ++p; - if( i&0x40 ) ++p; - if( i&0x80 ) ++p; - SZ[i] = i ? i & SF : ZF; - SZ[i] |= (i & (YF | XF)); /* undocumented flag bits 5+3 */ - SZ_BIT[i] = i ? i & SF : ZF | PF; - SZ_BIT[i] |= (i & (YF | XF)); /* undocumented flag bits 5+3 */ - SZP[i] = SZ[i] | ((p & 1) ? 0 : PF); - SZHV_inc[i] = SZ[i]; - if( i == 0x80 ) SZHV_inc[i] |= VF; - if( (i & 0x0f) == 0x00 ) SZHV_inc[i] |= HF; - SZHV_dec[i] = SZ[i] | NF; - if( i == 0x7f ) SZHV_dec[i] |= VF; - if( (i & 0x0f) == 0x0f ) SZHV_dec[i] |= HF; - } - - /* Initialize Z80 */ - memset(&Z80, 0, sizeof(Z80)); - Z80.daisy = config; - Z80.irq_callback = irqcallback; - - /* Clear registers values (NB: should be random on real hardware ?) */ - AF = BC = DE = HL = SP = IX = IY =0; - F = ZF; /* Zero flag is set */ - - /* setup cycle tables */ - cc[Z80_TABLE_op] = cc_op; - cc[Z80_TABLE_cb] = cc_cb; - cc[Z80_TABLE_ed] = cc_ed; - cc[Z80_TABLE_xy] = cc_xy; - cc[Z80_TABLE_xycb] = cc_xycb; - cc[Z80_TABLE_ex] = cc_ex; -} - -/**************************************************************************** - * Do a reset - ****************************************************************************/ -void z80_reset(void) -{ - PC = 0x0000; - I = 0; - R = 0; - R2 = 0; - IM = 0; - IFF1 = IFF2 = 0; - HALT = 0; - - Z80.after_ei = FALSE; - - WZ=PCD; -} - -/**************************************************************************** - * Run until given cycle count - ****************************************************************************/ -void z80_run(unsigned int cycles) -{ - while( Z80.cycles < cycles ) - { - /* check for IRQs before each instruction */ - if (Z80.irq_state && IFF1 && !Z80.after_ei) - { - take_interrupt(); - if (Z80.cycles >= cycles) return; - } - - Z80.after_ei = FALSE; - R++; - EXEC_INLINE(op,ROP()); - } -} - -/**************************************************************************** - * Get all registers in given buffer - ****************************************************************************/ -void z80_get_context (void *dst) -{ - if( dst ) - *(Z80_Regs*)dst = Z80; -} - -/**************************************************************************** - * Set all registers to given values - ****************************************************************************/ -void z80_set_context (void *src) -{ - if( src ) - Z80 = *(Z80_Regs*)src; -} - -/**************************************************************************** - * Set IRQ lines - ****************************************************************************/ -void z80_set_irq_line(unsigned int state) -{ - Z80.irq_state = state; -} - -void z80_set_nmi_line(unsigned int state) -{ - /* mark an NMI pending on the rising edge */ - if (Z80.nmi_state == CLEAR_LINE && state != CLEAR_LINE) - { - LOG(("Z80 #%d take NMI\n", cpu_getactivecpu())); - LEAVE_HALT; /* Check if processor was halted */ - - IFF1 = 0; - PUSH( pc ); - PCD = 0x0066; - WZ=PCD; - - Z80.cycles += 11*15; - } - - Z80.nmi_state = state; -} - diff --git a/waterbox/gpgx/core/z80/z80.h b/waterbox/gpgx/core/z80/z80.h deleted file mode 100644 index 0769e9a510..0000000000 --- a/waterbox/gpgx/core/z80/z80.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef Z80_H_ -#define Z80_H_ - -#include "osd_cpu.h" - -enum -{ - /* line states */ - CLEAR_LINE = 0, /* clear (a fired, held or pulsed) line */ - ASSERT_LINE, /* assert an interrupt immediately */ - HOLD_LINE, /* hold interrupt line until acknowledged */ - PULSE_LINE /* pulse interrupt line for one instruction */ -}; - -enum { - Z80_PC, Z80_SP, - Z80_A, Z80_B, Z80_C, Z80_D, Z80_E, Z80_H, Z80_L, - Z80_AF, Z80_BC, Z80_DE, Z80_HL, - Z80_IX, Z80_IY, Z80_AF2, Z80_BC2, Z80_DE2, Z80_HL2, - Z80_R, Z80_I, Z80_IM, Z80_IFF1, Z80_IFF2, Z80_HALT, - Z80_DC0, Z80_DC1, Z80_DC2, Z80_DC3, Z80_WZ -}; - -enum { - Z80_TABLE_op, - Z80_TABLE_cb, - Z80_TABLE_ed, - Z80_TABLE_xy, - Z80_TABLE_xycb, - Z80_TABLE_ex /* cycles counts for taken jr/jp/call and interrupt latency (rst opcodes) */ -}; - -/****************************************************************************/ -/* The Z80 registers. HALT is set to 1 when the CPU is halted, the refresh */ -/* register is calculated as follows: refresh=(Z80.r&127)|(Z80.r2&128) */ -/****************************************************************************/ -typedef struct -{ - PAIR pc,sp,af,bc,de,hl,ix,iy,wz; // 0x00 - PAIR af2,bc2,de2,hl2; // 0x24 - UINT8 r,r2,iff1,iff2,halt,im,i; // 0x34 - UINT8 nmi_state; // 0x3b /* nmi line state */ - UINT8 nmi_pending; // 0x3c /* nmi pending */ - UINT8 irq_state; // 0x3d /* irq line state */ - UINT8 after_ei; // 0x3e /* are we in the EI shadow? */ - UINT32 cycles; // 0x40 /* master clock cycles global counter */ - const struct z80_irq_daisy_chain *daisy; - int (*irq_callback)(int irqline); -} Z80_Regs; - - -extern Z80_Regs Z80; - -extern unsigned char *z80_readmap[64]; -extern unsigned char *z80_writemap[64]; - -extern void (*z80_writemem)(unsigned int address, unsigned char data); -extern unsigned char (*z80_readmem)(unsigned int address); -extern void (*z80_writeport)(unsigned int port, unsigned char data); -extern unsigned char (*z80_readport)(unsigned int port); - -extern void z80_init(const void *config, int (*irqcallback)(int)); -extern void z80_reset (void); -extern void z80_run(unsigned int cycles); -extern void z80_get_context (void *dst); -extern void z80_set_context (void *src); -extern void z80_set_irq_line(unsigned int state); -extern void z80_set_nmi_line(unsigned int state); - -extern UINT8 *SZHVC_add; -extern UINT8 *SZHVC_sub; - -#endif - diff --git a/waterbox/gpgx/util/osd.h b/waterbox/gpgx/util/osd.h index f2c8cdff8f..9ccdfe8473 100644 --- a/waterbox/gpgx/util/osd.h +++ b/waterbox/gpgx/util/osd.h @@ -1,5 +1,4 @@ -#ifndef _OSD_H -#define _OSD_H +#pragma once #ifdef _MSC_VER #include @@ -27,51 +26,59 @@ typedef unsigned char bool; #define M_PI 3.1415926535897932385 #endif -#define MAX_SPRITES_PER_LINE 80 -#define TMS_MAX_SPRITES_PER_LINE (config.no_sprite_limit ? MAX_SPRITES_PER_LINE : 4) -#define MODE4_MAX_SPRITES_PER_LINE (config.no_sprite_limit ? MAX_SPRITES_PER_LINE : 8) -#define MODE5_MAX_SPRITES_PER_LINE (config.no_sprite_limit ? MAX_SPRITES_PER_LINE : (bitmap.viewport.w >> 4)) -#define MODE5_MAX_SPRITE_PIXELS (config.no_sprite_limit ? MAX_SPRITES_PER_LINE * 32 : max_sprite_pixels) - typedef struct { - int8 device; - uint8 port; - uint8 padtype; + int8_t device; + uint8_t port; + uint8_t padtype; } t_input_config; -struct +struct config_t { - char version[16]; - uint8 hq_fm; - uint8 filter; - uint8 psgBoostNoise; - uint8 dac_bits; - uint8 ym2413; - uint8 mono; - int16 psg_preamp; - int16 fm_preamp; - uint16 lp_range; - int16 low_freq; - int16 high_freq; - int16 lg; - int16 mg; - int16 hg; - uint8 system; - uint8 region_detect; - uint8 master_clock; - uint8 vdp_mode; - uint8 force_dtack; - uint8 addr_error; - uint8 bios; - uint8 lock_on; - uint8 overscan; - uint8 ntsc; - uint8 gg_extra; - uint8 render; + uint8_t hq_fm; + uint8_t filter; + uint8_t hq_psg; + uint8_t ym2612; + uint8_t ym2413; + uint8_t ym3438; + uint8_t opll; + uint8_t cd_latency; + int16_t psg_preamp; + int16_t fm_preamp; + int16_t cdda_volume; + int16_t pcm_volume; + uint32_t lp_range; + int16_t low_freq; + int16_t high_freq; + int16_t lg; + int16_t mg; + int16_t hg; + uint8_t mono; + uint8_t system; + uint8_t region_detect; + uint8_t vdp_mode; + uint8_t master_clock; + uint8_t force_dtack; + uint8_t addr_error; + uint8_t bios; + uint8_t lock_on; + uint8_t add_on; + uint8_t hot_swap; + uint8_t invert_mouse; + uint8_t gun_cursor[2]; + uint8_t overscan; + uint8_t gg_extra; + uint8_t ntsc; + uint8_t lcd; + uint8_t render; + uint8_t enhanced_vscroll; + uint8_t enhanced_vscroll_limit; t_input_config input[MAX_INPUTS]; - uint8 no_sprite_limit; -} config; + uint8_t no_sprite_limit; + uint8_t sprites_always_on_top; +}; + +extern struct config_t config; extern char GG_ROM[256]; extern char AR_ROM[256]; @@ -81,6 +88,7 @@ extern char GG_BIOS[256]; extern char CD_BIOS_EU[256]; extern char CD_BIOS_US[256]; extern char CD_BIOS_JP[256]; +extern char MD_BIOS[256]; extern char MS_BIOS_US[256]; extern char MS_BIOS_EU[256]; extern char MS_BIOS_JP[256]; @@ -89,4 +97,3 @@ void osd_input_update(void); int load_archive(const char *filename, unsigned char *buffer, int maxsize, char *extension); void real_input_callback(void); -#endif /* _OSD_H */ diff --git a/waterbox/linkscript.T b/waterbox/linkscript.T index 3574a9d56a..ec147f144e 100644 --- a/waterbox/linkscript.T +++ b/waterbox/linkscript.T @@ -196,7 +196,7 @@ SECTIONS .bss section disappears because there are no input sections. FIXME: Why do we need it? When there is no .bss section, we do not pad the .data section. */ - . = ALIGN(. != 0 ? 64 / 8 : 1); + . = ALIGN(. != 0 ? 64 / 4 : 1); } .lbss : { @@ -204,19 +204,19 @@ SECTIONS *(.lbss .lbss.* .gnu.linkonce.lb.*) *(LARGE_COMMON) } - . = ALIGN(64 / 8); + . = ALIGN(64 / 4); . = SEGMENT_START("ldata-segment", .); .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.lrodata .lrodata.* .gnu.linkonce.lr.*) } - . = ALIGN(64 / 8); + . = ALIGN(64 / 4); .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : { *(.ldata .ldata.* .gnu.linkonce.l.*) - . = ALIGN(. != 0 ? 64 / 8 : 1); + . = ALIGN(. != 0 ? 64 / 4 : 1); } - . = ALIGN(64 / 8); + . = ALIGN(64 / 4); _end = .; PROVIDE (end = .); . = DATA_SEGMENT_END (.); /* Stabs debugging sections. */