From d7d25b7b60edf6ec20e58caa54e8a1dbfb9d7cd9 Mon Sep 17 00:00:00 2001 From: ShutOstrich <132171977+ShutOstrich@users.noreply.github.com> Date: Sun, 30 Apr 2023 00:32:22 +0200 Subject: [PATCH] Sync with upstream https://github.com/ekeeke/Genesis-Plus-GX/commit/1db51e2c5fb29fb1305683705e8f007a18341d97 --- genplusgx_source/cart_hw/md_cart.c | 124 ++++++--- genplusgx_source/cart_hw/md_cart.h | 2 +- genplusgx_source/cart_hw/sms_cart.c | 385 ++++++++++++++++++++++----- genplusgx_source/cart_hw/sms_cart.h | 3 +- genplusgx_source/input_hw/xe_1ap.c | 10 +- genplusgx_source/input_hw/xe_1ap.h | 2 +- genplusgx_source/m68k/m68kcpu.h | 6 +- genplusgx_source/m68k/m68ki_cycles.h | 138 +++++----- genplusgx_source/m68k/m68kops.h | 146 +++++++--- genplusgx_source/m68k/s68ki_cycles.h | 138 +++++----- genplusgx_source/vdp_ctrl.c | 10 +- genplusgx_source/vdp_ctrl.h | 2 +- 12 files changed, 678 insertions(+), 288 deletions(-) diff --git a/genplusgx_source/cart_hw/md_cart.c b/genplusgx_source/cart_hw/md_cart.c index 694c525..053e986 100644 --- a/genplusgx_source/cart_hw/md_cart.c +++ b/genplusgx_source/cart_hw/md_cart.c @@ -2,7 +2,7 @@ * Genesis Plus * Mega Drive cartridge hardware support * - * Copyright (C) 2007-2021 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2007-2023 Eke-Eke (Genesis Plus GX) * * Many cartridge protections were initially documented by Haze * (http://haze.mameworld.info/) @@ -71,6 +71,7 @@ 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 uint32 mapper_realtec_r(uint32 address); static void mapper_seganet_w(uint32 address, uint32 data); static void mapper_32k_w(uint32 data); static void mapper_64k_w(uint32 data); @@ -377,20 +378,20 @@ void md_cart_init(void) zbank_memory_map[i].write = zbank_unused_w; } - /* support for Quackshot REV 01 (real) dump */ - if (strstr(rominfo.product,"00004054-01") && (cart.romsize == 0x80000)) + /* support for Quackshot REV A original ROM dump (512KB) */ + if (strstr(rominfo.product,"00004054-01") && (cart.romsize == 0x80000) && (rominfo.checksum == 0xa4b3)) { - /* $000000-$0fffff: first 256K mirrored (A18 not connected to ROM chip, A19 not decoded) */ + /* $000000-$0fffff: lower 256KB mirrored (VA18 and VA19 not connected to ROM chip) */ for (i=0x00; i<0x10; i++) { - /* $200000-$3fffff: mirror of $000000-$1fffff (A21 not decoded) */ + /* $200000-$3fffff: mirror of $000000-$1fffff (VA21 not connected to ROM chip) */ 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) */ + /* $100000-$1fffff: upper 256KB mirrored (VA20 connected to ROM chip A19) */ for (i=0x10; i<0x20; i++) { - /* $200000-$3fffff: mirror of $000000-$1fffff (A21 not decoded) */ + /* $200000-$3fffff: mirror of $000000-$1fffff (VA21 not connected to ROM chip) */ m68k.memory_map[i].base = m68k.memory_map[i + 0x20].base = cart.rom + 0x40000 + ((i & 0x03) << 16); } } @@ -503,15 +504,12 @@ void md_cart_init(void) 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; - } + /* specific read handler for ROM header area */ + m68k.memory_map[0].read16 = mapper_realtec_r; } /* detect specific mappers */ - if (strstr(rominfo.consoletype,"SEGA SSF")) + else if (strstr(rominfo.consoletype,"SEGA SSF")) { /* Everdrive extended SSF mapper */ cart.hw.time_w = mapper_512k_w; @@ -803,8 +801,23 @@ void md_cart_reset(int hard_reset) { int i; + /* Realtec mapper */ + if (cart.hw.realtec) + { + /* Boot ROM (8KB mirrored) is mapped to $000000-$3FFFFF */ + for (i=0x00; i<0x40; i++) + { + m68k.memory_map[i].base = cart.rom + 0x400000; + } + + /* Reset mapper */ + cart.hw.regs[0] = 0; + cart.hw.regs[1] = 0; + cart.hw.regs[2] = 0; + } + /* reset cartridge mapping */ - if (cart.hw.bankshift) + else if (cart.hw.bankshift) { for (i=0x00; i<0x40; i++) { @@ -1615,43 +1628,56 @@ static uint32 mapper_smw_64_r(uint32 address) } /* - Realtec ROM bankswitch (Earth Defend, Balloon Boy & Funny World, Whac-A-Critter) - (Note: register usage is inverted in TascoDlx documentation) + Realtec ROM bankswitch (Earth Defend, Balloon Boy & Funny World, Whac-A-Critter, Tom Clown) + Verified with real cartridge hardware (slightly different from behavior described in TascoDlx documentation) */ static void mapper_realtec_w(uint32 address, uint32 data) { switch (address) { - case 0x402000: + case 0x402000: { - /* number of mapped 64k blocks (the written value is a number of 128k blocks) */ - cart.hw.regs[2] = data << 1; + /* fixed ROM bank size */ + /* when bit 0 is set, ROM A16 pin is forced to value configured in register below (connected to VA17 otherwise) */ + /* when bit 1 is set, ROM A17 pin is forced to value configured in register below (connected to VA18 otherwise) */ + /* other bits have no effect */ + cart.hw.regs[1] = (data & 3) << 1; return; } - case 0x404000: + case 0x404000: { - /* 00000xxx */ - cart.hw.regs[0] = data & 7; + /* fixed ROM bank selection (4 x 128KB banks) */ + /* bit 0 corresponds to ROM A16 pin value when forced */ + /* bit 1 corresponds to ROM A17 pin value when forced */ + /* other bits have no effect */ + cart.hw.regs[2] = (data & 3) << 1; return; } case 0x400000: { - /* 00000yy1 */ - cart.hw.regs[1] = data & 6; - - /* ensure mapped size is not null */ - if (cart.hw.regs[2]) + /* ROM access enable */ + /* when bit 0 is set, ROM A17/A16 pins are set according to above registers and ROM A15/A12 pins are connected to VA16-VA13 (forced to 1 on reset) */ + /* other bits habe no effect */ + if (data & 0x01) { - /* 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++) + /* once ROM access is enabled, ROM mapping can not be modified until next reset */ + if (!cart.hw.regs[0]) { - m68k.memory_map[i].base = &cart.rom[(base + (i % cart.hw.regs[2])) << 16]; + int i; + for (i=0x00; i<0x40; i++) + { + /* 0x000000-0x07ffff mapped area is mirrored in 4MB cartridge range (VA21-VA19 not connected) */ + uint32 base = i & 7; + + /* adjust 64k mapped area ROM base address according to fixed ROM bank configuration (see above) */ + base = (base & ~cart.hw.regs[1]) | (cart.hw.regs[2] & cart.hw.regs[1]); + + m68k.memory_map[i].base = &cart.rom[base << 16]; + } + + cart.hw.regs[0] = data; } } return; @@ -1659,6 +1685,19 @@ static void mapper_realtec_w(uint32 address, uint32 data) } } +static uint32 mapper_realtec_r(uint32 address) +{ + /* /VRES is asserted to bypass TMSS licensing screen when first read access to cartridge ROM header is detected */ + if ((address == 0x100) && (m68k.memory_map[0].base = cart.base)) + { + /* asserting /VRES from cartridge should only reset 68k CPU (TODO: confirm this on real hardware) */ + m68k_pulse_reset(); + } + + /* default ROM area read handler */ + return *(uint16 *)(m68k.memory_map[0].base + (address & 0xfffe)); +} + /* Game no Kanzume Otokuyou ROM Mapper */ static void mapper_seganet_w(uint32 address, uint32 data) { @@ -1959,23 +1998,24 @@ static uint32 mapper_128k_radica_r(uint32 address) /* - Custom logic (ST 16S25HB1 PAL) used in Micro Machines US cartridge (SR16V1.1 board) - +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - /VRES is asserted after write access to 0xA14101 (TMSS bank-shift register) - with D0=1 (cartridge ROM access enabled instead of TMSS Boot ROM) being detected + Custom logic (ST 16S25HB1 PAL) used in Micro Machines USA cartridge (SR16V1.1 board) + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + /VRES is asserted to bypass TMSS security checks when write access to 0xA141xx + with D0=1 is detected (access to cartridge ROM enabled instead of TMSS Boot ROM) */ static void mapper_sr16v1_w(uint32 address, uint32 data) { - /* 0xA10000-0xA1FFFF address range is mapped to I/O and Control registers */ + /* default I/O and Control registers write handler */ ctrl_io_write_byte(address, data); - /* cartridge uses /LWR, /AS and VA1-VA18 (only VA8-VA17 required to decode access to TMSS bank-shift register) */ + /* cartridge uses /LWR, /AS and VA1-VA18 (only VA8-VA17 are required to decode access to TMSS bankswitch register) */ if ((address & 0xff01) == 0x4101) { - /* cartridge ROM is enabled when D0=1 */ + /* check if cartridge ROM is enabled (D0=1) */ if (data & 0x01) { - gen_reset(0); + /* asserting /VRES from cartridge should only reset 68k CPU (TODO: confirm this on real hardware) */ + m68k_pulse_reset(); } } } diff --git a/genplusgx_source/cart_hw/md_cart.h b/genplusgx_source/cart_hw/md_cart.h index 7bdfcae..ad8b985 100644 --- a/genplusgx_source/cart_hw/md_cart.h +++ b/genplusgx_source/cart_hw/md_cart.h @@ -2,7 +2,7 @@ * Genesis Plus * Mega Drive cartridge hardware support * - * Copyright (C) 2007-2021 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2007-2023 Eke-Eke (Genesis Plus GX) * * Most cartridge protections were initially documented by Haze * (http://haze.mameworld.info/) diff --git a/genplusgx_source/cart_hw/sms_cart.c b/genplusgx_source/cart_hw/sms_cart.c index 6b3dd43..4a6080a 100644 --- a/genplusgx_source/cart_hw/sms_cart.c +++ b/genplusgx_source/cart_hw/sms_cart.c @@ -2,7 +2,10 @@ * Genesis Plus * SG-1000, Master System & Game Gear cartridge hardware support * - * Copyright (C) 2007-2022 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2007-2023 Eke-Eke (Genesis Plus GX) + * + * Credits to Ben Sittler and Omar Cornut at smspower.org for Korean mappers + * reverse-engineering and description * * Redistribution and use of this code or any derivative works are permitted * provided that the following conditions are met: @@ -40,23 +43,27 @@ #include "eeprom_93c.h" #include "terebi_oekaki.h" -#define MAPPER_NONE (0x00) -#define MAPPER_TEREBI (0x01) -#define MAPPER_RAM_2K (0x02) -#define MAPPER_RAM_8K (0x03) -#define MAPPER_RAM_8K_EXT1 (0x04) -#define MAPPER_SEGA (0x10) -#define MAPPER_SEGA_X (0x11) -#define MAPPER_93C46 (0x12) -#define MAPPER_CODIES (0x13) -#define MAPPER_MULTI_16K (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 MAPPER_MULTI_4X8K (0x23) -#define MAPPER_MULTI_32K (0x40) +#define MAPPER_NONE (0x00) +#define MAPPER_TEREBI (0x01) +#define MAPPER_RAM_2K (0x02) +#define MAPPER_RAM_8K (0x03) +#define MAPPER_RAM_8K_EXT1 (0x04) +#define MAPPER_SEGA (0x10) +#define MAPPER_SEGA_X (0x11) +#define MAPPER_93C46 (0x12) +#define MAPPER_CODIES (0x13) +#define MAPPER_MULTI_16K (0x14) +#define MAPPER_KOREA (0x15) +#define MAPPER_KOREA_16K (0x16) +#define MAPPER_MULTI_2x16K_V1 (0x17) +#define MAPPER_MULTI_2x16K_V2 (0x18) +#define MAPPER_MULTI_32K_16K (0x19) +#define MAPPER_KOREA_8K (0x20) +#define MAPPER_MSX (0x21) +#define MAPPER_MSX_NEMESIS (0x22) +#define MAPPER_MULTI_8K (0x23) +#define MAPPER_MULTI_4x8K (0x24) +#define MAPPER_MULTI_32K (0x40) typedef struct { @@ -92,36 +99,50 @@ static const rominfo_t game_list[] = {0x23BAC434, 0, 0, 0, MAPPER_SEGA_X, SYSTEM_GG, REGION_USA}, /* Shining Force Gaiden - Final Conflict (JP) [T-Eng] */ /* games using "Korean" mappers */ - {0x445525E2, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Penguin Adventure (KR) */ - {0x83F0EEDE, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Street Master (KR) */ - {0xA05258F5, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Won-Si-In (KR) */ - {0x06965ED9, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* F-1 Spirit - The way to Formula-1 (KR) */ - {0x77EFE84A, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Cyborg Z (KR) */ - {0xF89AF3CC, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Knightmare II - The Maze of Galious (KR) */ - {0x9195C34C, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Boy 3 (KR) */ - {0xE316C06D, 0, 0, 0, MAPPER_MSX_NEMESIS, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis (KR) */ - {0x0A77FA5E, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis 2 (KR) */ - {0x89B79E77, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Dodgeball King (KR) */ - {0x929222C4, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Jang Pung II (KR) */ - {0x18FB98A3, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Jang Pung 3 (KR) */ - {0x97D03541, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Sangokushi 3 (KR) */ - {0x192949D5, 0, 0, 0, MAPPER_KOREA_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Janggun-ui Adeul (KR) */ - {0x76C5BDFB, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Jang Pung II [SMS-GG] (KR) */ - {0x01A2D595, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Battle [Proto] [SMS-GG] (US) */ - {0x9FA727A0, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 0] [SMS-GG] (US) */ - {0xFB481971, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 1] [SMS-GG] (US) */ - {0xA67F2A5C, 0, 0, 0, MAPPER_MULTI_16K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* 4-Pak All Action (KR) */ - {0x98AF0236, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 1) (KR) */ - {0x6EBFE1C3, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 2) (KR) */ - {0x81A36A4F, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 3) (KR) */ - {0x8D2D695D, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 4) (KR) */ - {0x82C09B57, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 5) (KR) */ - {0x4088EEB4, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 6) (KR) */ - {0xFBA94148, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 8-in-1 The Best Game Collection (Vol. 1) (KR) */ - {0x8333C86E, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 8-in-1 The Best Game Collection (Vol. 2) (KR) */ - {0x00E9809F, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 8-in-1 The Best Game Collection (Vol. 3) (KR) */ - {0xBA5EC0E3, 0, 0, 0, MAPPER_MULTI_4X8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* 128 Hap (KR) */ - {0x380D7400, 0, 0, 0, MAPPER_MULTI_4X8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Game Mo-eumjip 188 Hap (KR) */ + {0x445525E2, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Penguin Adventure (KR) */ + {0x83F0EEDE, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Street Master (KR) */ + {0xA05258F5, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Wonsiin (KR) */ + {0x06965ED9, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* F-1 Spirit - The way to Formula-1 (KR) */ + {0x77EFE84A, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Cyborg Z (KR) */ + {0xF89AF3CC, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Knightmare II: The Maze of Galious (KR) */ + {0x9195C34C, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Boy 3 (KR) */ + {0xE316C06D, 0, 0, 0, MAPPER_MSX_NEMESIS, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis (KR) */ + {0x0A77FA5E, 0, 0, 0, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis 2 (KR) */ + {0x89B79E77, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Dodgeball King (KR) */ + {0x929222C4, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Jang Pung II (KR) */ + {0x18FB98A3, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Jang Pung 3 (KR) */ + {0x97D03541, 0, 0, 0, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Sangokushi 3 (KR) */ + {0x192949D5, 0, 0, 0, MAPPER_KOREA_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Janggun-ui Adeul (KR) */ + {0x76C5BDFB, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Jang Pung II [SMS-GG] (KR) */ + {0x01A2D595, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Battle [Proto] [SMS-GG] (US) */ + {0x9FA727A0, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 0] [SMS-GG] (US) */ + {0xFB481971, 0, 0, 0, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 1] [SMS-GG] (US) */ + {0xA67F2A5C, 0, 0, 0, MAPPER_MULTI_16K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* 4-Pak All Action (KR) */ + {0x98AF0236, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 1) (KR) */ + {0x6EBFE1C3, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 2) (KR) */ + {0x81A36A4F, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 3) (KR) */ + {0x8D2D695D, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 4) (KR) */ + {0x82C09B57, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 5) (KR) */ + {0x4088EEB4, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 3-in-1 The Best Game Collection (Vol. 6) (KR) */ + {0xFBA94148, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 8-in-1 The Best Game Collection (Vol. 1) (KR) */ + {0x8333C86E, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 8-in-1 The Best Game Collection (Vol. 2) (KR) */ + {0x00E9809F, 0, 0, 0, MAPPER_MULTI_32K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hi-Com 8-in-1 The Best Game Collection (Vol. 3) (KR) */ + {0xBA5EC0E3, 0, 0, 0, MAPPER_MULTI_4x8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* 128 Hap (KR) */ + {0x380D7400, 0, 0, 0, MAPPER_MULTI_4x8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Game Mo-eumjip 188 Hap [v0] (KR) */ + {0xC76601E0, 0, 0, 0, MAPPER_MULTI_4x8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Game Mo-eumjip 188 Hap [v1] (KR) */ + {0x38B3A72F, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Game Chongjiphap 200 (KR).sms */ + {0xD3056492, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game 270 Hap ~ Jaemissneun-270 (KR) */ + {0xAB07ECD4, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game World 260 Hap (KR) */ + {0x0CDE0938, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game World 30 Hap (KR) */ + {0xC29BB8CD, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game World 75 Hap (KR) */ + {0x660BF6EC, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Multi Game - Super 75 in 1 (KR) */ + {0xEB7790DE, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Multi Game - Super 125 in 1 (KR) */ + {0xE6AD4D4B, 0, 0, 0, MAPPER_MULTI_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super World 30 Hap (KR) */ + {0xEDB13847, 0, 0, 0, MAPPER_MULTI_2x16K_V1, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game 45 (KR) */ + {0xA841C0B7, 0, 0, 0, MAPPER_MULTI_2x16K_V2, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game 52 Hap (KR) */ + {0x4E202AA2, 0, 0, 0, MAPPER_MULTI_2x16K_V2, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game 180 (KR) */ + {0xBA5D2776, 0, 0, 0, MAPPER_MULTI_2x16K_V2, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Game 200 (KR) */ + {0xC0AC6956, 0, 0, 0, MAPPER_MULTI_32K_16K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Pigu-Wang 7 Hap - Jaemiiss-neun Game Mo-eumjip (KR) */ /* games using Codemaster mapper */ {0x29822980, 0, 0, 0, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Cosmic Spacehead */ @@ -145,6 +166,7 @@ static const rominfo_t game_list[] = /* games using serial EEPROM */ {0x36EBCD6D, 0, 0, 0, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* Majors Pro Baseball */ + {0x2DA8E943, 0, 0, 0, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* Pro Yakyuu GG League */ {0x3D8D0DD6, 0, 0, 0, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v0] */ {0xBB38CFD7, 0, 0, 0, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v1] */ {0x578A8A38, 0, 0, 0, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball '95 */ @@ -160,22 +182,24 @@ static const rominfo_t game_list[] = {0x092F29D6, 0, 0, 0, MAPPER_RAM_8K, SYSTEM_SG, REGION_JAPAN_NTSC}, /* The Castle (J) */ /* games requiring SG-1000 II 8K RAM extension adapter (type A) */ + {0x16F240D3, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Adventure Island [DahJee] (TW) */ {0xCE5648C3, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Bomberman Special [DahJee] (TW) */ {0x223397A1, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* King's Valley (TW) */ - {0x281D2888, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Knightmare (TW) */ + {0x281D2888, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Knightmare [Jumbo] (TW) */ {0x306D5F78, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Rally-X [DahJee] (TW) */ {0x29E047CC, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */ {0x5CBD1163, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Tank Battalion (TW) */ + {0x40414556, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* The Goonies (TW) */ {0x2E7166D5, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* The Legend of Kage (TW) */ {0xC550B4F0, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* TwinBee (TW) */ {0xFC87463C, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Yie Ar Kung-Fu II (TW) */ {0xDF7CBFA5, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Pippols (TW) */ - {0xE0816BB7, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Star Soldier (TW) */ + {0xE0816BB7, 0, 0, 0, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Star Soldier [DahJee] (TW) */ /* games requiring SG-1000 II 8K RAM extension adapter (type B) */ {0x69FC1494, 0, 0, 0, MAPPER_NONE, SYSTEM_SGII_RAM_EXT, REGION_JAPAN_NTSC}, /* Bomberman Special (TW) */ {0xFFC4EE3F, 0, 0, 0, MAPPER_NONE, SYSTEM_SGII_RAM_EXT, REGION_JAPAN_NTSC}, /* Magical Kid Wiz (TW) */ - {0x2E366CCF, 0, 0, 0, MAPPER_NONE, SYSTEM_SGII_RAM_EXT, REGION_JAPAN_NTSC}, /* The Castle (TW) */ + {0x2E366CCF, 0, 0, 0, MAPPER_NONE, SYSTEM_SGII_RAM_EXT, REGION_JAPAN_NTSC}, /* The Castle [MSX] (TW) */ {0xAAAC12CF, 0, 0, 0, MAPPER_NONE, SYSTEM_SGII_RAM_EXT, REGION_JAPAN_NTSC}, /* Rally-X (TW) */ {0xD2EDD329, 0, 0, 0, MAPPER_NONE, SYSTEM_SGII_RAM_EXT, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */ @@ -427,7 +451,11 @@ 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_16k(unsigned int address, unsigned char data); +static void write_mapper_multi_2x16k_v1(unsigned int address, unsigned char data); +static void write_mapper_multi_2x16k_v2(unsigned int address, unsigned char data); +static void write_mapper_multi_32k_16k(unsigned int address, unsigned char data); static void write_mapper_multi_32k(unsigned int address, unsigned char data); +static void write_mapper_multi_8k(unsigned int address, unsigned char data); static void write_mapper_multi_4x8k(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); @@ -616,7 +644,8 @@ void sms_cart_reset(void) case MAPPER_KOREA_8K: case MAPPER_MSX: case MAPPER_MSX_NEMESIS: - case MAPPER_MULTI_4X8K: + case MAPPER_MULTI_4x8K: + case MAPPER_MULTI_8K: cart_rom.fcr[0] = 0; cart_rom.fcr[1] = 0; cart_rom.fcr[2] = 0; @@ -737,6 +766,24 @@ void sms_cart_switch(uint8 mode) } } +int sms_cart_ram_size(void) +{ + if ((cart_rom.mapper == MAPPER_RAM_8K) || (cart_rom.mapper == MAPPER_RAM_8K_EXT1)) + { + /* 8KB on-board RAM */ + return 0x2000; + } + + if (cart_rom.mapper == MAPPER_RAM_2K) + { + /* 2KB on-board RAM */ + return 0x800; + } + + /* no on-board RAM by default */ + return 0; +} + int sms_cart_region_detect(void) { int i = sizeof(game_list) / sizeof(rominfo_t) - 1; @@ -837,7 +884,8 @@ int sms_cart_context_load(uint8 *state) case MAPPER_KOREA_8K: case MAPPER_MSX: case MAPPER_MSX_NEMESIS: - case MAPPER_MULTI_4X8K: + case MAPPER_MULTI_4x8K: + case MAPPER_MULTI_8K: cart_rom.fcr[0] = 0; cart_rom.fcr[1] = 0; cart_rom.fcr[2] = 0; @@ -1011,7 +1059,7 @@ static void mapper_reset(void) /* "Nemesis" mapper specific */ if (slot.mapper == MAPPER_MSX_NEMESIS) { - /* first 8KB page is mapped to last 8KB ROM bank */ + /* first 8KB page ($0000-$1FFF) is mapped to last 8KB ROM bank */ for (i = 0x00; i < 0x08; i++) { z80_readmap[i] = &slot.rom[(0x0f << 13) | ((i & 0x07) << 10)]; @@ -1026,10 +1074,24 @@ static void mapper_reset(void) else { /* 16KB pages */ - mapper_16k_w(0,slot.fcr[0]); - mapper_16k_w(1,slot.fcr[1]); - mapper_16k_w(2,slot.fcr[2]); - mapper_16k_w(3,slot.fcr[3]); + if ((slot.mapper == MAPPER_MULTI_2x16K_V1) || (slot.mapper == MAPPER_MULTI_2x16K_V2)) + { + mapper_16k_w(1,slot.fcr[1]); + mapper_16k_w(2,slot.fcr[2]); + } + else if (slot.mapper == MAPPER_MULTI_32K_16K) + { + mapper_16k_w(1,slot.fcr[1]); + mapper_16k_w(2,slot.fcr[2]); + mapper_16k_w(3,slot.fcr[3]); + } + else + { + mapper_16k_w(0,slot.fcr[0]); + mapper_16k_w(1,slot.fcr[1]); + mapper_16k_w(2,slot.fcr[2]); + mapper_16k_w(3,slot.fcr[3]); + } } } @@ -1073,12 +1135,32 @@ static void mapper_reset(void) z80_writemem = write_mapper_multi_16k; break; + case MAPPER_MULTI_2x16K_V1: + z80_readmem = read_mapper_default; + z80_writemem = write_mapper_multi_2x16k_v1; + break; + + case MAPPER_MULTI_2x16K_V2: + z80_readmem = read_mapper_default; + z80_writemem = write_mapper_multi_2x16k_v2; + break; + + case MAPPER_MULTI_32K_16K: + z80_readmem = read_mapper_default; + z80_writemem = write_mapper_multi_32k_16k; + break; + case MAPPER_MULTI_32K: z80_readmem = read_mapper_default; z80_writemem = write_mapper_multi_32k; break; - case MAPPER_MULTI_4X8K: + case MAPPER_MULTI_8K: + z80_readmem = read_mapper_default; + z80_writemem = write_mapper_multi_8k; + break; + + case MAPPER_MULTI_4x8K: z80_readmem = read_mapper_default; z80_writemem = write_mapper_multi_4x8k; break; @@ -1128,6 +1210,17 @@ static void mapper_8k_w(int offset, unsigned char data) { z80_readmap[i] = &page[(i & 0x07) << 10]; } + + /* Multi Korean mapper specific */ + if (slot.mapper == MAPPER_MULTI_8K) + { + /* $2000-$3FFF is mirror of $A000-$BFFF */ + for (i = 0x08; i < 0x10; i++) + { + z80_readmap[i] = z80_readmap[0x20 + i]; + } + } + break; } @@ -1225,7 +1318,7 @@ static void mapper_16k_w(int offset, unsigned char data) case 1: /* cartridge ROM bank (16KB) at $0000-$3FFF */ { /* first 1KB is not fixed (CODEMASTER or MULTI mappers only) */ - if ((slot.mapper == MAPPER_CODIES) || (slot.mapper == MAPPER_MULTI_16K)) + if (slot.mapper >= MAPPER_CODIES) { z80_readmap[0] = &slot.rom[(page << 14)]; } @@ -1268,13 +1361,66 @@ static void mapper_16k_w(int offset, unsigned char data) } } } + + /* Multi Korean mappers specific */ + else if (slot.mapper == MAPPER_MULTI_2x16K_V1) + { + if (slot.fcr[0] != 0x01) + { + /* $8000-$BFFF is not mapped to cartridge ROM (unused area) */ + for (i = 0x20; i < 0x30; i++) + { + z80_readmap[i] = cart.rom + 0x510400; + } + } + else + { + /* $8000-$9FFF is mirror of $6000-$7FFF */ + for (i = 0x20; i < 0x28; i++) + { + z80_readmap[i] = z80_readmap[i - 0x08]; + } + + /* $A000-$BFFF is mirror of $4000-$5FFF */ + for (i = 0x28; i < 0x30; i++) + { + z80_readmap[i] = z80_readmap[i - 0x18]; + } + } + } + else if (slot.mapper == MAPPER_MULTI_2x16K_V2) + { + if (slot.fcr[0] != 0x03) + { + /* $8000-$BFFF is not mapped to cartridge ROM (unused area) */ + for (i = 0x20; i < 0x30; i++) + { + z80_readmap[i] = cart.rom + 0x510400; + } + } + else + { + /* $8000-$9FFF is mirror of $6000-$7FFF */ + for (i = 0x20; i < 0x28; i++) + { + z80_readmap[i] = z80_readmap[i - 0x08]; + } + + /* $A000-$BFFF is mirror of $4000-$5FFF */ + for (i = 0x28; i < 0x30; i++) + { + z80_readmap[i] = z80_readmap[i - 0x18]; + } + } + } + break; } case 3: /* cartridge ROM bank (16KB) at $8000-$BFFF */ { /* check that external RAM (16KB) is not mapped at $8000-$BFFF (SEGA mapper only) */ - if ((slot.fcr[0] & 0x08)) break; + if ((slot.fcr[0] & 0x08) && (slot.mapper != MAPPER_MULTI_32K_16K)) break; /* first 8KB */ for (i = 0x20; i < 0x28; i++) @@ -1389,6 +1535,94 @@ static void write_mapper_multi_16k(unsigned int address, unsigned char data) z80_writemap[address >> 10][address & 0x03FF] = data; } +static void write_mapper_multi_2x16k_v1(unsigned int address, unsigned char data) +{ + if (address == 0xFFFE) + { + /* save mapper configuration to unused register */ + slot.fcr[0] = (data >> 5) & 0x03; + + if (slot.fcr[0] & 0x02) + { + data &= 0x1e; + mapper_16k_w(1,data); + mapper_16k_w(2,data+1); + } + else + { + data &= 0x1f; + mapper_16k_w(1,0x00); + mapper_16k_w(2,data); + } + } + + z80_writemap[address >> 10][address & 0x03FF] = data; +} + +static void write_mapper_multi_2x16k_v2(unsigned int address, unsigned char data) +{ + if (address == 0xBFFC) + { + /* save mapper configuration to unused register */ + slot.fcr[0] = (data >> 6) & 0x03; + + switch (slot.fcr[0]) + { + case 0x00: + { + data &= 0x3e; + mapper_16k_w(1,data); + mapper_16k_w(2,data+1); + return; + } + + case 0x01: + { + data &= 0x3f; + mapper_16k_w(1,data); + mapper_16k_w(2,data); + return; + } + + default: + { + data &= 0x3f; + mapper_16k_w(1,0x20); + mapper_16k_w(2,data); + return; + } + } + } + + z80_writemap[address >> 10][address & 0x03FF] = data; +} + +static void write_mapper_multi_32k_16k(unsigned int address, unsigned char data) +{ + z80_writemap[address >> 10][address & 0x03FF] = data; + + address &= 0xBFEF; + + if (address == 0xBFE5) + { + /* save 16K bank index to unused register */ + slot.fcr[0] = (data & 0x3f) << 1; + mapper_16k_w(1,slot.fcr[0]); + mapper_16k_w(2,slot.fcr[0]+1); + mapper_16k_w(3,slot.fcr[0]+1); + } + else if (address == 0xBFEE) + { + data &= 0x1f; + mapper_16k_w(2,slot.fcr[0]+data); + } + else if (address == 0xBFEF) + { + data &= 0x1f; + mapper_16k_w(3,slot.fcr[0]+data); + } +} + static void write_mapper_multi_32k(unsigned int address, unsigned char data) { if (address == 0xFFFF) @@ -1399,6 +1633,35 @@ static void write_mapper_multi_32k(unsigned int address, unsigned char data) z80_writemap[address >> 10][address & 0x03FF] = data; } +static void write_mapper_multi_8k(unsigned int address, unsigned char data) +{ + if (address == 0x0000) + { + mapper_8k_w(0,data); + return; + } + + if (address == 0x0100) + { + mapper_8k_w(2,data); + return; + } + + if (address == 0x0200) + { + mapper_8k_w(1,data); + return; + } + + if (address == 0x0300) + { + mapper_8k_w(3,data); + return; + } + + z80_writemap[address >> 10][address & 0x03FF] = data; +} + static void write_mapper_multi_4x8k(unsigned int address, unsigned char data) { if (address == 0x2000) diff --git a/genplusgx_source/cart_hw/sms_cart.h b/genplusgx_source/cart_hw/sms_cart.h index d216f96..07eb0d5 100644 --- a/genplusgx_source/cart_hw/sms_cart.h +++ b/genplusgx_source/cart_hw/sms_cart.h @@ -2,7 +2,7 @@ * Genesis Plus * SG-1000, Master System & Game Gear cartridge hardware support * - * Copyright (C) 2007-2022 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2007-2023 Eke-Eke (Genesis Plus GX) * * Redistribution and use of this code or any derivative works are permitted * provided that the following conditions are met: @@ -47,6 +47,7 @@ extern void sms_cart_init(void); extern void sms_cart_reset(void); extern void sms_cart_switch(uint8 mode); +extern int sms_cart_ram_size(void); extern int sms_cart_region_detect(void); extern int sms_cart_context_save(uint8 *state); extern int sms_cart_context_load(uint8 *state); diff --git a/genplusgx_source/input_hw/xe_1ap.c b/genplusgx_source/input_hw/xe_1ap.c index 606011e..7cfb4f7 100644 --- a/genplusgx_source/input_hw/xe_1ap.c +++ b/genplusgx_source/input_hw/xe_1ap.c @@ -2,7 +2,7 @@ * Genesis Plus * XE-1AP analog controller support * - * Copyright (C) 2011-2015 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2011-2022 Eke-Eke (Genesis Plus GX) * * Redistribution and use of this code or any derivative works are permitted * provided that the following conditions are met: @@ -96,12 +96,12 @@ INLINE unsigned char xe_1ap_read(int index) case 9: /* CH3 low (Throttle vertical or horizontal direction) */ data = input.analog[port+1][0] & 0x0F; break; - case 10: /* A B A' B' buttons status (active low) */ - data = (~input.pad[port] >> 6) & 0x0F; - break; - default: /* N/A */ + case 10: /* N/A */ data = 0x0F; break; + case 11: /* A B A' B' buttons status (active low) */ + data = (~input.pad[port] >> 6) & 0x0F; + break; } /* TL indicates current data cycle (0=1st cycle, 1=2nd cycle, etc) */ diff --git a/genplusgx_source/input_hw/xe_1ap.h b/genplusgx_source/input_hw/xe_1ap.h index 1a56e04..cf1081d 100644 --- a/genplusgx_source/input_hw/xe_1ap.h +++ b/genplusgx_source/input_hw/xe_1ap.h @@ -2,7 +2,7 @@ * Genesis Plus * XE-1AP analog controller support * - * Copyright (C) 2011-2015 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2011-2022 Eke-Eke (Genesis Plus GX) * * Redistribution and use of this code or any derivative works are permitted * provided that the following conditions are met: diff --git a/genplusgx_source/m68k/m68kcpu.h b/genplusgx_source/m68k/m68kcpu.h index 13f0c0a..9caae5e 100644 --- a/genplusgx_source/m68k/m68kcpu.h +++ b/genplusgx_source/m68k/m68kcpu.h @@ -596,12 +596,12 @@ static const uint16 m68ki_exception_cycle_table[256] = 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 */ + 38*MUL, /* 6: CHK -- ASG: changed from 44 */ 34*MUL, /* 7: TRAPV */ 34*MUL, /* 8: Privilege Violation */ 34*MUL, /* 9: Trace */ - 4*MUL, /* 10: 1010 */ - 4*MUL, /* 11: 1111 */ + 34*MUL, /* 10: 1010 */ + 34*MUL, /* 11: 1111 */ 4*MUL, /* 12: RESERVED */ 4*MUL, /* 13: Coprocessor Protocol Violation (unemulated) */ 4*MUL, /* 14: Format Error */ diff --git a/genplusgx_source/m68k/m68ki_cycles.h b/genplusgx_source/m68k/m68ki_cycles.h index d679732..6b18bb2 100644 --- a/genplusgx_source/m68k/m68ki_cycles.h +++ b/genplusgx_source/m68k/m68ki_cycles.h @@ -20,15 +20,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*7, 8*7, 8*7, 8*7, 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -52,15 +52,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*7, 8*7, 8*7, 8*7, 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -84,15 +84,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*7, 8*7, 8*7, 8*7, 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -116,15 +116,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*7, 8*7, 8*7, 8*7, 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -132,31 +132,31 @@ static const unsigned char m68ki_cycles[0x10000] = 12*7, 12*7, 12*7, 12*7, 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, + 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, 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, + 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, + 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -180,15 +180,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*7, 8*7, 8*7, 8*7, 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -212,15 +212,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*7, 8*7, 8*7, 8*7, 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -244,15 +244,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*7, 8*7, 8*7, 8*7, 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, 10*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, + 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*7, 8*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, + 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*7, 6*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, @@ -1048,10 +1048,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, 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, 0*7, 0*7, 0*7, 0*7, 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, @@ -1080,10 +1080,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, 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, 0*7, 0*7, 0*7, 0*7, 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, @@ -1112,10 +1112,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, 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, 0*7, 0*7, 0*7, 0*7, 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, @@ -1144,10 +1144,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, 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, 0*7, 0*7, 0*7, 0*7, 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, @@ -1176,10 +1176,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, 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, 0*7, 0*7, 0*7, 0*7, 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, @@ -1208,10 +1208,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, 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, 0*7, 0*7, 0*7, 0*7, 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, @@ -1240,22 +1240,22 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, + 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, + 0*7, 0*7, 0*7, 0*7, 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, 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, 4*7, 4*7, 20*7, 0*7, 16*7, 0*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, @@ -1272,10 +1272,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 0*7, 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, 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, 0*7, 0*7, 0*7, 0*7, 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, diff --git a/genplusgx_source/m68k/m68kops.h b/genplusgx_source/m68k/m68kops.h index 1a8d10d..a3db558 100644 --- a/genplusgx_source/m68k/m68kops.h +++ b/genplusgx_source/m68k/m68kops.h @@ -4661,6 +4661,11 @@ static void m68k_op_bchg_32_r_d(void) uint* r_dst = &DY; uint mask = 1 << (DX & 0x1f); + if (mask & 0xffff0000) + { + USE_CYCLES(2 * MUL); + } + FLAG_Z = *r_dst & mask; *r_dst ^= mask; } @@ -4770,6 +4775,11 @@ static void m68k_op_bchg_32_s_d(void) uint* r_dst = &DY; uint mask = 1 << (OPER_I_8() & 0x1f); + if (mask & 0xffff0000) + { + USE_CYCLES(2 * MUL); + } + FLAG_Z = *r_dst & mask; *r_dst ^= mask; } @@ -4879,6 +4889,11 @@ static void m68k_op_bclr_32_r_d(void) uint* r_dst = &DY; uint mask = 1 << (DX & 0x1f); + if (mask & 0xffff0000) + { + USE_CYCLES(2 * MUL); + } + FLAG_Z = *r_dst & mask; *r_dst &= ~mask; } @@ -4988,6 +5003,11 @@ static void m68k_op_bclr_32_s_d(void) uint* r_dst = &DY; uint mask = 1 << (OPER_I_8() & 0x1f); + if (mask & 0xffff0000) + { + USE_CYCLES(2 * MUL); + } + FLAG_Z = *r_dst & mask; *r_dst &= ~mask; } @@ -5117,6 +5137,11 @@ static void m68k_op_bset_32_r_d(void) uint* r_dst = &DY; uint mask = 1 << (DX & 0x1f); + if (mask & 0xffff0000) + { + USE_CYCLES(2 * MUL); + } + FLAG_Z = *r_dst & mask; *r_dst |= mask; } @@ -5226,6 +5251,11 @@ static void m68k_op_bset_32_s_d(void) uint* r_dst = &DY; uint mask = 1 << (OPER_I_8() & 0x1f); + if (mask & 0xffff0000) + { + USE_CYCLES(2 * MUL); + } + FLAG_Z = *r_dst & mask; *r_dst |= mask; } @@ -5536,9 +5566,14 @@ static void m68k_op_chk_16_d(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5554,9 +5589,14 @@ static void m68k_op_chk_16_ai(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5572,9 +5612,14 @@ static void m68k_op_chk_16_pi(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5590,9 +5635,14 @@ static void m68k_op_chk_16_pd(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5608,9 +5658,14 @@ static void m68k_op_chk_16_di(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5626,9 +5681,14 @@ static void m68k_op_chk_16_ix(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5644,9 +5704,14 @@ static void m68k_op_chk_16_aw(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5662,9 +5727,14 @@ static void m68k_op_chk_16_al(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5680,9 +5750,14 @@ static void m68k_op_chk_16_pcdi(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5698,9 +5773,14 @@ static void m68k_op_chk_16_pcix(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -5716,9 +5796,14 @@ static void m68k_op_chk_16_i(void) if(src >= 0 && src <= bound) { + USE_CYCLES(10 * MUL); return; } - FLAG_N = (src < 0)<<7; + if(src < 0) + { + FLAG_N = 1<<7; + USE_CYCLES(2 * MUL); + } m68ki_exception_trap(EXCEPTION_CHK); } @@ -23358,6 +23443,7 @@ static void m68k_op_trapv(void) { if(COND_VC()) { + USE_CYCLES (4 * MUL); return; } m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ @@ -23717,21 +23803,21 @@ static const opcode_handler_struct m68k_opcode_handler_table[] = {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_bchg_32_r_d , 0xf1f8, 0x0140, 6}, {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_bclr_32_r_d , 0xf1f8, 0x0180, 8}, {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_bset_32_r_d , 0xf1f8, 0x01c0, 6}, {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}, @@ -23872,12 +23958,12 @@ static const opcode_handler_struct m68k_opcode_handler_table[] = {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_chk_16_d , 0xf1f8, 0x4180, 0}, + {m68k_op_chk_16_ai , 0xf1f8, 0x4190, 4}, + {m68k_op_chk_16_pi , 0xf1f8, 0x4198, 4}, + {m68k_op_chk_16_pd , 0xf1f8, 0x41a0, 6}, + {m68k_op_chk_16_di , 0xf1f8, 0x41a8, 8}, + {m68k_op_chk_16_ix , 0xf1f8, 0x41b0, 10}, {m68k_op_lea_32_ai , 0xf1f8, 0x41d0, 4}, {m68k_op_lea_32_di , 0xf1f8, 0x41e8, 8}, {m68k_op_lea_32_ix , 0xf1f8, 0x41f0, 12}, @@ -24231,7 +24317,7 @@ static const opcode_handler_struct m68k_opcode_handler_table[] = {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_trap , 0xfff0, 0x4e40, 0}, {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}, @@ -24363,11 +24449,11 @@ static const opcode_handler_struct m68k_opcode_handler_table[] = {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_chk_16_aw , 0xf1ff, 0x41b8, 8}, + {m68k_op_chk_16_al , 0xf1ff, 0x41b9, 12}, + {m68k_op_chk_16_pcdi , 0xf1ff, 0x41ba, 8}, + {m68k_op_chk_16_pcix , 0xf1ff, 0x41bb, 10}, + {m68k_op_chk_16_i , 0xf1ff, 0x41bc, 4}, {m68k_op_lea_32_aw , 0xf1ff, 0x41f8, 8}, {m68k_op_lea_32_al , 0xf1ff, 0x41f9, 12}, {m68k_op_lea_32_pcdi , 0xf1ff, 0x41fa, 8}, @@ -24646,19 +24732,19 @@ static const opcode_handler_struct m68k_opcode_handler_table[] = {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_32_s_d , 0xfff8, 0x0840, 10}, {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_32_s_d , 0xfff8, 0x0880, 12}, {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_32_s_d , 0xfff8, 0x08c0, 10}, {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}, @@ -25265,7 +25351,7 @@ static const opcode_handler_struct m68k_opcode_handler_table[] = {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_trapv , 0xffff, 0x4e76, 0}, {m68k_op_rtr_32 , 0xffff, 0x4e77, 20}, {m68k_op_jsr_32_aw , 0xffff, 0x4eb8, 18}, {m68k_op_jsr_32_al , 0xffff, 0x4eb9, 20}, diff --git a/genplusgx_source/m68k/s68ki_cycles.h b/genplusgx_source/m68k/s68ki_cycles.h index 71afe4d..5ceb26a 100644 --- a/genplusgx_source/m68k/s68ki_cycles.h +++ b/genplusgx_source/m68k/s68ki_cycles.h @@ -20,15 +20,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*4, 8*4, 8*4, 8*4, 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -52,15 +52,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*4, 8*4, 8*4, 8*4, 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -84,15 +84,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*4, 8*4, 8*4, 8*4, 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -116,15 +116,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*4, 8*4, 8*4, 8*4, 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -132,31 +132,31 @@ static const unsigned char m68ki_cycles[0x10000] = 12*4, 12*4, 12*4, 12*4, 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, + 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, 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, + 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, + 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -180,15 +180,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*4, 8*4, 8*4, 8*4, 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -212,15 +212,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*4, 8*4, 8*4, 8*4, 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -244,15 +244,15 @@ static const unsigned char m68ki_cycles[0x10000] = 8*4, 8*4, 8*4, 8*4, 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, 10*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, + 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*4, 8*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, + 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*4, 6*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, @@ -1048,10 +1048,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, 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, 0*4, 0*4, 0*4, 0*4, 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, @@ -1080,10 +1080,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, 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, 0*4, 0*4, 0*4, 0*4, 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, @@ -1112,10 +1112,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, 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, 0*4, 0*4, 0*4, 0*4, 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, @@ -1144,10 +1144,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, 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, 0*4, 0*4, 0*4, 0*4, 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, @@ -1176,10 +1176,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, 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, 0*4, 0*4, 0*4, 0*4, 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, @@ -1208,10 +1208,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, 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, 0*4, 0*4, 0*4, 0*4, 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, @@ -1240,22 +1240,22 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, + 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, + 0*4, 0*4, 0*4, 0*4, 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, 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, 4*4, 4*4, 20*4, 0*4, 16*4, 0*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, @@ -1272,10 +1272,10 @@ static const unsigned char m68ki_cycles[0x10000] = 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 0*4, 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, 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, 0*4, 0*4, 0*4, 0*4, 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, diff --git a/genplusgx_source/vdp_ctrl.c b/genplusgx_source/vdp_ctrl.c index c70735d..d34a9ce 100644 --- a/genplusgx_source/vdp_ctrl.c +++ b/genplusgx_source/vdp_ctrl.c @@ -5,7 +5,7 @@ * Support for SG-1000 (TMS99xx & 315-5066), Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP * * Copyright (C) 1998-2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2022 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2007-2023 Eke-Eke (Genesis Plus GX) * * Redistribution and use of this code or any derivative works are permitted * provided that the following conditions are met: @@ -721,6 +721,10 @@ void vdp_68k_ctrl_w(unsigned int data) } } + /* Update address and code registers */ + addr = addr_latch | (data & 0x3FFF); + code = ((code & 0x3C) | ((data >> 14) & 0x03)); + /* Check CD0-CD1 bits */ if ((data & 0xC000) == 0x8000) { @@ -732,10 +736,6 @@ void vdp_68k_ctrl_w(unsigned int data) /* 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 { diff --git a/genplusgx_source/vdp_ctrl.h b/genplusgx_source/vdp_ctrl.h index 351f6b4..c5c6972 100644 --- a/genplusgx_source/vdp_ctrl.h +++ b/genplusgx_source/vdp_ctrl.h @@ -5,7 +5,7 @@ * Support for SG-1000 (TMS99xx & 315-5066), Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP * * Copyright (C) 1998-2003 Charles Mac Donald (original code) - * Copyright (C) 2007-2022 Eke-Eke (Genesis Plus GX) + * Copyright (C) 2007-2023 Eke-Eke (Genesis Plus GX) * * Redistribution and use of this code or any derivative works are permitted * provided that the following conditions are met: