From 88d9135bac5226fa1b35955f52f7e87b42e6346c Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Mon, 27 Oct 2014 15:52:00 +0200 Subject: pet_cass.xml: Added many new images, including the Cursor tapes. [Dagarman] --- hash/pet_cass.xml | 1201 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1195 insertions(+), 6 deletions(-) diff --git a/hash/pet_cass.xml b/hash/pet_cass.xml index 223307ca56d..8fce47a0149 100644 --- a/hash/pet_cass.xml +++ b/hash/pet_cass.xml @@ -1,15 +1,1204 @@ + - - Lunar Lander - 197? - <unknown> + + Acquire + 1982 + Microcomputer Games + + + + + + + + + + + Andromeda Conquest + 1982 + + + Microcomputer Games + + + + + + + + + B-1 Bomber Game + 1982 + + + Microcomputer Games + + + + + + + + + Baseball Strategy + 1982 + + + Microcomputer Games + + + + + + + + + + Blackjack + 1978 + + + Commodore Business Machines, Inc. + + + + + + + + + Arcade Pak #3 Bomber Attack + 1982 + + + Avalon Hill + + + + + + + + + Bulls and Bears + 1978 + + + Speakeasy Software + + + + + + + + + Casino Blackjack 5.7 + 1979 + + + Speakeasy Software + + + + + + + + + Conflict 2500 + 1981 + + + Microcomputer Games + + + + + + + + + Cursor 1 + 1978 + + + The Code Works + + + + + + + + + Cursor 2 + 1978 + + + The Code Works + + + + + + + + + Cursor 3 + 1978 + + + The Code Works + + + + + + + + + Cursor 4 + 1978 + + + The Code Works + + + + + + + + + + Cursor 5 + 1978 + + + The Code Works + + + + + + + + + Cursor 6 + 1979 + + + The Code Works + + + + + + + + + Cursor 7 + 1979 + + + The Code Works + + + + + + + + + Cursor 8 + 1979 + + + The Code Works + + + + + + + + + Cursor 9 + 1979 + + + The Code Works + + + + + + + + + Cursor 10 + 1979 + + + The Code Works + + + + + + + + + Cursor 11 + 1979 + + + The Code Works + + + + + + + + + Cursor 12 + 1979 + + + The Code Works + + + + + + + + + Cursor 13 + 1979 + + + The Code Works + + + + + + + + + Cursor 14 + 1979 + + + The Code Works + + + + + + + + + Cursor 15 + 1979 + + + The Code Works + + + + + + + + + Cursor 16 + 1980 + + + The Code Works + + + + + + + + + Cursor 17 + 1980 + + + The Code Works + + + + + + + + + Cursor 18 + 1980 + + + The Code Works + + + + + + + + + Cursor 19 + 1980 + + + The Code Works + + + + + + + + + Cursor 20 + 1980 + + + The Code Works + + + + + + + + + Cursor 21 + 1980 + + + The Code Works + + + + + + + + + Cursor 22 + 1980 + + + The Code Works + + + + + + + + + Cursor 23 + 1980 + + + The Code Works + + + + + + + + + Cursor 24 + 1981 + + + The Code Works + + + + + + + + + Cursor 25 + 1981 + + + The Code Works + + + + + + + + + Cursor 26 + 1981 + + + The Code Works + + + + + + + + + Cursor 27 + 1981 + + + The Code Works + + + + + + + + + Cursor 28 + 1981 + + + The Code Works + + + + + + + + + Cursor 29 + 1982 + + + The Code Works + + + + + + + + + Cursor 30 + 1982 + + + The Code Works + + + + + + + + + + Draw Poker + 1978 + Commodore Business Machines, Inc. + + + + + + + + + + + Adjectives 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Adjectives 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Adjectives 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Adjectives 4 + 1980 + + + Activity rRecords, Inc. + + + + + + + + + Adverbs 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Adverbs 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Adverbs 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Adverbs 4 + 1980 + + + Activity Records, Inc. + + + + + + + + + Contractions 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Contractions 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Contractions 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Contractions 4 + 1980 + + + Activity Records, Inc. + + + + + + + + + Flash Spelling + 1980 + + + Activity Records, Inc. + + + + + + + + + Homonyms 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Homonyms 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Homonyms 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Homonyms 4 + 1980 + + + Activity Records, Inc. + + + + + + + + + Nouns 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Nouns 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Nouns 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Nouns 4 + 1980 + + + Activity Records, Inc. + + + + + + + + + Pronouns 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Pronouns 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Pronouns 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Pronouns 4 + 1980 + + + Activity Records, Inc. + + + + + + + + + Scrambled Letters + 1980 + + + Activity Records, Inc. + + + + + + + + + Synonyms 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Synonyms 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Synonyms 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Synonyms 4 + 1980 + + + Activity Records, Inc. + + + + + + + + + Verbs 1 + 1980 + + + Activity Records, Inc. + + + + + + + + + Verbs 2 + 1980 + + + Activity Records, Inc. + + + + + + + + + Verbs 3 + 1980 + + + Activity Records, Inc. + + + + + + + + + Verbs 4 + 1980 + + + Activity Records, Inc. + + + + + + + + + GALAXY! + 1982 + + + Microcomputer Games + + + + + + + + + + + Galaxy Games + 1978 + + + Commodore Business Machines, Inc. + + + + + + + + + The Guns of Fort Defiance + 1981 + + + Commodore Business Machines, Inc. + + + + + + + + + Microchess 2.0 + 1978 + + + Micro-ware + + + + + + + + + Midway Campaign + 1980 + Microcomputer Games + + + + + + + + + + + North Atlantic Convoy Raider + 1980 + + + Microcomputer Games + + + + + + + + + + Osero / Reverse + 1978 + Commodore Business Machines, Inc. + - - + + + + + + + + + + + + + + + PET Checkers + 1980 + + + CMS Software Systems + + + + + + + + + The Planet Miners + 1979 + + + Microcomputer Games + + + + + + + + + Santa Paravia and Fiumaccio + 1978 + + + Folklife Terminal Club + + + + + + + + + + Space Fight + 1978 + Commodore Business Machines, Inc. + + + + + + + + + + + Tanktics + 1981 + + + Microcomputer Games + + + + + + + + + + Target Pong/Off-The-Wall + 1978 + Commodore Business Machines, Inc. + + + + + + + + + + + + + + + + + + Telengard + 1982 + + + Microcomputer Games + + + + + + + + + Temple of Apshai + 1979 + Automated Simulations + + + + + + + + + + + + A Treasure Trove of Games + 1978 + Commodore Business Machines, Inc. + + + + + + + + + + + + -- cgit v1.2.3 From 1e49bea0a57d1ef85b7b08650b6ae9ed54c19b0c Mon Sep 17 00:00:00 2001 From: cracyc Date: Mon, 27 Oct 2014 09:37:57 -0500 Subject: (mess) hdc: xenix 8086 hates this so isolate it (nw) --- src/emu/bus/isa/hdc.c | 16 +++++++++++++++- src/emu/bus/isa/hdc.h | 14 ++++++++++++++ src/emu/bus/isa/xsu_cards.c | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/emu/bus/isa/hdc.c b/src/emu/bus/isa/hdc.c index 0d866e4580b..79dc7185d00 100644 --- a/src/emu/bus/isa/hdc.c +++ b/src/emu/bus/isa/hdc.c @@ -149,6 +149,7 @@ INPUT_PORTS_END //************************************************************************** const device_type ISA8_HDC = &device_creator; +const device_type ISA8_HDC_EC1841 = &device_creator; //------------------------------------------------- // machine_config_additions - device-specific @@ -190,6 +191,19 @@ isa8_hdc_device::isa8_hdc_device(const machine_config &mconfig, const char *tag, device_t(mconfig, ISA8_HDC, "Fixed Disk Controller Card", tag, owner, clock, "hdc", __FILE__), device_isa8_card_interface(mconfig, *this) { + m_type = STANDARD; +} + +isa8_hdc_device::isa8_hdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : + device_t(mconfig, type, name, tag, owner, clock, shortname, source), + device_isa8_card_interface(mconfig, *this) +{ +} + +isa8_hdc_ec1841_device::isa8_hdc_ec1841_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + isa8_hdc_device( mconfig, ISA8_HDC_EC1841, "EC1841 HDC", tag, owner, clock, "hdc_ec1841", __FILE__) +{ + m_type = EC1841; } //------------------------------------------------- @@ -750,7 +764,7 @@ void isa8_hdc_device::pc_hdc_data_w(int data) *buffer_ptr++ = data; // XXX ec1841 wants this - if (buffer[0] == CMD_SETPARAM && data_cnt == 9) { + if (buffer[0] == CMD_SETPARAM && data_cnt == 9 && (m_type == EC1841)) { status &= ~STA_READY; } else { status |= STA_READY; diff --git a/src/emu/bus/isa/hdc.h b/src/emu/bus/isa/hdc.h index 7aadb51ea32..7fdf067bc96 100644 --- a/src/emu/bus/isa/hdc.h +++ b/src/emu/bus/isa/hdc.h @@ -25,6 +25,7 @@ class isa8_hdc_device : public: // construction/destruction isa8_hdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + isa8_hdc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); // optional information overrides virtual machine_config_constructor device_mconfig_additions() const; @@ -89,6 +90,12 @@ protected: void get_drive(); void get_chsn(); int test_ready(); + + enum { + STANDARD, + EC1841 + }; + int m_type; public: void hdc_command(); void pc_hdc_data_w(int data); @@ -101,7 +108,14 @@ public: }; +class isa8_hdc_ec1841_device : public isa8_hdc_device +{ +public: + isa8_hdc_ec1841_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + // device type definition extern const device_type ISA8_HDC; +extern const device_type ISA8_HDC_EC1841; #endif /* ISA_HDC_H */ diff --git a/src/emu/bus/isa/xsu_cards.c b/src/emu/bus/isa/xsu_cards.c index f32a21ce907..992eaf222d6 100644 --- a/src/emu/bus/isa/xsu_cards.c +++ b/src/emu/bus/isa/xsu_cards.c @@ -48,7 +48,7 @@ SLOT_INTERFACE_START( ec184x_isa8_cards ) SLOT_INTERFACE("ec1841.0004", ISA8_EC1841_0004) // BSC-like serial ports + parallel port */ SLOT_INTERFACE("mda", ISA8_MDA) - SLOT_INTERFACE("hdc", ISA8_HDC) + SLOT_INTERFACE("hdc", ISA8_HDC_EC1841) SLOT_INTERFACE("pccom", ISA8_COM) SLOT_INTERFACE("pclpt", ISA8_LPT) SLOT_INTERFACE("xtide", ISA8_XTIDE) -- cgit v1.2.3 From 2b946e17f9e0da6bfdba5915ca81095e55695ac9 Mon Sep 17 00:00:00 2001 From: Osso Date: Mon, 27 Oct 2014 18:41:53 +0100 Subject: peplus.c: moved function to driver state and removed various trampolines. (nw) --- src/mame/drivers/jackie.c | 14 +- src/mame/drivers/peplus.c | 412 ++++++++++++++++++---------------------------- 2 files changed, 171 insertions(+), 255 deletions(-) diff --git a/src/mame/drivers/jackie.c b/src/mame/drivers/jackie.c index 6707dc4e02a..38dcf3c2d74 100644 --- a/src/mame/drivers/jackie.c +++ b/src/mame/drivers/jackie.c @@ -264,13 +264,13 @@ void jackie_state::machine_reset() } -void jackie_state::show_out() -{ -#ifdef MAME_DEBUG -// popmessage("%02x %02x %02x", state->m_out[0], state->m_out[1], state->m_out[2]); - popmessage("520: %04x %04x %04x %04x %04x\n560: %04x %04x %04x %04x %04x\n5A0: %04x %04x %04x %04x %04x", - m_unk_reg[0][0],m_unk_reg[0][1],m_unk_reg[0][2],m_unk_reg[0][3],m_unk_reg[0][4], - m_unk_reg[1][0],m_unk_reg[1][1],m_unk_reg[1][2],m_unk_reg[1][3],m_unk_reg[1][4], +void jackie_state::show_out() +{ +#ifdef MAME_DEBUG +// popmessage("%02x %02x %02x", m_out[0], m_out[1], m_out[2]); + popmessage("520: %04x %04x %04x %04x %04x\n560: %04x %04x %04x %04x %04x\n5A0: %04x %04x %04x %04x %04x", + m_unk_reg[0][0],m_unk_reg[0][1],m_unk_reg[0][2],m_unk_reg[0][3],m_unk_reg[0][4], + m_unk_reg[1][0],m_unk_reg[1][1],m_unk_reg[1][2],m_unk_reg[1][3],m_unk_reg[1][4], m_unk_reg[2][0],m_unk_reg[2][1],m_unk_reg[2][2],m_unk_reg[2][3],m_unk_reg[2][4] ); #endif diff --git a/src/mame/drivers/peplus.c b/src/mame/drivers/peplus.c index e82ffbb7c1c..d676ceec027 100644 --- a/src/mame/drivers/peplus.c +++ b/src/mame/drivers/peplus.c @@ -203,39 +203,49 @@ public: { TIMER_ASSERT_LP }; - - peplus_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_cmos_ram(*this, "cmos") , - m_program_ram(*this, "prograram"), - m_s3000_ram(*this, "s3000_ram"), - m_s5000_ram(*this, "s5000_ram"), + + peplus_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_crtc(*this, "crtc"), + m_i2cmem(*this, "i2cmem"), + m_screen(*this, "screen"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_cmos_ram(*this, "cmos"), + m_program_ram(*this, "prograram"), + m_s3000_ram(*this, "s3000_ram"), + m_s5000_ram(*this, "s5000_ram"), m_videoram(*this, "videoram"), m_s7000_ram(*this, "s7000_ram"), - m_sb000_ram(*this, "sb000_ram"), - m_sd000_ram(*this, "sd000_ram"), - m_sf000_ram(*this, "sf000_ram"), - m_io_port(*this, "io_port"), - m_maincpu(*this, "maincpu"), - m_i2cmem(*this, "i2cmem"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") - { - } - - required_shared_ptr m_cmos_ram; - required_shared_ptr m_program_ram; - required_shared_ptr m_s3000_ram; + m_sb000_ram(*this, "sb000_ram"), + m_sd000_ram(*this, "sd000_ram"), + m_sf000_ram(*this, "sf000_ram"), + m_io_port(*this, "io_port") + { + } + + required_device m_maincpu; + required_device m_crtc; + required_device m_i2cmem; + required_device m_screen; + required_device m_gfxdecode; + required_device m_palette; + + required_shared_ptr m_cmos_ram; + required_shared_ptr m_program_ram; + required_shared_ptr m_s3000_ram; required_shared_ptr m_s5000_ram; required_shared_ptr m_videoram; required_shared_ptr m_s7000_ram; required_shared_ptr m_sb000_ram; - required_shared_ptr m_sd000_ram; - required_shared_ptr m_sf000_ram; - required_shared_ptr m_io_port; - tilemap_t *m_bg_tilemap; - UINT8 m_wingboard; - UINT8 m_doorcycle; + required_shared_ptr m_sd000_ram; + required_shared_ptr m_sf000_ram; + required_shared_ptr m_io_port; + + tilemap_t *m_bg_tilemap; + UINT8 m_wingboard; + UINT8 m_doorcycle; UINT16 door_wait; UINT8 m_jumper_e16_e17; UINT16 m_vid_address; @@ -257,35 +267,21 @@ public: UINT8 m_bv_last_enable_state; UINT8 m_bv_enable_state; UINT8 m_bv_enable_count; - UINT8 m_bv_data_bit; - UINT8 m_bv_loop_count; - UINT16 id023_data; - DECLARE_WRITE8_MEMBER(peplus_bgcolor_w); - DECLARE_WRITE8_MEMBER(peplus_crtc_display_w); - DECLARE_WRITE8_MEMBER(peplus_io_w); - DECLARE_WRITE8_MEMBER(peplus_duart_w); - DECLARE_WRITE8_MEMBER(peplus_cmos_w); - DECLARE_WRITE8_MEMBER(peplus_s3000_w); - DECLARE_WRITE8_MEMBER(peplus_s5000_w); - DECLARE_WRITE8_MEMBER(peplus_s7000_w); - DECLARE_WRITE8_MEMBER(peplus_sb000_w); - DECLARE_WRITE8_MEMBER(peplus_sd000_w); - DECLARE_WRITE8_MEMBER(peplus_sf000_w); - DECLARE_WRITE8_MEMBER(peplus_output_bank_a_w); - DECLARE_WRITE8_MEMBER(peplus_output_bank_b_w); - DECLARE_WRITE8_MEMBER(peplus_output_bank_c_w); - DECLARE_READ8_MEMBER(peplus_io_r); - DECLARE_READ8_MEMBER(peplus_duart_r); - DECLARE_READ8_MEMBER(peplus_cmos_r); - DECLARE_READ8_MEMBER(peplus_s3000_r); - DECLARE_READ8_MEMBER(peplus_s5000_r); - DECLARE_READ8_MEMBER(peplus_s7000_r); - DECLARE_READ8_MEMBER(peplus_sb000_r); - DECLARE_READ8_MEMBER(peplus_sd000_r); - DECLARE_READ8_MEMBER(peplus_sf000_r); - DECLARE_READ8_MEMBER(peplus_bgcolor_r); - DECLARE_READ8_MEMBER(peplus_dropdoor_r); - DECLARE_READ8_MEMBER(peplus_watchdog_r); + UINT8 m_bv_data_bit; + UINT8 m_bv_loop_count; + UINT16 id023_data; + + DECLARE_WRITE8_MEMBER(peplus_bgcolor_w); + DECLARE_WRITE8_MEMBER(peplus_crtc_display_w); + DECLARE_WRITE8_MEMBER(peplus_duart_w); + DECLARE_WRITE8_MEMBER(peplus_cmos_w); + DECLARE_WRITE8_MEMBER(peplus_output_bank_a_w); + DECLARE_WRITE8_MEMBER(peplus_output_bank_b_w); + DECLARE_WRITE8_MEMBER(peplus_output_bank_c_w); + DECLARE_READ8_MEMBER(peplus_duart_r); + DECLARE_READ8_MEMBER(peplus_bgcolor_r); + DECLARE_READ8_MEMBER(peplus_dropdoor_r); + DECLARE_READ8_MEMBER(peplus_watchdog_r); DECLARE_CUSTOM_INPUT_MEMBER(peplus_input_r); DECLARE_WRITE8_MEMBER(peplus_crtc_mode_w); DECLARE_WRITE_LINE_MEMBER(crtc_vsync); @@ -300,16 +296,13 @@ public: MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr); virtual void machine_reset(); virtual void video_start(); - UINT32 screen_update_peplus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void peplus_load_superdata(const char *bank_name); - DECLARE_PALETTE_INIT(peplus); - required_device m_maincpu; - required_device m_i2cmem; - required_device m_gfxdecode; - required_device m_palette; - -protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + UINT32 screen_update_peplus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void peplus_load_superdata(const char *bank_name); + DECLARE_PALETTE_INIT(peplus); + void handle_lightpen(); + +protected: + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); }; static const UINT8 id_022[8] = { 0x00, 0x01, 0x04, 0x09, 0x13, 0x16, 0x18, 0x00 }; @@ -389,57 +382,50 @@ WRITE8_MEMBER(peplus_state::peplus_crtc_mode_w) void peplus_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - switch (id) - { - case TIMER_ASSERT_LP: - downcast((device_t*)ptr)->assert_light_pen_input(); - break; - default: - assert_always(FALSE, "Unknown id in peplus_state::device_timer"); + switch (id) + { + case TIMER_ASSERT_LP: + m_crtc->assert_light_pen_input(); + break; + default: + assert_always(FALSE, "Unknown id in peplus_state::device_timer"); } -} - - -static void handle_lightpen( mc6845_device *device ) -{ - peplus_state *state = device->machine().driver_data(); - int x_val = device->machine().root_device().ioport("TOUCH_X")->read_safe(0x00); - int y_val = device->machine().root_device().ioport("TOUCH_Y")->read_safe(0x00); - const rectangle &vis_area = device->screen().visible_area(); - int xt, yt; - - xt = x_val * vis_area.width() / 1024 + vis_area.min_x; - yt = y_val * vis_area.height() / 1024 + vis_area.min_y; - - state->timer_set(device->screen().time_until_pos(yt, xt), peplus_state::TIMER_ASSERT_LP, 0, device); -} - -WRITE_LINE_MEMBER(peplus_state::crtc_vsync) -{ - mc6845_device *device = machine().device("crtc"); - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); - handle_lightpen(device); -} - -WRITE8_MEMBER(peplus_state::peplus_crtc_display_w) +} + + +void peplus_state::handle_lightpen() +{ + int x_val = ioport("TOUCH_X")->read_safe(0x00); + int y_val = ioport("TOUCH_Y")->read_safe(0x00); + const rectangle &vis_area = m_screen->visible_area(); + int xt, yt; + + xt = x_val * vis_area.width() / 1024 + vis_area.min_x; + yt = y_val * vis_area.height() / 1024 + vis_area.min_y; + + timer_set(m_screen->time_until_pos(yt, xt), TIMER_ASSERT_LP, 0); +} + +WRITE_LINE_MEMBER(peplus_state::crtc_vsync) +{ + m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); + handle_lightpen(); +} + +WRITE8_MEMBER(peplus_state::peplus_crtc_display_w) { UINT8 *videoram = m_videoram; videoram[m_vid_address] = data; m_palette_ram[m_vid_address] = m_io_port[1]; m_palette_ram2[m_vid_address] = m_io_port[3]; - m_bg_tilemap->mark_tile_dirty(m_vid_address); - - /* An access here triggers a device read !*/ - machine().device("crtc")->register_r(space, 0); -} - -WRITE8_MEMBER(peplus_state::peplus_io_w) -{ - m_io_port[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_duart_w) + m_bg_tilemap->mark_tile_dirty(m_vid_address); + + /* An access here triggers a device read !*/ + m_crtc->register_r(space, 0); +} + +WRITE8_MEMBER(peplus_state::peplus_duart_w) { // Used for Slot Accounting System Communication } @@ -455,42 +441,12 @@ WRITE8_MEMBER(peplus_state::peplus_cmos_w) peplus_load_superdata(bank_name); } - m_cmos_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_s3000_w) -{ - m_s3000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_s5000_w) -{ - m_s5000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_s7000_w) -{ - m_s7000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_sb000_w) -{ - m_sb000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_sd000_w) -{ - m_sd000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_sf000_w) -{ - m_sf000_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_output_bank_a_w) -{ - output_set_value("pe_bnka0",(data >> 0) & 1); /* Coin Lockout */ + m_cmos_ram[offset] = data; +} + +WRITE8_MEMBER(peplus_state::peplus_output_bank_a_w) +{ + output_set_value("pe_bnka0",(data >> 0) & 1); /* Coin Lockout */ output_set_value("pe_bnka1",(data >> 1) & 1); /* Diverter */ output_set_value("pe_bnka2",(data >> 2) & 1); /* Bell */ output_set_value("pe_bnka3",(data >> 3) & 1); /* N/A */ @@ -539,58 +495,18 @@ WRITE8_MEMBER(peplus_state::i2c_nvram_w) /**************** -* Read Handlers * -****************/ - -READ8_MEMBER(peplus_state::peplus_io_r) -{ - return m_io_port[offset]; -} - -READ8_MEMBER(peplus_state::peplus_duart_r) -{ - // Used for Slot Accounting System Communication - return 0x00; -} - -READ8_MEMBER(peplus_state::peplus_cmos_r) -{ - return m_cmos_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_s3000_r) -{ - return m_s3000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_s5000_r) -{ - return m_s5000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_s7000_r) -{ - return m_s7000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_sb000_r) -{ - return m_sb000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_sd000_r) -{ - return m_sd000_ram[offset]; -} - -READ8_MEMBER(peplus_state::peplus_sf000_r) -{ - return m_sf000_ram[offset]; -} - -/* Last Color in Every Palette is bgcolor */ -READ8_MEMBER(peplus_state::peplus_bgcolor_r) -{ +* Read Handlers * +****************/ + +READ8_MEMBER(peplus_state::peplus_duart_r) +{ + // Used for Slot Accounting System Communication + return 0x00; +} + +/* Last Color in Every Palette is bgcolor */ +READ8_MEMBER(peplus_state::peplus_bgcolor_r) +{ return m_palette->pen_color(15); // Return bgcolor from First Palette } @@ -1053,65 +969,65 @@ GFXDECODE_END static ADDRESS_MAP_START( peplus_map, AS_PROGRAM, 8, peplus_state ) AM_RANGE(0x0000, 0xffff) AM_ROM AM_SHARE("prograram") ADDRESS_MAP_END - -static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) - // Battery-backed RAM (0x1000-0x01fff Extended RAM for Superboards Only) - AM_RANGE(0x0000, 0x1fff) AM_READWRITE(peplus_cmos_r, peplus_cmos_w) AM_SHARE("cmos") - - // CRT Controller - AM_RANGE(0x2008, 0x2008) AM_WRITE(peplus_crtc_mode_w) + +static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) + // Battery-backed RAM (0x1000-0x01fff Extended RAM for Superboards Only) + AM_RANGE(0x0000, 0x1fff) AM_RAM_WRITE(peplus_cmos_w) AM_SHARE("cmos") + + // CRT Controller + AM_RANGE(0x2008, 0x2008) AM_WRITE(peplus_crtc_mode_w) AM_RANGE(0x2080, 0x2080) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w) AM_RANGE(0x2081, 0x2081) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) - AM_RANGE(0x2083, 0x2083) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(peplus_crtc_display_w) - - // Superboard Data - AM_RANGE(0x3000, 0x3fff) AM_READWRITE(peplus_s3000_r, peplus_s3000_w) AM_SHARE("s3000_ram") - - // Sound and Dipswitches - AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("aysnd", ay8910_device, address_w) - AM_RANGE(0x4004, 0x4004) AM_READ_PORT("SW1")/* likely ay8910 input port, not direct */ AM_DEVWRITE("aysnd", ay8910_device, data_w) - - // Superboard Data - AM_RANGE(0x5000, 0x5fff) AM_READWRITE(peplus_s5000_r, peplus_s5000_w) AM_SHARE("s5000_ram") - - // Background Color Latch - AM_RANGE(0x6000, 0x6000) AM_READ(peplus_bgcolor_r) AM_WRITE(peplus_bgcolor_w) + AM_RANGE(0x2083, 0x2083) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(peplus_crtc_display_w) + + // Superboard Data + AM_RANGE(0x3000, 0x3fff) AM_RAM AM_SHARE("s3000_ram") + + // Sound and Dipswitches + AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("aysnd", ay8910_device, address_w) + AM_RANGE(0x4004, 0x4004) AM_READ_PORT("SW1")/* likely ay8910 input port, not direct */ AM_DEVWRITE("aysnd", ay8910_device, data_w) + + // Superboard Data + AM_RANGE(0x5000, 0x5fff) AM_RAM AM_SHARE("s5000_ram") + + // Background Color Latch + AM_RANGE(0x6000, 0x6000) AM_READ(peplus_bgcolor_r) AM_WRITE(peplus_bgcolor_w) // Bogus Location for Video RAM - AM_RANGE(0x06001, 0x06400) AM_RAM AM_SHARE("videoram") - - // Superboard Data - AM_RANGE(0x7000, 0x7fff) AM_READWRITE(peplus_s7000_r, peplus_s7000_w) AM_SHARE("s7000_ram") - - // Input Bank A, Output Bank C - AM_RANGE(0x8000, 0x8000) AM_READ(peplus_input_bank_a_r) AM_WRITE(peplus_output_bank_c_w) + AM_RANGE(0x06001, 0x06400) AM_RAM AM_SHARE("videoram") + + // Superboard Data + AM_RANGE(0x7000, 0x7fff) AM_RAM AM_SHARE("s7000_ram") + + // Input Bank A, Output Bank C + AM_RANGE(0x8000, 0x8000) AM_READ(peplus_input_bank_a_r) AM_WRITE(peplus_output_bank_c_w) // Drop Door, I2C EEPROM Writes AM_RANGE(0x9000, 0x9000) AM_READ(peplus_dropdoor_r) AM_WRITE(i2c_nvram_w) // Input Banks B & C, Output Bank B - AM_RANGE(0xa000, 0xa000) AM_READ(peplus_input0_r) AM_WRITE(peplus_output_bank_b_w) - - // Superboard Data - AM_RANGE(0xb000, 0xbfff) AM_READWRITE(peplus_sb000_r, peplus_sb000_w) AM_SHARE("sb000_ram") - - // Output Bank A - AM_RANGE(0xc000, 0xc000) AM_READ(peplus_watchdog_r) AM_WRITE(peplus_output_bank_a_w) - - // Superboard Data - AM_RANGE(0xd000, 0xdfff) AM_READWRITE(peplus_sd000_r, peplus_sd000_w) AM_SHARE("sd000_ram") - - // DUART - AM_RANGE(0xe000, 0xe00f) AM_READWRITE(peplus_duart_r, peplus_duart_w) - - // Superboard Data - AM_RANGE(0xf000, 0xffff) AM_READWRITE(peplus_sf000_r, peplus_sf000_w) AM_SHARE("sf000_ram") - - /* Ports start here */ - AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(peplus_io_r) AM_WRITE(peplus_io_w) AM_SHARE("io_port") -ADDRESS_MAP_END - - + AM_RANGE(0xa000, 0xa000) AM_READ(peplus_input0_r) AM_WRITE(peplus_output_bank_b_w) + + // Superboard Data + AM_RANGE(0xb000, 0xbfff) AM_RAM AM_SHARE("sb000_ram") + + // Output Bank A + AM_RANGE(0xc000, 0xc000) AM_READ(peplus_watchdog_r) AM_WRITE(peplus_output_bank_a_w) + + // Superboard Data + AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("sd000_ram") + + // DUART + AM_RANGE(0xe000, 0xe00f) AM_READWRITE(peplus_duart_r, peplus_duart_w) + + // Superboard Data + AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("sf000_ram") + + /* Ports start here */ + AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_RAM AM_SHARE("io_port") +ADDRESS_MAP_END + + /************************* * Input ports * *************************/ -- cgit v1.2.3 From ff6a09c72f59f6898aa2d15fadf2d3213f566869 Mon Sep 17 00:00:00 2001 From: miodragm Date: Mon, 27 Oct 2014 18:50:29 +0100 Subject: fix line endings --- src/mame/drivers/jackie.c | 14 +- src/mame/drivers/peplus.c | 328 +++++++++++++++++++++++----------------------- 2 files changed, 171 insertions(+), 171 deletions(-) diff --git a/src/mame/drivers/jackie.c b/src/mame/drivers/jackie.c index 38dcf3c2d74..5f21d38be05 100644 --- a/src/mame/drivers/jackie.c +++ b/src/mame/drivers/jackie.c @@ -264,13 +264,13 @@ void jackie_state::machine_reset() } -void jackie_state::show_out() -{ -#ifdef MAME_DEBUG -// popmessage("%02x %02x %02x", m_out[0], m_out[1], m_out[2]); - popmessage("520: %04x %04x %04x %04x %04x\n560: %04x %04x %04x %04x %04x\n5A0: %04x %04x %04x %04x %04x", - m_unk_reg[0][0],m_unk_reg[0][1],m_unk_reg[0][2],m_unk_reg[0][3],m_unk_reg[0][4], - m_unk_reg[1][0],m_unk_reg[1][1],m_unk_reg[1][2],m_unk_reg[1][3],m_unk_reg[1][4], +void jackie_state::show_out() +{ +#ifdef MAME_DEBUG +// popmessage("%02x %02x %02x", m_out[0], m_out[1], m_out[2]); + popmessage("520: %04x %04x %04x %04x %04x\n560: %04x %04x %04x %04x %04x\n5A0: %04x %04x %04x %04x %04x", + m_unk_reg[0][0],m_unk_reg[0][1],m_unk_reg[0][2],m_unk_reg[0][3],m_unk_reg[0][4], + m_unk_reg[1][0],m_unk_reg[1][1],m_unk_reg[1][2],m_unk_reg[1][3],m_unk_reg[1][4], m_unk_reg[2][0],m_unk_reg[2][1],m_unk_reg[2][2],m_unk_reg[2][3],m_unk_reg[2][4] ); #endif diff --git a/src/mame/drivers/peplus.c b/src/mame/drivers/peplus.c index d676ceec027..f85142c8335 100644 --- a/src/mame/drivers/peplus.c +++ b/src/mame/drivers/peplus.c @@ -203,49 +203,49 @@ public: { TIMER_ASSERT_LP }; - - peplus_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_crtc(*this, "crtc"), - m_i2cmem(*this, "i2cmem"), - m_screen(*this, "screen"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_cmos_ram(*this, "cmos"), - m_program_ram(*this, "prograram"), - m_s3000_ram(*this, "s3000_ram"), - m_s5000_ram(*this, "s5000_ram"), + + peplus_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_crtc(*this, "crtc"), + m_i2cmem(*this, "i2cmem"), + m_screen(*this, "screen"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_cmos_ram(*this, "cmos"), + m_program_ram(*this, "prograram"), + m_s3000_ram(*this, "s3000_ram"), + m_s5000_ram(*this, "s5000_ram"), m_videoram(*this, "videoram"), m_s7000_ram(*this, "s7000_ram"), - m_sb000_ram(*this, "sb000_ram"), - m_sd000_ram(*this, "sd000_ram"), - m_sf000_ram(*this, "sf000_ram"), - m_io_port(*this, "io_port") - { - } - - required_device m_maincpu; - required_device m_crtc; - required_device m_i2cmem; - required_device m_screen; - required_device m_gfxdecode; - required_device m_palette; - - required_shared_ptr m_cmos_ram; - required_shared_ptr m_program_ram; - required_shared_ptr m_s3000_ram; + m_sb000_ram(*this, "sb000_ram"), + m_sd000_ram(*this, "sd000_ram"), + m_sf000_ram(*this, "sf000_ram"), + m_io_port(*this, "io_port") + { + } + + required_device m_maincpu; + required_device m_crtc; + required_device m_i2cmem; + required_device m_screen; + required_device m_gfxdecode; + required_device m_palette; + + required_shared_ptr m_cmos_ram; + required_shared_ptr m_program_ram; + required_shared_ptr m_s3000_ram; required_shared_ptr m_s5000_ram; required_shared_ptr m_videoram; required_shared_ptr m_s7000_ram; required_shared_ptr m_sb000_ram; - required_shared_ptr m_sd000_ram; - required_shared_ptr m_sf000_ram; - required_shared_ptr m_io_port; - - tilemap_t *m_bg_tilemap; - UINT8 m_wingboard; - UINT8 m_doorcycle; + required_shared_ptr m_sd000_ram; + required_shared_ptr m_sf000_ram; + required_shared_ptr m_io_port; + + tilemap_t *m_bg_tilemap; + UINT8 m_wingboard; + UINT8 m_doorcycle; UINT16 door_wait; UINT8 m_jumper_e16_e17; UINT16 m_vid_address; @@ -267,21 +267,21 @@ public: UINT8 m_bv_last_enable_state; UINT8 m_bv_enable_state; UINT8 m_bv_enable_count; - UINT8 m_bv_data_bit; - UINT8 m_bv_loop_count; - UINT16 id023_data; - - DECLARE_WRITE8_MEMBER(peplus_bgcolor_w); - DECLARE_WRITE8_MEMBER(peplus_crtc_display_w); - DECLARE_WRITE8_MEMBER(peplus_duart_w); - DECLARE_WRITE8_MEMBER(peplus_cmos_w); - DECLARE_WRITE8_MEMBER(peplus_output_bank_a_w); - DECLARE_WRITE8_MEMBER(peplus_output_bank_b_w); - DECLARE_WRITE8_MEMBER(peplus_output_bank_c_w); - DECLARE_READ8_MEMBER(peplus_duart_r); - DECLARE_READ8_MEMBER(peplus_bgcolor_r); - DECLARE_READ8_MEMBER(peplus_dropdoor_r); - DECLARE_READ8_MEMBER(peplus_watchdog_r); + UINT8 m_bv_data_bit; + UINT8 m_bv_loop_count; + UINT16 id023_data; + + DECLARE_WRITE8_MEMBER(peplus_bgcolor_w); + DECLARE_WRITE8_MEMBER(peplus_crtc_display_w); + DECLARE_WRITE8_MEMBER(peplus_duart_w); + DECLARE_WRITE8_MEMBER(peplus_cmos_w); + DECLARE_WRITE8_MEMBER(peplus_output_bank_a_w); + DECLARE_WRITE8_MEMBER(peplus_output_bank_b_w); + DECLARE_WRITE8_MEMBER(peplus_output_bank_c_w); + DECLARE_READ8_MEMBER(peplus_duart_r); + DECLARE_READ8_MEMBER(peplus_bgcolor_r); + DECLARE_READ8_MEMBER(peplus_dropdoor_r); + DECLARE_READ8_MEMBER(peplus_watchdog_r); DECLARE_CUSTOM_INPUT_MEMBER(peplus_input_r); DECLARE_WRITE8_MEMBER(peplus_crtc_mode_w); DECLARE_WRITE_LINE_MEMBER(crtc_vsync); @@ -296,13 +296,13 @@ public: MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr); virtual void machine_reset(); virtual void video_start(); - UINT32 screen_update_peplus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void peplus_load_superdata(const char *bank_name); - DECLARE_PALETTE_INIT(peplus); - void handle_lightpen(); - -protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + UINT32 screen_update_peplus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void peplus_load_superdata(const char *bank_name); + DECLARE_PALETTE_INIT(peplus); + void handle_lightpen(); + +protected: + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); }; static const UINT8 id_022[8] = { 0x00, 0x01, 0x04, 0x09, 0x13, 0x16, 0x18, 0x00 }; @@ -382,50 +382,50 @@ WRITE8_MEMBER(peplus_state::peplus_crtc_mode_w) void peplus_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - switch (id) - { - case TIMER_ASSERT_LP: - m_crtc->assert_light_pen_input(); - break; - default: - assert_always(FALSE, "Unknown id in peplus_state::device_timer"); + switch (id) + { + case TIMER_ASSERT_LP: + m_crtc->assert_light_pen_input(); + break; + default: + assert_always(FALSE, "Unknown id in peplus_state::device_timer"); } -} - - -void peplus_state::handle_lightpen() -{ - int x_val = ioport("TOUCH_X")->read_safe(0x00); - int y_val = ioport("TOUCH_Y")->read_safe(0x00); - const rectangle &vis_area = m_screen->visible_area(); - int xt, yt; - - xt = x_val * vis_area.width() / 1024 + vis_area.min_x; - yt = y_val * vis_area.height() / 1024 + vis_area.min_y; - - timer_set(m_screen->time_until_pos(yt, xt), TIMER_ASSERT_LP, 0); -} - -WRITE_LINE_MEMBER(peplus_state::crtc_vsync) -{ - m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); - handle_lightpen(); -} - -WRITE8_MEMBER(peplus_state::peplus_crtc_display_w) +} + + +void peplus_state::handle_lightpen() +{ + int x_val = ioport("TOUCH_X")->read_safe(0x00); + int y_val = ioport("TOUCH_Y")->read_safe(0x00); + const rectangle &vis_area = m_screen->visible_area(); + int xt, yt; + + xt = x_val * vis_area.width() / 1024 + vis_area.min_x; + yt = y_val * vis_area.height() / 1024 + vis_area.min_y; + + timer_set(m_screen->time_until_pos(yt, xt), TIMER_ASSERT_LP, 0); +} + +WRITE_LINE_MEMBER(peplus_state::crtc_vsync) +{ + m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); + handle_lightpen(); +} + +WRITE8_MEMBER(peplus_state::peplus_crtc_display_w) { UINT8 *videoram = m_videoram; videoram[m_vid_address] = data; m_palette_ram[m_vid_address] = m_io_port[1]; m_palette_ram2[m_vid_address] = m_io_port[3]; - m_bg_tilemap->mark_tile_dirty(m_vid_address); - - /* An access here triggers a device read !*/ - m_crtc->register_r(space, 0); -} - -WRITE8_MEMBER(peplus_state::peplus_duart_w) + m_bg_tilemap->mark_tile_dirty(m_vid_address); + + /* An access here triggers a device read !*/ + m_crtc->register_r(space, 0); +} + +WRITE8_MEMBER(peplus_state::peplus_duart_w) { // Used for Slot Accounting System Communication } @@ -441,12 +441,12 @@ WRITE8_MEMBER(peplus_state::peplus_cmos_w) peplus_load_superdata(bank_name); } - m_cmos_ram[offset] = data; -} - -WRITE8_MEMBER(peplus_state::peplus_output_bank_a_w) -{ - output_set_value("pe_bnka0",(data >> 0) & 1); /* Coin Lockout */ + m_cmos_ram[offset] = data; +} + +WRITE8_MEMBER(peplus_state::peplus_output_bank_a_w) +{ + output_set_value("pe_bnka0",(data >> 0) & 1); /* Coin Lockout */ output_set_value("pe_bnka1",(data >> 1) & 1); /* Diverter */ output_set_value("pe_bnka2",(data >> 2) & 1); /* Bell */ output_set_value("pe_bnka3",(data >> 3) & 1); /* N/A */ @@ -495,18 +495,18 @@ WRITE8_MEMBER(peplus_state::i2c_nvram_w) /**************** -* Read Handlers * -****************/ - -READ8_MEMBER(peplus_state::peplus_duart_r) -{ - // Used for Slot Accounting System Communication - return 0x00; -} - -/* Last Color in Every Palette is bgcolor */ -READ8_MEMBER(peplus_state::peplus_bgcolor_r) -{ +* Read Handlers * +****************/ + +READ8_MEMBER(peplus_state::peplus_duart_r) +{ + // Used for Slot Accounting System Communication + return 0x00; +} + +/* Last Color in Every Palette is bgcolor */ +READ8_MEMBER(peplus_state::peplus_bgcolor_r) +{ return m_palette->pen_color(15); // Return bgcolor from First Palette } @@ -969,65 +969,65 @@ GFXDECODE_END static ADDRESS_MAP_START( peplus_map, AS_PROGRAM, 8, peplus_state ) AM_RANGE(0x0000, 0xffff) AM_ROM AM_SHARE("prograram") ADDRESS_MAP_END - -static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) - // Battery-backed RAM (0x1000-0x01fff Extended RAM for Superboards Only) - AM_RANGE(0x0000, 0x1fff) AM_RAM_WRITE(peplus_cmos_w) AM_SHARE("cmos") - - // CRT Controller - AM_RANGE(0x2008, 0x2008) AM_WRITE(peplus_crtc_mode_w) + +static ADDRESS_MAP_START( peplus_iomap, AS_IO, 8, peplus_state ) + // Battery-backed RAM (0x1000-0x01fff Extended RAM for Superboards Only) + AM_RANGE(0x0000, 0x1fff) AM_RAM_WRITE(peplus_cmos_w) AM_SHARE("cmos") + + // CRT Controller + AM_RANGE(0x2008, 0x2008) AM_WRITE(peplus_crtc_mode_w) AM_RANGE(0x2080, 0x2080) AM_DEVREADWRITE("crtc", mc6845_device, status_r, address_w) AM_RANGE(0x2081, 0x2081) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w) - AM_RANGE(0x2083, 0x2083) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(peplus_crtc_display_w) - - // Superboard Data - AM_RANGE(0x3000, 0x3fff) AM_RAM AM_SHARE("s3000_ram") - - // Sound and Dipswitches - AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("aysnd", ay8910_device, address_w) - AM_RANGE(0x4004, 0x4004) AM_READ_PORT("SW1")/* likely ay8910 input port, not direct */ AM_DEVWRITE("aysnd", ay8910_device, data_w) - - // Superboard Data - AM_RANGE(0x5000, 0x5fff) AM_RAM AM_SHARE("s5000_ram") - - // Background Color Latch - AM_RANGE(0x6000, 0x6000) AM_READ(peplus_bgcolor_r) AM_WRITE(peplus_bgcolor_w) + AM_RANGE(0x2083, 0x2083) AM_DEVREAD("crtc", mc6845_device, register_r) AM_WRITE(peplus_crtc_display_w) + + // Superboard Data + AM_RANGE(0x3000, 0x3fff) AM_RAM AM_SHARE("s3000_ram") + + // Sound and Dipswitches + AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("aysnd", ay8910_device, address_w) + AM_RANGE(0x4004, 0x4004) AM_READ_PORT("SW1")/* likely ay8910 input port, not direct */ AM_DEVWRITE("aysnd", ay8910_device, data_w) + + // Superboard Data + AM_RANGE(0x5000, 0x5fff) AM_RAM AM_SHARE("s5000_ram") + + // Background Color Latch + AM_RANGE(0x6000, 0x6000) AM_READ(peplus_bgcolor_r) AM_WRITE(peplus_bgcolor_w) // Bogus Location for Video RAM - AM_RANGE(0x06001, 0x06400) AM_RAM AM_SHARE("videoram") - - // Superboard Data - AM_RANGE(0x7000, 0x7fff) AM_RAM AM_SHARE("s7000_ram") - - // Input Bank A, Output Bank C - AM_RANGE(0x8000, 0x8000) AM_READ(peplus_input_bank_a_r) AM_WRITE(peplus_output_bank_c_w) + AM_RANGE(0x06001, 0x06400) AM_RAM AM_SHARE("videoram") + + // Superboard Data + AM_RANGE(0x7000, 0x7fff) AM_RAM AM_SHARE("s7000_ram") + + // Input Bank A, Output Bank C + AM_RANGE(0x8000, 0x8000) AM_READ(peplus_input_bank_a_r) AM_WRITE(peplus_output_bank_c_w) // Drop Door, I2C EEPROM Writes AM_RANGE(0x9000, 0x9000) AM_READ(peplus_dropdoor_r) AM_WRITE(i2c_nvram_w) // Input Banks B & C, Output Bank B - AM_RANGE(0xa000, 0xa000) AM_READ(peplus_input0_r) AM_WRITE(peplus_output_bank_b_w) - - // Superboard Data - AM_RANGE(0xb000, 0xbfff) AM_RAM AM_SHARE("sb000_ram") - - // Output Bank A - AM_RANGE(0xc000, 0xc000) AM_READ(peplus_watchdog_r) AM_WRITE(peplus_output_bank_a_w) - - // Superboard Data - AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("sd000_ram") - - // DUART - AM_RANGE(0xe000, 0xe00f) AM_READWRITE(peplus_duart_r, peplus_duart_w) - - // Superboard Data - AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("sf000_ram") - - /* Ports start here */ - AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_RAM AM_SHARE("io_port") -ADDRESS_MAP_END - - + AM_RANGE(0xa000, 0xa000) AM_READ(peplus_input0_r) AM_WRITE(peplus_output_bank_b_w) + + // Superboard Data + AM_RANGE(0xb000, 0xbfff) AM_RAM AM_SHARE("sb000_ram") + + // Output Bank A + AM_RANGE(0xc000, 0xc000) AM_READ(peplus_watchdog_r) AM_WRITE(peplus_output_bank_a_w) + + // Superboard Data + AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("sd000_ram") + + // DUART + AM_RANGE(0xe000, 0xe00f) AM_READWRITE(peplus_duart_r, peplus_duart_w) + + // Superboard Data + AM_RANGE(0xf000, 0xffff) AM_RAM AM_SHARE("sf000_ram") + + /* Ports start here */ + AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_RAM AM_SHARE("io_port") +ADDRESS_MAP_END + + /************************* * Input ports * *************************/ -- cgit v1.2.3 From 0b6577ccc0a871c7450d5c6651920979572ce351 Mon Sep 17 00:00:00 2001 From: etabeta78 Date: Mon, 27 Oct 2014 18:53:08 +0100 Subject: (MESS) intv.xml: added a few images I've been sent. nw. --- hash/intv.xml | 357 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- hash/intvecs.xml | 19 ++- 2 files changed, 356 insertions(+), 20 deletions(-) diff --git a/hash/intv.xml b/hash/intv.xml index 0fdfe80fb07..6dd05d4c996 100644 --- a/hash/intv.xml +++ b/hash/intv.xml @@ -26,8 +26,8 @@ - - Advanced Dungeons & Dragons Cartridge + + Advanced Dungeons & Dragons 1982 Mattel Electronics @@ -40,7 +40,7 @@ - Advanced Dungeons & Dragons: Treasure of Tarmin + Advanced Dungeons & Dragons - Treasure of Tarmin 1982 Mattel Electronics @@ -65,8 +65,8 @@ - - Astro Smash + + AstroSmash 1981 Mattel Electronics @@ -78,6 +78,18 @@ + + AstroSmash Competition + 1981 + Mattel Electronics + + + + + + + + Atlantis 1982 @@ -1756,7 +1768,7 @@ Intellivoice 19?? - Mattel + Mattel Electronics @@ -1769,7 +1781,7 @@ Entertainment Computer System 19?? - Mattel + Mattel Electronics @@ -1790,17 +1802,35 @@ - - All Star Major League Baseball (Prototype) + + Advanced Dungeons & Dragons - Tower of Mystery (Unreleased) 1983 Mattel Electronics - - + + - - + + + + + + + + + + + + + + Adventures of TRON (Unreleased) + 1982 + Mattel Electronics + + + + @@ -1817,6 +1847,21 @@ + + All Star Major League Baseball (Prototype) + 1983 + Mattel Electronics + + + + + + + + + + + Brickout! (Unreleased) 1981 @@ -1919,6 +1964,24 @@ + + Hover Force 3D (Unreleased) + 1984 + Mattel Electronics + + + + + + + + + + + + + + Hypnotic Lights (Prototype) 1981 @@ -1931,6 +1994,18 @@ + + Illusions (Unreleased) + 1983 + Mattel Electronics + + + + + + + + King of the Mountain (Unreleased) 1982 @@ -2000,6 +2075,21 @@ + + Mystic Castle (Prototype) + 1982 + Mattel Electronics + + + + + + + + + + + Party Line: Blow Out (Unreleased) 1983 @@ -2015,6 +2105,21 @@ + + Party Line: Blow Out (Unreleased, Alt) + 1983 + Mattel Electronics + + + + + + + + + + + Party Line: Hard Hat (Unreleased) 1983 @@ -2027,6 +2132,18 @@ + + Party Line: Space Cadet (Unreleased) + 1983 + Mattel Electronics + + + + + + + + Robot Rubble (Prototype) 1983 @@ -2039,14 +2156,44 @@ - - Party Line: Space Cadet (Unreleased) + + Rocky & Bullwinckle (Unreleased) 1983 Mattel Electronics - - + + + + + + + + Scarfinger (Unfinished) + 1982 + Mattel Electronics + + + + + + + + + + + + + Soccer 2 (Prototype) + 198? + Mattel Electronics + + + + + + + @@ -2096,6 +2243,25 @@ + + Yogi's Frustration (Unreleased) + 1983 + Mattel Electronics + + + + + + + + + + + + + + + IMI Test Cartridge 1978 @@ -2123,6 +2289,7 @@ + 4-Tris (Download Version) 2000 @@ -2136,7 +2303,40 @@ - + + Donkey Kong Arcade + 200? + IntelligentVision + + + + + + + + + + + + + + + + + + + Istar + 2010? + IntelligentVision + + + + + + + + + Minehunter (Download Version) 2004 IntelligentVision @@ -2144,11 +2344,24 @@ + + + Minehunter (Download Version, Alt?) + 2004 + IntelligentVision + + + + + + + + SameGame & Robots (Download Version) 2005 @@ -2168,6 +2381,49 @@ + + ZZZZZ! Spina the Bee + 200? + IntelligentVision + + + + + + + + + + Space Cunt + 200? + IntelligentVision + + + + + + + + + + + Space Patrol Teaser Edition + 2007? + IntelligentVision + + + + + + + + + + + + + + Stonix (Download Version) 2005 @@ -2186,4 +2442,69 @@ + + + Super Chef BT + 2013? + IntelligentVision + + + + + + + + + + + + + Tag Along Todd (Unfinished) + 200? + IntelligentVision + + + + + + + + + + + + + + King of the Mountain (Fixed?) + 200? + IntelligentVision + + + + + + + + + + + + + Quest + 19?? + <unknown> + + + + + + + + + + + + + + diff --git a/hash/intvecs.xml b/hash/intvecs.xml index b8663df873e..ef321fcd1f3 100644 --- a/hash/intvecs.xml +++ b/hash/intvecs.xml @@ -1,7 +1,5 @@ - - @@ -150,4 +148,21 @@ + + + + Flintstones Keyboard Fun (Unreleased) + 200? + IntelligentVision + + + + + + + + + + + -- cgit v1.2.3 From 792425c7c1113c089881f188bb9e063d1acf59a9 Mon Sep 17 00:00:00 2001 From: cracyc Date: Mon, 27 Oct 2014 12:43:35 -0500 Subject: i386: lock [Barry Rodewald, Carl] --- Some of the group opcodes need to be checked --- src/emu/cpu/i386/i386.c | 20 +- src/emu/cpu/i386/i386.h | 4 + src/emu/cpu/i386/i386ops.h | 1008 +++++++++++++++++++++--------------------- src/emu/cpu/i386/i386ops.inc | 2 +- 4 files changed, 527 insertions(+), 507 deletions(-) diff --git a/src/emu/cpu/i386/i386.c b/src/emu/cpu/i386/i386.c index 4f08e8eca96..bbd83a7aa93 100644 --- a/src/emu/cpu/i386/i386.c +++ b/src/emu/cpu/i386/i386.c @@ -687,6 +687,7 @@ void i386_device::i386_trap(int irq, int irq_gate, int trap_level) UINT16 segment; int entry = irq * (PROTECTED_MODE ? 8 : 4); int SetRPL = 0; + m_lock = false; if( !(PROTECTED_MODE) ) { @@ -2811,7 +2812,7 @@ void i386_device::build_cycle_table() void i386_device::report_invalid_opcode() { #ifndef DEBUG_MISSING_OPCODE - logerror("i386: Invalid opcode %02X at %08X\n", m_opcode, m_pc - 1); + logerror("i386: Invalid opcode %02X at %08X %s\n", m_opcode, m_pc - 1, m_lock ? "with lock" : ""); #else logerror("i386: Invalid opcode"); for (int a = 0; a < m_opcode_bytes_length; a++) @@ -2845,6 +2846,10 @@ void i386_device::report_invalid_modrm(const char* opcode, UINT8 modrm) void i386_device::i386_decode_opcode() { m_opcode = FETCH(); + + if(m_lock && !m_lock_table[0][m_opcode]) + return i386_invalid(); + if( m_operand_size ) (this->*m_opcode_table1_32[m_opcode])(); else @@ -2855,6 +2860,10 @@ void i386_device::i386_decode_opcode() void i386_device::i386_decode_two_byte() { m_opcode = FETCH(); + + if(m_lock && !m_lock_table[1][m_opcode]) + return i386_invalid(); + if( m_operand_size ) (this->*m_opcode_table2_32[m_opcode])(); else @@ -3178,6 +3187,7 @@ void i386_device::i386_common_init(int tlbsize) save_item(NAME(m_nmi_masked)); save_item(NAME(m_nmi_latched)); save_item(NAME(m_smbase)); + save_item(NAME(m_lock)); machine().save().register_postload(save_prepost_delegate(FUNC(i386_device::i386_postload), this)); m_smiact.resolve_safe(); @@ -3392,6 +3402,8 @@ void i386_device::build_opcode_table(UINT32 features) m_opcode_table3f2_32[i] = &i386_device::i386_invalid; m_opcode_table3f3_16[i] = &i386_device::i386_invalid; m_opcode_table3f3_32[i] = &i386_device::i386_invalid; + m_lock_table[0][i] = false; + m_lock_table[1][i] = false; } for (i=0; i < sizeof(s_x86_opcode_table)/sizeof(X86_OPCODE); i++) @@ -3406,6 +3418,7 @@ void i386_device::build_opcode_table(UINT32 features) m_opcode_table2_16[op->opcode] = op->handler16; m_opcode_table366_32[op->opcode] = op->handler32; m_opcode_table366_16[op->opcode] = op->handler16; + m_lock_table[1][op->opcode] = op->lockable; } else if (op->flags & OP_3BYTE66) { @@ -3426,6 +3439,7 @@ void i386_device::build_opcode_table(UINT32 features) { m_opcode_table1_32[op->opcode] = op->handler32; m_opcode_table1_16[op->opcode] = op->handler16; + m_lock_table[0][op->opcode] = op->lockable; } } } @@ -3531,6 +3545,7 @@ void i386_device::device_reset() m_smi_latched = false; m_nmi_masked = false; m_nmi_latched = false; + m_lock = false; m_a20_mask = ~0; @@ -3754,7 +3769,8 @@ void i386_device::execute_run() m_ext = 1; i386_trap(1,0,0); } - + if(m_lock && (m_opcode != 0xf0)) + m_lock = false; } catch(UINT64 e) { diff --git a/src/emu/cpu/i386/i386.h b/src/emu/cpu/i386/i386.h index 7d6ebb07e1f..235d6e898d5 100644 --- a/src/emu/cpu/i386/i386.h +++ b/src/emu/cpu/i386/i386.h @@ -138,6 +138,7 @@ struct I386_CALL_GATE UINT32 flags; i386_op_func handler16; i386_op_func handler32; + bool lockable; }; static const X86_OPCODE s_x86_opcode_table[]; @@ -244,6 +245,8 @@ struct I386_CALL_GATE i386_op_func m_opcode_table3f3_16[256]; i386_op_func m_opcode_table3f3_32[256]; + bool m_lock_table[2][256]; + UINT8 *m_cycle_table_pm; UINT8 *m_cycle_table_rm; @@ -256,6 +259,7 @@ struct I386_CALL_GATE bool m_nmi_latched; UINT32 m_smbase; devcb_write_line m_smiact; + bool m_lock; // bytes in current opcode, debug only UINT8 m_opcode_bytes[16]; diff --git a/src/emu/cpu/i386/i386ops.h b/src/emu/cpu/i386/i386ops.h index 4928363e2d2..b84d188835f 100644 --- a/src/emu/cpu/i386/i386ops.h +++ b/src/emu/cpu/i386/i386ops.h @@ -18,510 +18,510 @@ const i386_device::X86_OPCODE i386_device::s_x86_opcode_table[] = { // Opcode Flags 16-bit handler 32-bit handler - { 0x00, OP_I386, &i386_device::i386_add_rm8_r8, &i386_device::i386_add_rm8_r8, }, - { 0x01, OP_I386, &i386_device::i386_add_rm16_r16, &i386_device::i386_add_rm32_r32, }, - { 0x02, OP_I386, &i386_device::i386_add_r8_rm8, &i386_device::i386_add_r8_rm8, }, - { 0x03, OP_I386, &i386_device::i386_add_r16_rm16, &i386_device::i386_add_r32_rm32, }, - { 0x04, OP_I386, &i386_device::i386_add_al_i8, &i386_device::i386_add_al_i8, }, - { 0x05, OP_I386, &i386_device::i386_add_ax_i16, &i386_device::i386_add_eax_i32, }, - { 0x06, OP_I386, &i386_device::i386_push_es16, &i386_device::i386_push_es32, }, - { 0x07, OP_I386, &i386_device::i386_pop_es16, &i386_device::i386_pop_es32, }, - { 0x08, OP_I386, &i386_device::i386_or_rm8_r8, &i386_device::i386_or_rm8_r8, }, - { 0x09, OP_I386, &i386_device::i386_or_rm16_r16, &i386_device::i386_or_rm32_r32, }, - { 0x0A, OP_I386, &i386_device::i386_or_r8_rm8, &i386_device::i386_or_r8_rm8, }, - { 0x0B, OP_I386, &i386_device::i386_or_r16_rm16, &i386_device::i386_or_r32_rm32, }, - { 0x0C, OP_I386, &i386_device::i386_or_al_i8, &i386_device::i386_or_al_i8, }, - { 0x0D, OP_I386, &i386_device::i386_or_ax_i16, &i386_device::i386_or_eax_i32, }, - { 0x0E, OP_I386, &i386_device::i386_push_cs16, &i386_device::i386_push_cs32, }, - { 0x0F, OP_I386, &i386_device::i386_decode_two_byte, &i386_device::i386_decode_two_byte, }, - { 0x10, OP_I386, &i386_device::i386_adc_rm8_r8, &i386_device::i386_adc_rm8_r8, }, - { 0x11, OP_I386, &i386_device::i386_adc_rm16_r16, &i386_device::i386_adc_rm32_r32, }, - { 0x12, OP_I386, &i386_device::i386_adc_r8_rm8, &i386_device::i386_adc_r8_rm8, }, - { 0x13, OP_I386, &i386_device::i386_adc_r16_rm16, &i386_device::i386_adc_r32_rm32, }, - { 0x14, OP_I386, &i386_device::i386_adc_al_i8, &i386_device::i386_adc_al_i8, }, - { 0x15, OP_I386, &i386_device::i386_adc_ax_i16, &i386_device::i386_adc_eax_i32, }, - { 0x16, OP_I386, &i386_device::i386_push_ss16, &i386_device::i386_push_ss32, }, - { 0x17, OP_I386, &i386_device::i386_pop_ss16, &i386_device::i386_pop_ss32, }, - { 0x18, OP_I386, &i386_device::i386_sbb_rm8_r8, &i386_device::i386_sbb_rm8_r8, }, - { 0x19, OP_I386, &i386_device::i386_sbb_rm16_r16, &i386_device::i386_sbb_rm32_r32, }, - { 0x1A, OP_I386, &i386_device::i386_sbb_r8_rm8, &i386_device::i386_sbb_r8_rm8, }, - { 0x1B, OP_I386, &i386_device::i386_sbb_r16_rm16, &i386_device::i386_sbb_r32_rm32, }, - { 0x1C, OP_I386, &i386_device::i386_sbb_al_i8, &i386_device::i386_sbb_al_i8, }, - { 0x1D, OP_I386, &i386_device::i386_sbb_ax_i16, &i386_device::i386_sbb_eax_i32, }, - { 0x1E, OP_I386, &i386_device::i386_push_ds16, &i386_device::i386_push_ds32, }, - { 0x1F, OP_I386, &i386_device::i386_pop_ds16, &i386_device::i386_pop_ds32, }, - { 0x20, OP_I386, &i386_device::i386_and_rm8_r8, &i386_device::i386_and_rm8_r8, }, - { 0x21, OP_I386, &i386_device::i386_and_rm16_r16, &i386_device::i386_and_rm32_r32, }, - { 0x22, OP_I386, &i386_device::i386_and_r8_rm8, &i386_device::i386_and_r8_rm8, }, - { 0x23, OP_I386, &i386_device::i386_and_r16_rm16, &i386_device::i386_and_r32_rm32, }, - { 0x24, OP_I386, &i386_device::i386_and_al_i8, &i386_device::i386_and_al_i8, }, - { 0x25, OP_I386, &i386_device::i386_and_ax_i16, &i386_device::i386_and_eax_i32, }, - { 0x26, OP_I386, &i386_device::i386_segment_ES, &i386_device::i386_segment_ES, }, - { 0x27, OP_I386, &i386_device::i386_daa, &i386_device::i386_daa, }, - { 0x28, OP_I386, &i386_device::i386_sub_rm8_r8, &i386_device::i386_sub_rm8_r8, }, - { 0x29, OP_I386, &i386_device::i386_sub_rm16_r16, &i386_device::i386_sub_rm32_r32, }, - { 0x2A, OP_I386, &i386_device::i386_sub_r8_rm8, &i386_device::i386_sub_r8_rm8, }, - { 0x2B, OP_I386, &i386_device::i386_sub_r16_rm16, &i386_device::i386_sub_r32_rm32, }, - { 0x2C, OP_I386, &i386_device::i386_sub_al_i8, &i386_device::i386_sub_al_i8, }, - { 0x2D, OP_I386, &i386_device::i386_sub_ax_i16, &i386_device::i386_sub_eax_i32, }, - { 0x2E, OP_I386, &i386_device::i386_segment_CS, &i386_device::i386_segment_CS, }, - { 0x2F, OP_I386, &i386_device::i386_das, &i386_device::i386_das, }, - { 0x30, OP_I386, &i386_device::i386_xor_rm8_r8, &i386_device::i386_xor_rm8_r8, }, - { 0x31, OP_I386, &i386_device::i386_xor_rm16_r16, &i386_device::i386_xor_rm32_r32, }, - { 0x32, OP_I386, &i386_device::i386_xor_r8_rm8, &i386_device::i386_xor_r8_rm8, }, - { 0x33, OP_I386, &i386_device::i386_xor_r16_rm16, &i386_device::i386_xor_r32_rm32, }, - { 0x34, OP_I386, &i386_device::i386_xor_al_i8, &i386_device::i386_xor_al_i8, }, - { 0x35, OP_I386, &i386_device::i386_xor_ax_i16, &i386_device::i386_xor_eax_i32, }, - { 0x36, OP_I386, &i386_device::i386_segment_SS, &i386_device::i386_segment_SS, }, - { 0x37, OP_I386, &i386_device::i386_aaa, &i386_device::i386_aaa, }, - { 0x38, OP_I386, &i386_device::i386_cmp_rm8_r8, &i386_device::i386_cmp_rm8_r8, }, - { 0x39, OP_I386, &i386_device::i386_cmp_rm16_r16, &i386_device::i386_cmp_rm32_r32, }, - { 0x3A, OP_I386, &i386_device::i386_cmp_r8_rm8, &i386_device::i386_cmp_r8_rm8, }, - { 0x3B, OP_I386, &i386_device::i386_cmp_r16_rm16, &i386_device::i386_cmp_r32_rm32, }, - { 0x3C, OP_I386, &i386_device::i386_cmp_al_i8, &i386_device::i386_cmp_al_i8, }, - { 0x3D, OP_I386, &i386_device::i386_cmp_ax_i16, &i386_device::i386_cmp_eax_i32, }, - { 0x3E, OP_I386, &i386_device::i386_segment_DS, &i386_device::i386_segment_DS, }, - { 0x3F, OP_I386, &i386_device::i386_aas, &i386_device::i386_aas, }, - { 0x40, OP_I386, &i386_device::i386_inc_ax, &i386_device::i386_inc_eax, }, - { 0x41, OP_I386, &i386_device::i386_inc_cx, &i386_device::i386_inc_ecx, }, - { 0x42, OP_I386, &i386_device::i386_inc_dx, &i386_device::i386_inc_edx, }, - { 0x43, OP_I386, &i386_device::i386_inc_bx, &i386_device::i386_inc_ebx, }, - { 0x44, OP_I386, &i386_device::i386_inc_sp, &i386_device::i386_inc_esp, }, - { 0x45, OP_I386, &i386_device::i386_inc_bp, &i386_device::i386_inc_ebp, }, - { 0x46, OP_I386, &i386_device::i386_inc_si, &i386_device::i386_inc_esi, }, - { 0x47, OP_I386, &i386_device::i386_inc_di, &i386_device::i386_inc_edi, }, - { 0x48, OP_I386, &i386_device::i386_dec_ax, &i386_device::i386_dec_eax, }, - { 0x49, OP_I386, &i386_device::i386_dec_cx, &i386_device::i386_dec_ecx, }, - { 0x4A, OP_I386, &i386_device::i386_dec_dx, &i386_device::i386_dec_edx, }, - { 0x4B, OP_I386, &i386_device::i386_dec_bx, &i386_device::i386_dec_ebx, }, - { 0x4C, OP_I386, &i386_device::i386_dec_sp, &i386_device::i386_dec_esp, }, - { 0x4D, OP_I386, &i386_device::i386_dec_bp, &i386_device::i386_dec_ebp, }, - { 0x4E, OP_I386, &i386_device::i386_dec_si, &i386_device::i386_dec_esi, }, - { 0x4F, OP_I386, &i386_device::i386_dec_di, &i386_device::i386_dec_edi, }, - { 0x50, OP_I386, &i386_device::i386_push_ax, &i386_device::i386_push_eax, }, - { 0x51, OP_I386, &i386_device::i386_push_cx, &i386_device::i386_push_ecx, }, - { 0x52, OP_I386, &i386_device::i386_push_dx, &i386_device::i386_push_edx, }, - { 0x53, OP_I386, &i386_device::i386_push_bx, &i386_device::i386_push_ebx, }, - { 0x54, OP_I386, &i386_device::i386_push_sp, &i386_device::i386_push_esp, }, - { 0x55, OP_I386, &i386_device::i386_push_bp, &i386_device::i386_push_ebp, }, - { 0x56, OP_I386, &i386_device::i386_push_si, &i386_device::i386_push_esi, }, - { 0x57, OP_I386, &i386_device::i386_push_di, &i386_device::i386_push_edi, }, - { 0x58, OP_I386, &i386_device::i386_pop_ax, &i386_device::i386_pop_eax, }, - { 0x59, OP_I386, &i386_device::i386_pop_cx, &i386_device::i386_pop_ecx, }, - { 0x5A, OP_I386, &i386_device::i386_pop_dx, &i386_device::i386_pop_edx, }, - { 0x5B, OP_I386, &i386_device::i386_pop_bx, &i386_device::i386_pop_ebx, }, - { 0x5C, OP_I386, &i386_device::i386_pop_sp, &i386_device::i386_pop_esp, }, - { 0x5D, OP_I386, &i386_device::i386_pop_bp, &i386_device::i386_pop_ebp, }, - { 0x5E, OP_I386, &i386_device::i386_pop_si, &i386_device::i386_pop_esi, }, - { 0x5F, OP_I386, &i386_device::i386_pop_di, &i386_device::i386_pop_edi, }, - { 0x60, OP_I386, &i386_device::i386_pusha, &i386_device::i386_pushad, }, - { 0x61, OP_I386, &i386_device::i386_popa, &i386_device::i386_popad, }, - { 0x62, OP_I386, &i386_device::i386_bound_r16_m16_m16, &i386_device::i386_bound_r32_m32_m32, }, - { 0x63, OP_I386, &i386_device::i386_arpl, &i386_device::i386_arpl, }, - { 0x64, OP_I386, &i386_device::i386_segment_FS, &i386_device::i386_segment_FS, }, - { 0x65, OP_I386, &i386_device::i386_segment_GS, &i386_device::i386_segment_GS, }, - { 0x66, OP_I386, &i386_device::i386_operand_size, &i386_device::i386_operand_size, }, - { 0x67, OP_I386, &i386_device::i386_address_size, &i386_device::i386_address_size, }, - { 0x68, OP_I386, &i386_device::i386_push_i16, &i386_device::i386_push_i32, }, - { 0x69, OP_I386, &i386_device::i386_imul_r16_rm16_i16, &i386_device::i386_imul_r32_rm32_i32, }, - { 0x6A, OP_I386, &i386_device::i386_push_i8, &i386_device::i386_push_i8, }, - { 0x6B, OP_I386, &i386_device::i386_imul_r16_rm16_i8, &i386_device::i386_imul_r32_rm32_i8, }, - { 0x6C, OP_I386, &i386_device::i386_insb, &i386_device::i386_insb, }, - { 0x6D, OP_I386, &i386_device::i386_insw, &i386_device::i386_insd, }, - { 0x6E, OP_I386, &i386_device::i386_outsb, &i386_device::i386_outsb, }, - { 0x6F, OP_I386, &i386_device::i386_outsw, &i386_device::i386_outsd, }, - { 0x70, OP_I386, &i386_device::i386_jo_rel8, &i386_device::i386_jo_rel8, }, - { 0x71, OP_I386, &i386_device::i386_jno_rel8, &i386_device::i386_jno_rel8, }, - { 0x72, OP_I386, &i386_device::i386_jc_rel8, &i386_device::i386_jc_rel8, }, - { 0x73, OP_I386, &i386_device::i386_jnc_rel8, &i386_device::i386_jnc_rel8, }, - { 0x74, OP_I386, &i386_device::i386_jz_rel8, &i386_device::i386_jz_rel8, }, - { 0x75, OP_I386, &i386_device::i386_jnz_rel8, &i386_device::i386_jnz_rel8, }, - { 0x76, OP_I386, &i386_device::i386_jbe_rel8, &i386_device::i386_jbe_rel8, }, - { 0x77, OP_I386, &i386_device::i386_ja_rel8, &i386_device::i386_ja_rel8, }, - { 0x78, OP_I386, &i386_device::i386_js_rel8, &i386_device::i386_js_rel8, }, - { 0x79, OP_I386, &i386_device::i386_jns_rel8, &i386_device::i386_jns_rel8, }, - { 0x7A, OP_I386, &i386_device::i386_jp_rel8, &i386_device::i386_jp_rel8, }, - { 0x7B, OP_I386, &i386_device::i386_jnp_rel8, &i386_device::i386_jnp_rel8, }, - { 0x7C, OP_I386, &i386_device::i386_jl_rel8, &i386_device::i386_jl_rel8, }, - { 0x7D, OP_I386, &i386_device::i386_jge_rel8, &i386_device::i386_jge_rel8, }, - { 0x7E, OP_I386, &i386_device::i386_jle_rel8, &i386_device::i386_jle_rel8, }, - { 0x7F, OP_I386, &i386_device::i386_jg_rel8, &i386_device::i386_jg_rel8, }, - { 0x80, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, }, - { 0x81, OP_I386, &i386_device::i386_group81_16, &i386_device::i386_group81_32, }, - { 0x82, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, }, - { 0x83, OP_I386, &i386_device::i386_group83_16, &i386_device::i386_group83_32, }, - { 0x84, OP_I386, &i386_device::i386_test_rm8_r8, &i386_device::i386_test_rm8_r8, }, - { 0x85, OP_I386, &i386_device::i386_test_rm16_r16, &i386_device::i386_test_rm32_r32, }, - { 0x86, OP_I386, &i386_device::i386_xchg_r8_rm8, &i386_device::i386_xchg_r8_rm8, }, - { 0x87, OP_I386, &i386_device::i386_xchg_r16_rm16, &i386_device::i386_xchg_r32_rm32, }, - { 0x88, OP_I386, &i386_device::i386_mov_rm8_r8, &i386_device::i386_mov_rm8_r8, }, - { 0x89, OP_I386, &i386_device::i386_mov_rm16_r16, &i386_device::i386_mov_rm32_r32, }, - { 0x8A, OP_I386, &i386_device::i386_mov_r8_rm8, &i386_device::i386_mov_r8_rm8, }, - { 0x8B, OP_I386, &i386_device::i386_mov_r16_rm16, &i386_device::i386_mov_r32_rm32, }, - { 0x8C, OP_I386, &i386_device::i386_mov_rm16_sreg, &i386_device::i386_mov_rm16_sreg, }, - { 0x8D, OP_I386, &i386_device::i386_lea16, &i386_device::i386_lea32, }, - { 0x8E, OP_I386, &i386_device::i386_mov_sreg_rm16, &i386_device::i386_mov_sreg_rm16, }, - { 0x8F, OP_I386, &i386_device::i386_pop_rm16, &i386_device::i386_pop_rm32, }, - { 0x90, OP_I386, &i386_device::i386_nop, &i386_device::i386_nop, }, - { 0x91, OP_I386, &i386_device::i386_xchg_ax_cx, &i386_device::i386_xchg_eax_ecx, }, - { 0x92, OP_I386, &i386_device::i386_xchg_ax_dx, &i386_device::i386_xchg_eax_edx, }, - { 0x93, OP_I386, &i386_device::i386_xchg_ax_bx, &i386_device::i386_xchg_eax_ebx, }, - { 0x94, OP_I386, &i386_device::i386_xchg_ax_sp, &i386_device::i386_xchg_eax_esp, }, - { 0x95, OP_I386, &i386_device::i386_xchg_ax_bp, &i386_device::i386_xchg_eax_ebp, }, - { 0x96, OP_I386, &i386_device::i386_xchg_ax_si, &i386_device::i386_xchg_eax_esi, }, - { 0x97, OP_I386, &i386_device::i386_xchg_ax_di, &i386_device::i386_xchg_eax_edi, }, - { 0x98, OP_I386, &i386_device::i386_cbw, &i386_device::i386_cwde, }, - { 0x99, OP_I386, &i386_device::i386_cwd, &i386_device::i386_cdq, }, - { 0x9A, OP_I386, &i386_device::i386_call_abs16, &i386_device::i386_call_abs32, }, - { 0x9B, OP_I386, &i386_device::i386_wait, &i386_device::i386_wait, }, - { 0x9C, OP_I386, &i386_device::i386_pushf, &i386_device::i386_pushfd, }, - { 0x9D, OP_I386, &i386_device::i386_popf, &i386_device::i386_popfd, }, - { 0x9E, OP_I386, &i386_device::i386_sahf, &i386_device::i386_sahf, }, - { 0x9F, OP_I386, &i386_device::i386_lahf, &i386_device::i386_lahf, }, - { 0xA0, OP_I386, &i386_device::i386_mov_al_m8, &i386_device::i386_mov_al_m8, }, - { 0xA1, OP_I386, &i386_device::i386_mov_ax_m16, &i386_device::i386_mov_eax_m32, }, - { 0xA2, OP_I386, &i386_device::i386_mov_m8_al, &i386_device::i386_mov_m8_al, }, - { 0xA3, OP_I386, &i386_device::i386_mov_m16_ax, &i386_device::i386_mov_m32_eax, }, - { 0xA4, OP_I386, &i386_device::i386_movsb, &i386_device::i386_movsb, }, - { 0xA5, OP_I386, &i386_device::i386_movsw, &i386_device::i386_movsd, }, - { 0xA6, OP_I386, &i386_device::i386_cmpsb, &i386_device::i386_cmpsb, }, - { 0xA7, OP_I386, &i386_device::i386_cmpsw, &i386_device::i386_cmpsd, }, - { 0xA8, OP_I386, &i386_device::i386_test_al_i8, &i386_device::i386_test_al_i8, }, - { 0xA9, OP_I386, &i386_device::i386_test_ax_i16, &i386_device::i386_test_eax_i32, }, - { 0xAA, OP_I386, &i386_device::i386_stosb, &i386_device::i386_stosb, }, - { 0xAB, OP_I386, &i386_device::i386_stosw, &i386_device::i386_stosd, }, - { 0xAC, OP_I386, &i386_device::i386_lodsb, &i386_device::i386_lodsb, }, - { 0xAD, OP_I386, &i386_device::i386_lodsw, &i386_device::i386_lodsd, }, - { 0xAE, OP_I386, &i386_device::i386_scasb, &i386_device::i386_scasb, }, - { 0xAF, OP_I386, &i386_device::i386_scasw, &i386_device::i386_scasd, }, - { 0xB0, OP_I386, &i386_device::i386_mov_al_i8, &i386_device::i386_mov_al_i8, }, - { 0xB1, OP_I386, &i386_device::i386_mov_cl_i8, &i386_device::i386_mov_cl_i8, }, - { 0xB2, OP_I386, &i386_device::i386_mov_dl_i8, &i386_device::i386_mov_dl_i8, }, - { 0xB3, OP_I386, &i386_device::i386_mov_bl_i8, &i386_device::i386_mov_bl_i8, }, - { 0xB4, OP_I386, &i386_device::i386_mov_ah_i8, &i386_device::i386_mov_ah_i8, }, - { 0xB5, OP_I386, &i386_device::i386_mov_ch_i8, &i386_device::i386_mov_ch_i8, }, - { 0xB6, OP_I386, &i386_device::i386_mov_dh_i8, &i386_device::i386_mov_dh_i8, }, - { 0xB7, OP_I386, &i386_device::i386_mov_bh_i8, &i386_device::i386_mov_bh_i8, }, - { 0xB8, OP_I386, &i386_device::i386_mov_ax_i16, &i386_device::i386_mov_eax_i32, }, - { 0xB9, OP_I386, &i386_device::i386_mov_cx_i16, &i386_device::i386_mov_ecx_i32, }, - { 0xBA, OP_I386, &i386_device::i386_mov_dx_i16, &i386_device::i386_mov_edx_i32, }, - { 0xBB, OP_I386, &i386_device::i386_mov_bx_i16, &i386_device::i386_mov_ebx_i32, }, - { 0xBC, OP_I386, &i386_device::i386_mov_sp_i16, &i386_device::i386_mov_esp_i32, }, - { 0xBD, OP_I386, &i386_device::i386_mov_bp_i16, &i386_device::i386_mov_ebp_i32, }, - { 0xBE, OP_I386, &i386_device::i386_mov_si_i16, &i386_device::i386_mov_esi_i32, }, - { 0xBF, OP_I386, &i386_device::i386_mov_di_i16, &i386_device::i386_mov_edi_i32, }, - { 0xC0, OP_I386, &i386_device::i386_groupC0_8, &i386_device::i386_groupC0_8, }, - { 0xC1, OP_I386, &i386_device::i386_groupC1_16, &i386_device::i386_groupC1_32, }, - { 0xC2, OP_I386, &i386_device::i386_ret_near16_i16, &i386_device::i386_ret_near32_i16, }, - { 0xC3, OP_I386, &i386_device::i386_ret_near16, &i386_device::i386_ret_near32, }, - { 0xC4, OP_I386, &i386_device::i386_les16, &i386_device::i386_les32, }, - { 0xC5, OP_I386, &i386_device::i386_lds16, &i386_device::i386_lds32, }, - { 0xC6, OP_I386, &i386_device::i386_mov_rm8_i8, &i386_device::i386_mov_rm8_i8, }, - { 0xC7, OP_I386, &i386_device::i386_mov_rm16_i16, &i386_device::i386_mov_rm32_i32, }, - { 0xC8, OP_I386, &i386_device::i386_enter16, &i386_device::i386_enter32, }, - { 0xC9, OP_I386, &i386_device::i386_leave16, &i386_device::i386_leave32, }, - { 0xCA, OP_I386, &i386_device::i386_retf_i16, &i386_device::i386_retf_i32, }, - { 0xCB, OP_I386, &i386_device::i386_retf16, &i386_device::i386_retf32, }, - { 0xCC, OP_I386, &i386_device::i386_int3, &i386_device::i386_int3, }, - { 0xCD, OP_I386, &i386_device::i386_int, &i386_device::i386_int, }, - { 0xCE, OP_I386, &i386_device::i386_into, &i386_device::i386_into, }, - { 0xCF, OP_I386, &i386_device::i386_iret16, &i386_device::i386_iret32, }, - { 0xD0, OP_I386, &i386_device::i386_groupD0_8, &i386_device::i386_groupD0_8, }, - { 0xD1, OP_I386, &i386_device::i386_groupD1_16, &i386_device::i386_groupD1_32, }, - { 0xD2, OP_I386, &i386_device::i386_groupD2_8, &i386_device::i386_groupD2_8, }, - { 0xD3, OP_I386, &i386_device::i386_groupD3_16, &i386_device::i386_groupD3_32, }, - { 0xD4, OP_I386, &i386_device::i386_aam, &i386_device::i386_aam, }, - { 0xD5, OP_I386, &i386_device::i386_aad, &i386_device::i386_aad, }, - { 0xD6, OP_I386, &i386_device::i386_setalc, &i386_device::i386_setalc, }, - { 0xD7, OP_I386, &i386_device::i386_xlat, &i386_device::i386_xlat, }, - { 0xD8, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xD9, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDA, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDB, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDC, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDD, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDE, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xDF, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, }, - { 0xD8, OP_FPU, &i386_device::i386_x87_group_d8, &i386_device::i386_x87_group_d8, }, - { 0xD9, OP_FPU, &i386_device::i386_x87_group_d9, &i386_device::i386_x87_group_d9, }, - { 0xDA, OP_FPU, &i386_device::i386_x87_group_da, &i386_device::i386_x87_group_da, }, - { 0xDB, OP_FPU, &i386_device::i386_x87_group_db, &i386_device::i386_x87_group_db, }, - { 0xDC, OP_FPU, &i386_device::i386_x87_group_dc, &i386_device::i386_x87_group_dc, }, - { 0xDD, OP_FPU, &i386_device::i386_x87_group_dd, &i386_device::i386_x87_group_dd, }, - { 0xDE, OP_FPU, &i386_device::i386_x87_group_de, &i386_device::i386_x87_group_de, }, - { 0xDF, OP_FPU, &i386_device::i386_x87_group_df, &i386_device::i386_x87_group_df, }, - { 0xE0, OP_I386, &i386_device::i386_loopne16, &i386_device::i386_loopne32, }, - { 0xE1, OP_I386, &i386_device::i386_loopz16, &i386_device::i386_loopz32, }, - { 0xE2, OP_I386, &i386_device::i386_loop16, &i386_device::i386_loop32, }, - { 0xE3, OP_I386, &i386_device::i386_jcxz16, &i386_device::i386_jcxz32, }, - { 0xE4, OP_I386, &i386_device::i386_in_al_i8, &i386_device::i386_in_al_i8, }, - { 0xE5, OP_I386, &i386_device::i386_in_ax_i8, &i386_device::i386_in_eax_i8, }, - { 0xE6, OP_I386, &i386_device::i386_out_al_i8, &i386_device::i386_out_al_i8, }, - { 0xE7, OP_I386, &i386_device::i386_out_ax_i8, &i386_device::i386_out_eax_i8, }, - { 0xE8, OP_I386, &i386_device::i386_call_rel16, &i386_device::i386_call_rel32, }, - { 0xE9, OP_I386, &i386_device::i386_jmp_rel16, &i386_device::i386_jmp_rel32, }, - { 0xEA, OP_I386, &i386_device::i386_jmp_abs16, &i386_device::i386_jmp_abs32, }, - { 0xEB, OP_I386, &i386_device::i386_jmp_rel8, &i386_device::i386_jmp_rel8, }, - { 0xEC, OP_I386, &i386_device::i386_in_al_dx, &i386_device::i386_in_al_dx, }, - { 0xED, OP_I386, &i386_device::i386_in_ax_dx, &i386_device::i386_in_eax_dx, }, - { 0xEE, OP_I386, &i386_device::i386_out_al_dx, &i386_device::i386_out_al_dx, }, - { 0xEF, OP_I386, &i386_device::i386_out_ax_dx, &i386_device::i386_out_eax_dx, }, - { 0xF0, OP_I386, &i386_device::i386_lock, &i386_device::i386_lock, }, - { 0xF1, OP_I386, &i386_device::i386_invalid, &i386_device::i386_invalid, }, - { 0xF2, OP_I386, &i386_device::i386_repne, &i386_device::i386_repne, }, - { 0xF3, OP_I386, &i386_device::i386_rep, &i386_device::i386_rep, }, - { 0xF4, OP_I386, &i386_device::i386_hlt, &i386_device::i386_hlt, }, - { 0xF5, OP_I386, &i386_device::i386_cmc, &i386_device::i386_cmc, }, - { 0xF6, OP_I386, &i386_device::i386_groupF6_8, &i386_device::i386_groupF6_8, }, - { 0xF7, OP_I386, &i386_device::i386_groupF7_16, &i386_device::i386_groupF7_32, }, - { 0xF8, OP_I386, &i386_device::i386_clc, &i386_device::i386_clc, }, - { 0xF9, OP_I386, &i386_device::i386_stc, &i386_device::i386_stc, }, - { 0xFA, OP_I386, &i386_device::i386_cli, &i386_device::i386_cli, }, - { 0xFB, OP_I386, &i386_device::i386_sti, &i386_device::i386_sti, }, - { 0xFC, OP_I386, &i386_device::i386_cld, &i386_device::i386_cld, }, - { 0xFD, OP_I386, &i386_device::i386_std, &i386_device::i386_std, }, - { 0xFE, OP_I386, &i386_device::i386_groupFE_8, &i386_device::i386_groupFE_8, }, - { 0xFF, OP_I386, &i386_device::i386_groupFF_16, &i386_device::i386_groupFF_32, }, + { 0x00, OP_I386, &i386_device::i386_add_rm8_r8, &i386_device::i386_add_rm8_r8, true }, + { 0x01, OP_I386, &i386_device::i386_add_rm16_r16, &i386_device::i386_add_rm32_r32, true }, + { 0x02, OP_I386, &i386_device::i386_add_r8_rm8, &i386_device::i386_add_r8_rm8, false}, + { 0x03, OP_I386, &i386_device::i386_add_r16_rm16, &i386_device::i386_add_r32_rm32, false}, + { 0x04, OP_I386, &i386_device::i386_add_al_i8, &i386_device::i386_add_al_i8, false}, + { 0x05, OP_I386, &i386_device::i386_add_ax_i16, &i386_device::i386_add_eax_i32, false}, + { 0x06, OP_I386, &i386_device::i386_push_es16, &i386_device::i386_push_es32, false}, + { 0x07, OP_I386, &i386_device::i386_pop_es16, &i386_device::i386_pop_es32, false}, + { 0x08, OP_I386, &i386_device::i386_or_rm8_r8, &i386_device::i386_or_rm8_r8, true }, + { 0x09, OP_I386, &i386_device::i386_or_rm16_r16, &i386_device::i386_or_rm32_r32, true }, + { 0x0A, OP_I386, &i386_device::i386_or_r8_rm8, &i386_device::i386_or_r8_rm8, false}, + { 0x0B, OP_I386, &i386_device::i386_or_r16_rm16, &i386_device::i386_or_r32_rm32, false}, + { 0x0C, OP_I386, &i386_device::i386_or_al_i8, &i386_device::i386_or_al_i8, false}, + { 0x0D, OP_I386, &i386_device::i386_or_ax_i16, &i386_device::i386_or_eax_i32, false}, + { 0x0E, OP_I386, &i386_device::i386_push_cs16, &i386_device::i386_push_cs32, false}, + { 0x0F, OP_I386, &i386_device::i386_decode_two_byte, &i386_device::i386_decode_two_byte, true }, + { 0x10, OP_I386, &i386_device::i386_adc_rm8_r8, &i386_device::i386_adc_rm8_r8, true }, + { 0x11, OP_I386, &i386_device::i386_adc_rm16_r16, &i386_device::i386_adc_rm32_r32, true }, + { 0x12, OP_I386, &i386_device::i386_adc_r8_rm8, &i386_device::i386_adc_r8_rm8, false}, + { 0x13, OP_I386, &i386_device::i386_adc_r16_rm16, &i386_device::i386_adc_r32_rm32, false}, + { 0x14, OP_I386, &i386_device::i386_adc_al_i8, &i386_device::i386_adc_al_i8, false}, + { 0x15, OP_I386, &i386_device::i386_adc_ax_i16, &i386_device::i386_adc_eax_i32, false}, + { 0x16, OP_I386, &i386_device::i386_push_ss16, &i386_device::i386_push_ss32, false}, + { 0x17, OP_I386, &i386_device::i386_pop_ss16, &i386_device::i386_pop_ss32, false}, + { 0x18, OP_I386, &i386_device::i386_sbb_rm8_r8, &i386_device::i386_sbb_rm8_r8, true }, + { 0x19, OP_I386, &i386_device::i386_sbb_rm16_r16, &i386_device::i386_sbb_rm32_r32, true }, + { 0x1A, OP_I386, &i386_device::i386_sbb_r8_rm8, &i386_device::i386_sbb_r8_rm8, false}, + { 0x1B, OP_I386, &i386_device::i386_sbb_r16_rm16, &i386_device::i386_sbb_r32_rm32, false}, + { 0x1C, OP_I386, &i386_device::i386_sbb_al_i8, &i386_device::i386_sbb_al_i8, false}, + { 0x1D, OP_I386, &i386_device::i386_sbb_ax_i16, &i386_device::i386_sbb_eax_i32, false}, + { 0x1E, OP_I386, &i386_device::i386_push_ds16, &i386_device::i386_push_ds32, false}, + { 0x1F, OP_I386, &i386_device::i386_pop_ds16, &i386_device::i386_pop_ds32, false}, + { 0x20, OP_I386, &i386_device::i386_and_rm8_r8, &i386_device::i386_and_rm8_r8, true }, + { 0x21, OP_I386, &i386_device::i386_and_rm16_r16, &i386_device::i386_and_rm32_r32, true }, + { 0x22, OP_I386, &i386_device::i386_and_r8_rm8, &i386_device::i386_and_r8_rm8, false}, + { 0x23, OP_I386, &i386_device::i386_and_r16_rm16, &i386_device::i386_and_r32_rm32, false}, + { 0x24, OP_I386, &i386_device::i386_and_al_i8, &i386_device::i386_and_al_i8, false}, + { 0x25, OP_I386, &i386_device::i386_and_ax_i16, &i386_device::i386_and_eax_i32, false}, + { 0x26, OP_I386, &i386_device::i386_segment_ES, &i386_device::i386_segment_ES, false}, + { 0x27, OP_I386, &i386_device::i386_daa, &i386_device::i386_daa, false}, + { 0x28, OP_I386, &i386_device::i386_sub_rm8_r8, &i386_device::i386_sub_rm8_r8, true }, + { 0x29, OP_I386, &i386_device::i386_sub_rm16_r16, &i386_device::i386_sub_rm32_r32, true }, + { 0x2A, OP_I386, &i386_device::i386_sub_r8_rm8, &i386_device::i386_sub_r8_rm8, false}, + { 0x2B, OP_I386, &i386_device::i386_sub_r16_rm16, &i386_device::i386_sub_r32_rm32, false}, + { 0x2C, OP_I386, &i386_device::i386_sub_al_i8, &i386_device::i386_sub_al_i8, false}, + { 0x2D, OP_I386, &i386_device::i386_sub_ax_i16, &i386_device::i386_sub_eax_i32, false}, + { 0x2E, OP_I386, &i386_device::i386_segment_CS, &i386_device::i386_segment_CS, false}, + { 0x2F, OP_I386, &i386_device::i386_das, &i386_device::i386_das, false}, + { 0x30, OP_I386, &i386_device::i386_xor_rm8_r8, &i386_device::i386_xor_rm8_r8, true }, + { 0x31, OP_I386, &i386_device::i386_xor_rm16_r16, &i386_device::i386_xor_rm32_r32, true }, + { 0x32, OP_I386, &i386_device::i386_xor_r8_rm8, &i386_device::i386_xor_r8_rm8, false}, + { 0x33, OP_I386, &i386_device::i386_xor_r16_rm16, &i386_device::i386_xor_r32_rm32, false}, + { 0x34, OP_I386, &i386_device::i386_xor_al_i8, &i386_device::i386_xor_al_i8, false}, + { 0x35, OP_I386, &i386_device::i386_xor_ax_i16, &i386_device::i386_xor_eax_i32, false}, + { 0x36, OP_I386, &i386_device::i386_segment_SS, &i386_device::i386_segment_SS, false}, + { 0x37, OP_I386, &i386_device::i386_aaa, &i386_device::i386_aaa, false}, + { 0x38, OP_I386, &i386_device::i386_cmp_rm8_r8, &i386_device::i386_cmp_rm8_r8, false}, + { 0x39, OP_I386, &i386_device::i386_cmp_rm16_r16, &i386_device::i386_cmp_rm32_r32, false}, + { 0x3A, OP_I386, &i386_device::i386_cmp_r8_rm8, &i386_device::i386_cmp_r8_rm8, false}, + { 0x3B, OP_I386, &i386_device::i386_cmp_r16_rm16, &i386_device::i386_cmp_r32_rm32, false}, + { 0x3C, OP_I386, &i386_device::i386_cmp_al_i8, &i386_device::i386_cmp_al_i8, false}, + { 0x3D, OP_I386, &i386_device::i386_cmp_ax_i16, &i386_device::i386_cmp_eax_i32, false}, + { 0x3E, OP_I386, &i386_device::i386_segment_DS, &i386_device::i386_segment_DS, false}, + { 0x3F, OP_I386, &i386_device::i386_aas, &i386_device::i386_aas, false}, + { 0x40, OP_I386, &i386_device::i386_inc_ax, &i386_device::i386_inc_eax, false}, + { 0x41, OP_I386, &i386_device::i386_inc_cx, &i386_device::i386_inc_ecx, false}, + { 0x42, OP_I386, &i386_device::i386_inc_dx, &i386_device::i386_inc_edx, false}, + { 0x43, OP_I386, &i386_device::i386_inc_bx, &i386_device::i386_inc_ebx, false}, + { 0x44, OP_I386, &i386_device::i386_inc_sp, &i386_device::i386_inc_esp, false}, + { 0x45, OP_I386, &i386_device::i386_inc_bp, &i386_device::i386_inc_ebp, false}, + { 0x46, OP_I386, &i386_device::i386_inc_si, &i386_device::i386_inc_esi, false}, + { 0x47, OP_I386, &i386_device::i386_inc_di, &i386_device::i386_inc_edi, false}, + { 0x48, OP_I386, &i386_device::i386_dec_ax, &i386_device::i386_dec_eax, false}, + { 0x49, OP_I386, &i386_device::i386_dec_cx, &i386_device::i386_dec_ecx, false}, + { 0x4A, OP_I386, &i386_device::i386_dec_dx, &i386_device::i386_dec_edx, false}, + { 0x4B, OP_I386, &i386_device::i386_dec_bx, &i386_device::i386_dec_ebx, false}, + { 0x4C, OP_I386, &i386_device::i386_dec_sp, &i386_device::i386_dec_esp, false}, + { 0x4D, OP_I386, &i386_device::i386_dec_bp, &i386_device::i386_dec_ebp, false}, + { 0x4E, OP_I386, &i386_device::i386_dec_si, &i386_device::i386_dec_esi, false}, + { 0x4F, OP_I386, &i386_device::i386_dec_di, &i386_device::i386_dec_edi, false}, + { 0x50, OP_I386, &i386_device::i386_push_ax, &i386_device::i386_push_eax, false}, + { 0x51, OP_I386, &i386_device::i386_push_cx, &i386_device::i386_push_ecx, false}, + { 0x52, OP_I386, &i386_device::i386_push_dx, &i386_device::i386_push_edx, false}, + { 0x53, OP_I386, &i386_device::i386_push_bx, &i386_device::i386_push_ebx, false}, + { 0x54, OP_I386, &i386_device::i386_push_sp, &i386_device::i386_push_esp, false}, + { 0x55, OP_I386, &i386_device::i386_push_bp, &i386_device::i386_push_ebp, false}, + { 0x56, OP_I386, &i386_device::i386_push_si, &i386_device::i386_push_esi, false}, + { 0x57, OP_I386, &i386_device::i386_push_di, &i386_device::i386_push_edi, false}, + { 0x58, OP_I386, &i386_device::i386_pop_ax, &i386_device::i386_pop_eax, false}, + { 0x59, OP_I386, &i386_device::i386_pop_cx, &i386_device::i386_pop_ecx, false}, + { 0x5A, OP_I386, &i386_device::i386_pop_dx, &i386_device::i386_pop_edx, false}, + { 0x5B, OP_I386, &i386_device::i386_pop_bx, &i386_device::i386_pop_ebx, false}, + { 0x5C, OP_I386, &i386_device::i386_pop_sp, &i386_device::i386_pop_esp, false}, + { 0x5D, OP_I386, &i386_device::i386_pop_bp, &i386_device::i386_pop_ebp, false}, + { 0x5E, OP_I386, &i386_device::i386_pop_si, &i386_device::i386_pop_esi, false}, + { 0x5F, OP_I386, &i386_device::i386_pop_di, &i386_device::i386_pop_edi, false}, + { 0x60, OP_I386, &i386_device::i386_pusha, &i386_device::i386_pushad, false}, + { 0x61, OP_I386, &i386_device::i386_popa, &i386_device::i386_popad, false}, + { 0x62, OP_I386, &i386_device::i386_bound_r16_m16_m16, &i386_device::i386_bound_r32_m32_m32, false}, + { 0x63, OP_I386, &i386_device::i386_arpl, &i386_device::i386_arpl, false}, + { 0x64, OP_I386, &i386_device::i386_segment_FS, &i386_device::i386_segment_FS, false}, + { 0x65, OP_I386, &i386_device::i386_segment_GS, &i386_device::i386_segment_GS, false}, + { 0x66, OP_I386, &i386_device::i386_operand_size, &i386_device::i386_operand_size, false}, + { 0x67, OP_I386, &i386_device::i386_address_size, &i386_device::i386_address_size, false}, + { 0x68, OP_I386, &i386_device::i386_push_i16, &i386_device::i386_push_i32, false}, + { 0x69, OP_I386, &i386_device::i386_imul_r16_rm16_i16, &i386_device::i386_imul_r32_rm32_i32, false}, + { 0x6A, OP_I386, &i386_device::i386_push_i8, &i386_device::i386_push_i8, false}, + { 0x6B, OP_I386, &i386_device::i386_imul_r16_rm16_i8, &i386_device::i386_imul_r32_rm32_i8, false}, + { 0x6C, OP_I386, &i386_device::i386_insb, &i386_device::i386_insb, false}, + { 0x6D, OP_I386, &i386_device::i386_insw, &i386_device::i386_insd, false}, + { 0x6E, OP_I386, &i386_device::i386_outsb, &i386_device::i386_outsb, false}, + { 0x6F, OP_I386, &i386_device::i386_outsw, &i386_device::i386_outsd, false}, + { 0x70, OP_I386, &i386_device::i386_jo_rel8, &i386_device::i386_jo_rel8, false}, + { 0x71, OP_I386, &i386_device::i386_jno_rel8, &i386_device::i386_jno_rel8, false}, + { 0x72, OP_I386, &i386_device::i386_jc_rel8, &i386_device::i386_jc_rel8, false}, + { 0x73, OP_I386, &i386_device::i386_jnc_rel8, &i386_device::i386_jnc_rel8, false}, + { 0x74, OP_I386, &i386_device::i386_jz_rel8, &i386_device::i386_jz_rel8, false}, + { 0x75, OP_I386, &i386_device::i386_jnz_rel8, &i386_device::i386_jnz_rel8, false}, + { 0x76, OP_I386, &i386_device::i386_jbe_rel8, &i386_device::i386_jbe_rel8, false}, + { 0x77, OP_I386, &i386_device::i386_ja_rel8, &i386_device::i386_ja_rel8, false}, + { 0x78, OP_I386, &i386_device::i386_js_rel8, &i386_device::i386_js_rel8, false}, + { 0x79, OP_I386, &i386_device::i386_jns_rel8, &i386_device::i386_jns_rel8, false}, + { 0x7A, OP_I386, &i386_device::i386_jp_rel8, &i386_device::i386_jp_rel8, false}, + { 0x7B, OP_I386, &i386_device::i386_jnp_rel8, &i386_device::i386_jnp_rel8, false}, + { 0x7C, OP_I386, &i386_device::i386_jl_rel8, &i386_device::i386_jl_rel8, false}, + { 0x7D, OP_I386, &i386_device::i386_jge_rel8, &i386_device::i386_jge_rel8, false}, + { 0x7E, OP_I386, &i386_device::i386_jle_rel8, &i386_device::i386_jle_rel8, false}, + { 0x7F, OP_I386, &i386_device::i386_jg_rel8, &i386_device::i386_jg_rel8, false}, + { 0x80, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, true }, + { 0x81, OP_I386, &i386_device::i386_group81_16, &i386_device::i386_group81_32, true }, + { 0x82, OP_I386, &i386_device::i386_group80_8, &i386_device::i386_group80_8, true }, + { 0x83, OP_I386, &i386_device::i386_group83_16, &i386_device::i386_group83_32, true }, + { 0x84, OP_I386, &i386_device::i386_test_rm8_r8, &i386_device::i386_test_rm8_r8, false}, + { 0x85, OP_I386, &i386_device::i386_test_rm16_r16, &i386_device::i386_test_rm32_r32, false}, + { 0x86, OP_I386, &i386_device::i386_xchg_r8_rm8, &i386_device::i386_xchg_r8_rm8, true }, + { 0x87, OP_I386, &i386_device::i386_xchg_r16_rm16, &i386_device::i386_xchg_r32_rm32, true }, + { 0x88, OP_I386, &i386_device::i386_mov_rm8_r8, &i386_device::i386_mov_rm8_r8, false}, + { 0x89, OP_I386, &i386_device::i386_mov_rm16_r16, &i386_device::i386_mov_rm32_r32, false}, + { 0x8A, OP_I386, &i386_device::i386_mov_r8_rm8, &i386_device::i386_mov_r8_rm8, false}, + { 0x8B, OP_I386, &i386_device::i386_mov_r16_rm16, &i386_device::i386_mov_r32_rm32, false}, + { 0x8C, OP_I386, &i386_device::i386_mov_rm16_sreg, &i386_device::i386_mov_rm16_sreg, false}, + { 0x8D, OP_I386, &i386_device::i386_lea16, &i386_device::i386_lea32, false}, + { 0x8E, OP_I386, &i386_device::i386_mov_sreg_rm16, &i386_device::i386_mov_sreg_rm16, false}, + { 0x8F, OP_I386, &i386_device::i386_pop_rm16, &i386_device::i386_pop_rm32, false}, + { 0x90, OP_I386, &i386_device::i386_nop, &i386_device::i386_nop, false}, + { 0x91, OP_I386, &i386_device::i386_xchg_ax_cx, &i386_device::i386_xchg_eax_ecx, false}, + { 0x92, OP_I386, &i386_device::i386_xchg_ax_dx, &i386_device::i386_xchg_eax_edx, false}, + { 0x93, OP_I386, &i386_device::i386_xchg_ax_bx, &i386_device::i386_xchg_eax_ebx, false}, + { 0x94, OP_I386, &i386_device::i386_xchg_ax_sp, &i386_device::i386_xchg_eax_esp, false}, + { 0x95, OP_I386, &i386_device::i386_xchg_ax_bp, &i386_device::i386_xchg_eax_ebp, false}, + { 0x96, OP_I386, &i386_device::i386_xchg_ax_si, &i386_device::i386_xchg_eax_esi, false}, + { 0x97, OP_I386, &i386_device::i386_xchg_ax_di, &i386_device::i386_xchg_eax_edi, false}, + { 0x98, OP_I386, &i386_device::i386_cbw, &i386_device::i386_cwde, false}, + { 0x99, OP_I386, &i386_device::i386_cwd, &i386_device::i386_cdq, false}, + { 0x9A, OP_I386, &i386_device::i386_call_abs16, &i386_device::i386_call_abs32, false}, + { 0x9B, OP_I386, &i386_device::i386_wait, &i386_device::i386_wait, false}, + { 0x9C, OP_I386, &i386_device::i386_pushf, &i386_device::i386_pushfd, false}, + { 0x9D, OP_I386, &i386_device::i386_popf, &i386_device::i386_popfd, false}, + { 0x9E, OP_I386, &i386_device::i386_sahf, &i386_device::i386_sahf, false}, + { 0x9F, OP_I386, &i386_device::i386_lahf, &i386_device::i386_lahf, false}, + { 0xA0, OP_I386, &i386_device::i386_mov_al_m8, &i386_device::i386_mov_al_m8, false}, + { 0xA1, OP_I386, &i386_device::i386_mov_ax_m16, &i386_device::i386_mov_eax_m32, false}, + { 0xA2, OP_I386, &i386_device::i386_mov_m8_al, &i386_device::i386_mov_m8_al, false}, + { 0xA3, OP_I386, &i386_device::i386_mov_m16_ax, &i386_device::i386_mov_m32_eax, false}, + { 0xA4, OP_I386, &i386_device::i386_movsb, &i386_device::i386_movsb, false}, + { 0xA5, OP_I386, &i386_device::i386_movsw, &i386_device::i386_movsd, false}, + { 0xA6, OP_I386, &i386_device::i386_cmpsb, &i386_device::i386_cmpsb, false}, + { 0xA7, OP_I386, &i386_device::i386_cmpsw, &i386_device::i386_cmpsd, false}, + { 0xA8, OP_I386, &i386_device::i386_test_al_i8, &i386_device::i386_test_al_i8, false}, + { 0xA9, OP_I386, &i386_device::i386_test_ax_i16, &i386_device::i386_test_eax_i32, false}, + { 0xAA, OP_I386, &i386_device::i386_stosb, &i386_device::i386_stosb, false}, + { 0xAB, OP_I386, &i386_device::i386_stosw, &i386_device::i386_stosd, false}, + { 0xAC, OP_I386, &i386_device::i386_lodsb, &i386_device::i386_lodsb, false}, + { 0xAD, OP_I386, &i386_device::i386_lodsw, &i386_device::i386_lodsd, false}, + { 0xAE, OP_I386, &i386_device::i386_scasb, &i386_device::i386_scasb, false}, + { 0xAF, OP_I386, &i386_device::i386_scasw, &i386_device::i386_scasd, false}, + { 0xB0, OP_I386, &i386_device::i386_mov_al_i8, &i386_device::i386_mov_al_i8, false}, + { 0xB1, OP_I386, &i386_device::i386_mov_cl_i8, &i386_device::i386_mov_cl_i8, false}, + { 0xB2, OP_I386, &i386_device::i386_mov_dl_i8, &i386_device::i386_mov_dl_i8, false}, + { 0xB3, OP_I386, &i386_device::i386_mov_bl_i8, &i386_device::i386_mov_bl_i8, false}, + { 0xB4, OP_I386, &i386_device::i386_mov_ah_i8, &i386_device::i386_mov_ah_i8, false}, + { 0xB5, OP_I386, &i386_device::i386_mov_ch_i8, &i386_device::i386_mov_ch_i8, false}, + { 0xB6, OP_I386, &i386_device::i386_mov_dh_i8, &i386_device::i386_mov_dh_i8, false}, + { 0xB7, OP_I386, &i386_device::i386_mov_bh_i8, &i386_device::i386_mov_bh_i8, false}, + { 0xB8, OP_I386, &i386_device::i386_mov_ax_i16, &i386_device::i386_mov_eax_i32, false}, + { 0xB9, OP_I386, &i386_device::i386_mov_cx_i16, &i386_device::i386_mov_ecx_i32, false}, + { 0xBA, OP_I386, &i386_device::i386_mov_dx_i16, &i386_device::i386_mov_edx_i32, false}, + { 0xBB, OP_I386, &i386_device::i386_mov_bx_i16, &i386_device::i386_mov_ebx_i32, false}, + { 0xBC, OP_I386, &i386_device::i386_mov_sp_i16, &i386_device::i386_mov_esp_i32, false}, + { 0xBD, OP_I386, &i386_device::i386_mov_bp_i16, &i386_device::i386_mov_ebp_i32, false}, + { 0xBE, OP_I386, &i386_device::i386_mov_si_i16, &i386_device::i386_mov_esi_i32, false}, + { 0xBF, OP_I386, &i386_device::i386_mov_di_i16, &i386_device::i386_mov_edi_i32, false}, + { 0xC0, OP_I386, &i386_device::i386_groupC0_8, &i386_device::i386_groupC0_8, false}, + { 0xC1, OP_I386, &i386_device::i386_groupC1_16, &i386_device::i386_groupC1_32, false}, + { 0xC2, OP_I386, &i386_device::i386_ret_near16_i16, &i386_device::i386_ret_near32_i16, false}, + { 0xC3, OP_I386, &i386_device::i386_ret_near16, &i386_device::i386_ret_near32, false}, + { 0xC4, OP_I386, &i386_device::i386_les16, &i386_device::i386_les32, false}, + { 0xC5, OP_I386, &i386_device::i386_lds16, &i386_device::i386_lds32, false}, + { 0xC6, OP_I386, &i386_device::i386_mov_rm8_i8, &i386_device::i386_mov_rm8_i8, false}, + { 0xC7, OP_I386, &i386_device::i386_mov_rm16_i16, &i386_device::i386_mov_rm32_i32, false}, + { 0xC8, OP_I386, &i386_device::i386_enter16, &i386_device::i386_enter32, false}, + { 0xC9, OP_I386, &i386_device::i386_leave16, &i386_device::i386_leave32, false}, + { 0xCA, OP_I386, &i386_device::i386_retf_i16, &i386_device::i386_retf_i32, false}, + { 0xCB, OP_I386, &i386_device::i386_retf16, &i386_device::i386_retf32, false}, + { 0xCC, OP_I386, &i386_device::i386_int3, &i386_device::i386_int3, false}, + { 0xCD, OP_I386, &i386_device::i386_int, &i386_device::i386_int, false}, + { 0xCE, OP_I386, &i386_device::i386_into, &i386_device::i386_into, false}, + { 0xCF, OP_I386, &i386_device::i386_iret16, &i386_device::i386_iret32, false}, + { 0xD0, OP_I386, &i386_device::i386_groupD0_8, &i386_device::i386_groupD0_8, false}, + { 0xD1, OP_I386, &i386_device::i386_groupD1_16, &i386_device::i386_groupD1_32, false}, + { 0xD2, OP_I386, &i386_device::i386_groupD2_8, &i386_device::i386_groupD2_8, false}, + { 0xD3, OP_I386, &i386_device::i386_groupD3_16, &i386_device::i386_groupD3_32, false}, + { 0xD4, OP_I386, &i386_device::i386_aam, &i386_device::i386_aam, false}, + { 0xD5, OP_I386, &i386_device::i386_aad, &i386_device::i386_aad, false}, + { 0xD6, OP_I386, &i386_device::i386_setalc, &i386_device::i386_setalc, false}, + { 0xD7, OP_I386, &i386_device::i386_xlat, &i386_device::i386_xlat, false}, + { 0xD8, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xD9, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDA, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDB, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDC, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDD, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDE, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xDF, OP_I386, &i386_device::i386_escape, &i386_device::i386_escape, false}, + { 0xD8, OP_FPU, &i386_device::i386_x87_group_d8, &i386_device::i386_x87_group_d8, false}, + { 0xD9, OP_FPU, &i386_device::i386_x87_group_d9, &i386_device::i386_x87_group_d9, false}, + { 0xDA, OP_FPU, &i386_device::i386_x87_group_da, &i386_device::i386_x87_group_da, false}, + { 0xDB, OP_FPU, &i386_device::i386_x87_group_db, &i386_device::i386_x87_group_db, false}, + { 0xDC, OP_FPU, &i386_device::i386_x87_group_dc, &i386_device::i386_x87_group_dc, false}, + { 0xDD, OP_FPU, &i386_device::i386_x87_group_dd, &i386_device::i386_x87_group_dd, false}, + { 0xDE, OP_FPU, &i386_device::i386_x87_group_de, &i386_device::i386_x87_group_de, false}, + { 0xDF, OP_FPU, &i386_device::i386_x87_group_df, &i386_device::i386_x87_group_df, false}, + { 0xE0, OP_I386, &i386_device::i386_loopne16, &i386_device::i386_loopne32, false}, + { 0xE1, OP_I386, &i386_device::i386_loopz16, &i386_device::i386_loopz32, false}, + { 0xE2, OP_I386, &i386_device::i386_loop16, &i386_device::i386_loop32, false}, + { 0xE3, OP_I386, &i386_device::i386_jcxz16, &i386_device::i386_jcxz32, false}, + { 0xE4, OP_I386, &i386_device::i386_in_al_i8, &i386_device::i386_in_al_i8, false}, + { 0xE5, OP_I386, &i386_device::i386_in_ax_i8, &i386_device::i386_in_eax_i8, false}, + { 0xE6, OP_I386, &i386_device::i386_out_al_i8, &i386_device::i386_out_al_i8, false}, + { 0xE7, OP_I386, &i386_device::i386_out_ax_i8, &i386_device::i386_out_eax_i8, false}, + { 0xE8, OP_I386, &i386_device::i386_call_rel16, &i386_device::i386_call_rel32, false}, + { 0xE9, OP_I386, &i386_device::i386_jmp_rel16, &i386_device::i386_jmp_rel32, false}, + { 0xEA, OP_I386, &i386_device::i386_jmp_abs16, &i386_device::i386_jmp_abs32, false}, + { 0xEB, OP_I386, &i386_device::i386_jmp_rel8, &i386_device::i386_jmp_rel8, false}, + { 0xEC, OP_I386, &i386_device::i386_in_al_dx, &i386_device::i386_in_al_dx, false}, + { 0xED, OP_I386, &i386_device::i386_in_ax_dx, &i386_device::i386_in_eax_dx, false}, + { 0xEE, OP_I386, &i386_device::i386_out_al_dx, &i386_device::i386_out_al_dx, false}, + { 0xEF, OP_I386, &i386_device::i386_out_ax_dx, &i386_device::i386_out_eax_dx, false}, + { 0xF0, OP_I386, &i386_device::i386_lock, &i386_device::i386_lock, false}, + { 0xF1, OP_I386, &i386_device::i386_invalid, &i386_device::i386_invalid, false}, + { 0xF2, OP_I386, &i386_device::i386_repne, &i386_device::i386_repne, false}, + { 0xF3, OP_I386, &i386_device::i386_rep, &i386_device::i386_rep, false}, + { 0xF4, OP_I386, &i386_device::i386_hlt, &i386_device::i386_hlt, false}, + { 0xF5, OP_I386, &i386_device::i386_cmc, &i386_device::i386_cmc, false}, + { 0xF6, OP_I386, &i386_device::i386_groupF6_8, &i386_device::i386_groupF6_8, true }, + { 0xF7, OP_I386, &i386_device::i386_groupF7_16, &i386_device::i386_groupF7_32, true }, + { 0xF8, OP_I386, &i386_device::i386_clc, &i386_device::i386_clc, false}, + { 0xF9, OP_I386, &i386_device::i386_stc, &i386_device::i386_stc, false}, + { 0xFA, OP_I386, &i386_device::i386_cli, &i386_device::i386_cli, false}, + { 0xFB, OP_I386, &i386_device::i386_sti, &i386_device::i386_sti, false}, + { 0xFC, OP_I386, &i386_device::i386_cld, &i386_device::i386_cld, false}, + { 0xFD, OP_I386, &i386_device::i386_std, &i386_device::i386_std, false}, + { 0xFE, OP_I386, &i386_device::i386_groupFE_8, &i386_device::i386_groupFE_8, true }, + { 0xFF, OP_I386, &i386_device::i386_groupFF_16, &i386_device::i386_groupFF_32, true }, /* 0F ?? */ - { 0x00, OP_2BYTE|OP_I386, &i386_device::i386_group0F00_16, &i386_device::i386_group0F00_32, }, - { 0x01, OP_2BYTE|OP_I386, &i386_device::i386_group0F01_16, &i386_device::i386_group0F01_32, }, - { 0x01, OP_2BYTE|OP_I486, &i386_device::i486_group0F01_16, &i386_device::i486_group0F01_32, }, - { 0x02, OP_2BYTE|OP_I386, &i386_device::i386_lar_r16_rm16, &i386_device::i386_lar_r32_rm32, }, - { 0x03, OP_2BYTE|OP_I386, &i386_device::i386_lsl_r16_rm16, &i386_device::i386_lsl_r32_rm32, }, - { 0x06, OP_2BYTE|OP_I386, &i386_device::i386_clts, &i386_device::i386_clts, }, - { 0x07, OP_2BYTE|OP_I386, &i386_device::i386_loadall, &i386_device::i386_loadall, }, - { 0x08, OP_2BYTE|OP_I486, &i386_device::i486_invd, &i386_device::i486_invd, }, - { 0x09, OP_2BYTE|OP_I486, &i386_device::i486_wbinvd, &i386_device::i486_wbinvd, }, - { 0x0B, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_ud2, &i386_device::pentium_ud2, }, - { 0x10, OP_2BYTE|OP_SSE, &i386_device::sse_movups_r128_rm128, &i386_device::sse_movups_r128_rm128, }, - { 0x11, OP_2BYTE|OP_SSE, &i386_device::sse_movups_rm128_r128, &i386_device::sse_movups_rm128_r128, }, - { 0x12, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_r128_m64, &i386_device::sse_movlps_r128_m64, }, - { 0x13, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_m64_r128, &i386_device::sse_movlps_m64_r128, }, - { 0x14, OP_2BYTE|OP_SSE, &i386_device::sse_unpcklps_r128_rm128, &i386_device::sse_unpcklps_r128_rm128, }, - { 0x15, OP_2BYTE|OP_SSE, &i386_device::sse_unpckhps_r128_rm128, &i386_device::sse_unpckhps_r128_rm128, }, - { 0x16, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_r128_m64, &i386_device::sse_movhps_r128_m64, }, - { 0x17, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_m64_r128, &i386_device::sse_movhps_m64_r128, }, - { 0x18, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_prefetch_m8, &i386_device::pentium_prefetch_m8, }, - { 0x20, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_cr, &i386_device::i386_mov_r32_cr, }, - { 0x21, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_dr, &i386_device::i386_mov_r32_dr, }, - { 0x22, OP_2BYTE|OP_I386, &i386_device::i386_mov_cr_r32, &i386_device::i386_mov_cr_r32, }, - { 0x22, OP_2BYTE|OP_I486, &i386_device::i486_mov_cr_r32, &i386_device::i486_mov_cr_r32, }, - { 0x23, OP_2BYTE|OP_I386, &i386_device::i386_mov_dr_r32, &i386_device::i386_mov_dr_r32, }, - { 0x24, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_tr, &i386_device::i386_mov_r32_tr, }, - { 0x26, OP_2BYTE|OP_I386, &i386_device::i386_mov_tr_r32, &i386_device::i386_mov_tr_r32, }, - { 0x28, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_r128_rm128, &i386_device::sse_movaps_r128_rm128, }, - { 0x29, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_rm128_r128, &i386_device::sse_movaps_rm128_r128, }, - { 0x2a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtpi2ps_r128_rm64, &i386_device::sse_cvtpi2ps_r128_rm64, }, - { 0x2b, OP_2BYTE|OP_SSE, &i386_device::sse_movntps_m128_r128, &i386_device::sse_movntps_m128_r128, }, - { 0x2c, OP_2BYTE|OP_SSE, &i386_device::sse_cvttps2pi_r64_r128m64, &i386_device::sse_cvttps2pi_r64_r128m64,}, - { 0x2d, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pi_r64_r128m64, &i386_device::sse_cvtps2pi_r64_r128m64,}, - { 0x2e, OP_2BYTE|OP_SSE, &i386_device::sse_ucomiss_r128_r128m32, &i386_device::sse_ucomiss_r128_r128m32,}, - { 0x2f, OP_2BYTE|OP_SSE, &i386_device::sse_comiss_r128_r128m32, &i386_device::sse_comiss_r128_r128m32, }, - { 0x30, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_wrmsr, &i386_device::pentium_wrmsr, }, - { 0x31, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdtsc, &i386_device::pentium_rdtsc, }, - { 0x32, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdmsr, &i386_device::pentium_rdmsr, }, - { 0x40, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovo_r16_rm16, &i386_device::pentium_cmovo_r32_rm32, }, - { 0x41, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovno_r16_rm16, &i386_device::pentium_cmovno_r32_rm32, }, - { 0x42, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovb_r16_rm16, &i386_device::pentium_cmovb_r32_rm32, }, - { 0x43, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovae_r16_rm16, &i386_device::pentium_cmovae_r32_rm32, }, - { 0x44, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmove_r16_rm16, &i386_device::pentium_cmove_r32_rm32, }, - { 0x45, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovne_r16_rm16, &i386_device::pentium_cmovne_r32_rm32, }, - { 0x46, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovbe_r16_rm16, &i386_device::pentium_cmovbe_r32_rm32, }, - { 0x47, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmova_r16_rm16, &i386_device::pentium_cmova_r32_rm32, }, - { 0x48, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovs_r16_rm16, &i386_device::pentium_cmovs_r32_rm32, }, - { 0x49, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovns_r16_rm16, &i386_device::pentium_cmovns_r32_rm32, }, - { 0x4a, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovp_r16_rm16, &i386_device::pentium_cmovp_r32_rm32, }, - { 0x4b, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovnp_r16_rm16, &i386_device::pentium_cmovnp_r32_rm32, }, - { 0x4c, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovl_r16_rm16, &i386_device::pentium_cmovl_r32_rm32, }, - { 0x4d, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovge_r16_rm16, &i386_device::pentium_cmovge_r32_rm32, }, - { 0x4e, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovle_r16_rm16, &i386_device::pentium_cmovle_r32_rm32, }, - { 0x4f, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovg_r16_rm16, &i386_device::pentium_cmovg_r32_rm32, }, - { 0x50, OP_2BYTE|OP_SSE, &i386_device::sse_movmskps_r16_r128, &i386_device::sse_movmskps_r32_r128, }, - { 0x51, OP_2BYTE|OP_SSE, &i386_device::sse_sqrtps_r128_rm128, &i386_device::sse_sqrtps_r128_rm128, }, - { 0x52, OP_2BYTE|OP_SSE, &i386_device::sse_rsqrtps_r128_rm128, &i386_device::sse_rsqrtps_r128_rm128, }, - { 0x53, OP_2BYTE|OP_SSE, &i386_device::sse_rcpps_r128_rm128, &i386_device::sse_rcpps_r128_rm128, }, - { 0x54, OP_2BYTE|OP_SSE, &i386_device::sse_andps_r128_rm128, &i386_device::sse_andps_r128_rm128, }, - { 0x55, OP_2BYTE|OP_SSE, &i386_device::sse_andnps_r128_rm128, &i386_device::sse_andnps_r128_rm128, }, - { 0x56, OP_2BYTE|OP_SSE, &i386_device::sse_orps_r128_rm128, &i386_device::sse_orps_r128_rm128, }, - { 0x57, OP_2BYTE|OP_SSE, &i386_device::sse_xorps, &i386_device::sse_xorps, }, - { 0x58, OP_2BYTE|OP_SSE, &i386_device::sse_addps, &i386_device::sse_addps, }, - { 0x59, OP_2BYTE|OP_SSE, &i386_device::sse_mulps, &i386_device::sse_mulps, }, - { 0x5a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pd_r128_r128m64, &i386_device::sse_cvtps2pd_r128_r128m64,}, - { 0x5b, OP_2BYTE|OP_SSE, &i386_device::sse_cvtdq2ps_r128_rm128, &i386_device::sse_cvtdq2ps_r128_rm128, }, - { 0x5c, OP_2BYTE|OP_SSE, &i386_device::sse_subps, &i386_device::sse_subps, }, - { 0x5d, OP_2BYTE|OP_SSE, &i386_device::sse_minps, &i386_device::sse_minps, }, - { 0x5e, OP_2BYTE|OP_SSE, &i386_device::sse_divps, &i386_device::sse_divps, }, - { 0x5f, OP_2BYTE|OP_SSE, &i386_device::sse_maxps, &i386_device::sse_maxps, }, - { 0x60, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklbw_r64_r64m32, &i386_device::mmx_punpcklbw_r64_r64m32,}, - { 0x61, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklwd_r64_r64m32, &i386_device::mmx_punpcklwd_r64_r64m32,}, - { 0x62, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckldq_r64_r64m32, &i386_device::mmx_punpckldq_r64_r64m32,}, - { 0x63, OP_2BYTE|OP_MMX, &i386_device::mmx_packsswb_r64_rm64, &i386_device::mmx_packsswb_r64_rm64, }, - { 0x64, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtb_r64_rm64, &i386_device::mmx_pcmpgtb_r64_rm64, }, - { 0x65, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtw_r64_rm64, &i386_device::mmx_pcmpgtw_r64_rm64, }, - { 0x66, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtd_r64_rm64, &i386_device::mmx_pcmpgtd_r64_rm64, }, - { 0x67, OP_2BYTE|OP_MMX, &i386_device::mmx_packuswb_r64_rm64, &i386_device::mmx_packuswb_r64_rm64, }, - { 0x68, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhbw_r64_rm64, &i386_device::mmx_punpckhbw_r64_rm64, }, - { 0x69, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhwd_r64_rm64, &i386_device::mmx_punpckhwd_r64_rm64, }, - { 0x6a, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhdq_r64_rm64, &i386_device::mmx_punpckhdq_r64_rm64, }, - { 0x6b, OP_2BYTE|OP_MMX, &i386_device::mmx_packssdw_r64_rm64, &i386_device::mmx_packssdw_r64_rm64, }, - { 0x6e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_r64_rm32, &i386_device::mmx_movd_r64_rm32, }, - { 0x6f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_r64_rm64, &i386_device::mmx_movq_r64_rm64, }, - { 0x70, OP_2BYTE|OP_MMX, &i386_device::mmx_pshufw_r64_rm64_i8, &i386_device::mmx_pshufw_r64_rm64_i8, }, - { 0x71, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f71, &i386_device::mmx_group_0f71, }, - { 0x72, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f72, &i386_device::mmx_group_0f72, }, - { 0x73, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f73, &i386_device::mmx_group_0f73, }, - { 0x74, OP_2BYTE|OP_CYRIX, &i386_device::i386_cyrix_unknown, &i386_device::i386_cyrix_unknown, }, - { 0x74, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqb_r64_rm64, &i386_device::mmx_pcmpeqb_r64_rm64, }, - { 0x75, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqw_r64_rm64, &i386_device::mmx_pcmpeqw_r64_rm64, }, - { 0x76, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqd_r64_rm64, &i386_device::mmx_pcmpeqd_r64_rm64, }, - { 0x77, OP_2BYTE|OP_MMX, &i386_device::mmx_emms, &i386_device::mmx_emms, }, - { 0x7e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_rm32_r64, &i386_device::mmx_movd_rm32_r64, }, - { 0x7f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_rm64_r64, &i386_device::mmx_movq_rm64_r64, }, - { 0x80, OP_2BYTE|OP_I386, &i386_device::i386_jo_rel16, &i386_device::i386_jo_rel32, }, - { 0x81, OP_2BYTE|OP_I386, &i386_device::i386_jno_rel16, &i386_device::i386_jno_rel32, }, - { 0x82, OP_2BYTE|OP_I386, &i386_device::i386_jc_rel16, &i386_device::i386_jc_rel32, }, - { 0x83, OP_2BYTE|OP_I386, &i386_device::i386_jnc_rel16, &i386_device::i386_jnc_rel32, }, - { 0x84, OP_2BYTE|OP_I386, &i386_device::i386_jz_rel16, &i386_device::i386_jz_rel32, }, - { 0x85, OP_2BYTE|OP_I386, &i386_device::i386_jnz_rel16, &i386_device::i386_jnz_rel32, }, - { 0x86, OP_2BYTE|OP_I386, &i386_device::i386_jbe_rel16, &i386_device::i386_jbe_rel32, }, - { 0x87, OP_2BYTE|OP_I386, &i386_device::i386_ja_rel16, &i386_device::i386_ja_rel32, }, - { 0x88, OP_2BYTE|OP_I386, &i386_device::i386_js_rel16, &i386_device::i386_js_rel32, }, - { 0x89, OP_2BYTE|OP_I386, &i386_device::i386_jns_rel16, &i386_device::i386_jns_rel32, }, - { 0x8A, OP_2BYTE|OP_I386, &i386_device::i386_jp_rel16, &i386_device::i386_jp_rel32, }, - { 0x8B, OP_2BYTE|OP_I386, &i386_device::i386_jnp_rel16, &i386_device::i386_jnp_rel32, }, - { 0x8C, OP_2BYTE|OP_I386, &i386_device::i386_jl_rel16, &i386_device::i386_jl_rel32, }, - { 0x8D, OP_2BYTE|OP_I386, &i386_device::i386_jge_rel16, &i386_device::i386_jge_rel32, }, - { 0x8E, OP_2BYTE|OP_I386, &i386_device::i386_jle_rel16, &i386_device::i386_jle_rel32, }, - { 0x8F, OP_2BYTE|OP_I386, &i386_device::i386_jg_rel16, &i386_device::i386_jg_rel32, }, - { 0x90, OP_2BYTE|OP_I386, &i386_device::i386_seto_rm8, &i386_device::i386_seto_rm8, }, - { 0x91, OP_2BYTE|OP_I386, &i386_device::i386_setno_rm8, &i386_device::i386_setno_rm8, }, - { 0x92, OP_2BYTE|OP_I386, &i386_device::i386_setc_rm8, &i386_device::i386_setc_rm8, }, - { 0x93, OP_2BYTE|OP_I386, &i386_device::i386_setnc_rm8, &i386_device::i386_setnc_rm8, }, - { 0x94, OP_2BYTE|OP_I386, &i386_device::i386_setz_rm8, &i386_device::i386_setz_rm8, }, - { 0x95, OP_2BYTE|OP_I386, &i386_device::i386_setnz_rm8, &i386_device::i386_setnz_rm8, }, - { 0x96, OP_2BYTE|OP_I386, &i386_device::i386_setbe_rm8, &i386_device::i386_setbe_rm8, }, - { 0x97, OP_2BYTE|OP_I386, &i386_device::i386_seta_rm8, &i386_device::i386_seta_rm8, }, - { 0x98, OP_2BYTE|OP_I386, &i386_device::i386_sets_rm8, &i386_device::i386_sets_rm8, }, - { 0x99, OP_2BYTE|OP_I386, &i386_device::i386_setns_rm8, &i386_device::i386_setns_rm8, }, - { 0x9A, OP_2BYTE|OP_I386, &i386_device::i386_setp_rm8, &i386_device::i386_setp_rm8, }, - { 0x9B, OP_2BYTE|OP_I386, &i386_device::i386_setnp_rm8, &i386_device::i386_setnp_rm8, }, - { 0x9C, OP_2BYTE|OP_I386, &i386_device::i386_setl_rm8, &i386_device::i386_setl_rm8, }, - { 0x9D, OP_2BYTE|OP_I386, &i386_device::i386_setge_rm8, &i386_device::i386_setge_rm8, }, - { 0x9E, OP_2BYTE|OP_I386, &i386_device::i386_setle_rm8, &i386_device::i386_setle_rm8, }, - { 0x9F, OP_2BYTE|OP_I386, &i386_device::i386_setg_rm8, &i386_device::i386_setg_rm8, }, - { 0xA0, OP_2BYTE|OP_I386, &i386_device::i386_push_fs16, &i386_device::i386_push_fs32, }, - { 0xA1, OP_2BYTE|OP_I386, &i386_device::i386_pop_fs16, &i386_device::i386_pop_fs32, }, - { 0xA2, OP_2BYTE|OP_I486, &i386_device::i486_cpuid, &i386_device::i486_cpuid, }, - { 0xA3, OP_2BYTE|OP_I386, &i386_device::i386_bt_rm16_r16, &i386_device::i386_bt_rm32_r32, }, - { 0xA4, OP_2BYTE|OP_I386, &i386_device::i386_shld16_i8, &i386_device::i386_shld32_i8, }, - { 0xA5, OP_2BYTE|OP_I386, &i386_device::i386_shld16_cl, &i386_device::i386_shld32_cl, }, - { 0xA8, OP_2BYTE|OP_I386, &i386_device::i386_push_gs16, &i386_device::i386_push_gs32, }, - { 0xA9, OP_2BYTE|OP_I386, &i386_device::i386_pop_gs16, &i386_device::i386_pop_gs32, }, - { 0xAA, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rsm, &i386_device::pentium_rsm, }, - { 0xAB, OP_2BYTE|OP_I386, &i386_device::i386_bts_rm16_r16, &i386_device::i386_bts_rm32_r32, }, - { 0xAC, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_i8, &i386_device::i386_shrd32_i8, }, - { 0xAD, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_cl, &i386_device::i386_shrd32_cl, }, - { 0xAE, OP_2BYTE|OP_SSE, &i386_device::sse_sse_group0fae, &i386_device::sse_sse_group0fae, }, - { 0xAF, OP_2BYTE|OP_I386, &i386_device::i386_imul_r16_rm16, &i386_device::i386_imul_r32_rm32, }, - { 0xB0, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm8_r8, &i386_device::i486_cmpxchg_rm8_r8, }, - { 0xB1, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm16_r16, &i386_device::i486_cmpxchg_rm32_r32, }, - { 0xB2, OP_2BYTE|OP_I386, &i386_device::i386_lss16, &i386_device::i386_lss32, }, - { 0xB3, OP_2BYTE|OP_I386, &i386_device::i386_btr_rm16_r16, &i386_device::i386_btr_rm32_r32, }, - { 0xB4, OP_2BYTE|OP_I386, &i386_device::i386_lfs16, &i386_device::i386_lfs32, }, - { 0xB5, OP_2BYTE|OP_I386, &i386_device::i386_lgs16, &i386_device::i386_lgs32, }, - { 0xB6, OP_2BYTE|OP_I386, &i386_device::i386_movzx_r16_rm8, &i386_device::i386_movzx_r32_rm8, }, - { 0xB7, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movzx_r32_rm16, }, - { 0xBA, OP_2BYTE|OP_I386, &i386_device::i386_group0FBA_16, &i386_device::i386_group0FBA_32, }, - { 0xBB, OP_2BYTE|OP_I386, &i386_device::i386_btc_rm16_r16, &i386_device::i386_btc_rm32_r32, }, - { 0xBC, OP_2BYTE|OP_I386, &i386_device::i386_bsf_r16_rm16, &i386_device::i386_bsf_r32_rm32, }, - { 0xBD, OP_2BYTE|OP_I386, &i386_device::i386_bsr_r16_rm16, &i386_device::i386_bsr_r32_rm32, }, - { 0xBE, OP_2BYTE|OP_I386, &i386_device::i386_movsx_r16_rm8, &i386_device::i386_movsx_r32_rm8, }, - { 0xBF, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movsx_r32_rm16, }, - { 0xC0, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm8_r8, &i386_device::i486_xadd_rm8_r8, }, - { 0xC1, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm16_r16, &i386_device::i486_xadd_rm32_r32, }, - { 0xC2, OP_2BYTE|OP_SSE, &i386_device::sse_cmpps_r128_rm128_i8, &i386_device::sse_cmpps_r128_rm128_i8, }, - { 0xC3, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movnti_m16_r16, &i386_device::pentium_movnti_m32_r32, }, - { 0xC4, OP_2BYTE|OP_SSE, &i386_device::sse_pinsrw_r64_r16m16_i8, &i386_device::sse_pinsrw_r64_r32m16_i8,}, - { 0xC5, OP_2BYTE|OP_SSE, &i386_device::sse_pextrw_r16_r64_i8, &i386_device::sse_pextrw_r32_r64_i8, }, - { 0xC6, OP_2BYTE|OP_SSE, &i386_device::sse_shufps, &i386_device::sse_shufps, }, - { 0xC7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmpxchg8b_m64, &i386_device::pentium_cmpxchg8b_m64, }, - { 0xC8, OP_2BYTE|OP_I486, &i386_device::i486_bswap_eax, &i386_device::i486_bswap_eax, }, - { 0xC9, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ecx, &i386_device::i486_bswap_ecx, }, - { 0xCA, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edx, &i386_device::i486_bswap_edx, }, - { 0xCB, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebx, &i386_device::i486_bswap_ebx, }, - { 0xCC, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esp, &i386_device::i486_bswap_esp, }, - { 0xCD, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebp, &i386_device::i486_bswap_ebp, }, - { 0xCE, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esi, &i386_device::i486_bswap_esi, }, - { 0xCF, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edi, &i386_device::i486_bswap_edi, }, - { 0xD1, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlw_r64_rm64, &i386_device::mmx_psrlw_r64_rm64, }, - { 0xD2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrld_r64_rm64, &i386_device::mmx_psrld_r64_rm64, }, - { 0xD3, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlq_r64_rm64, &i386_device::mmx_psrlq_r64_rm64, }, - { 0xD4, OP_2BYTE|OP_MMX, &i386_device::mmx_paddq_r64_rm64, &i386_device::mmx_paddq_r64_rm64, }, - { 0xD5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmullw_r64_rm64, &i386_device::mmx_pmullw_r64_rm64, }, - { 0xD7, OP_2BYTE|OP_SSE, &i386_device::sse_pmovmskb_r16_r64, &i386_device::sse_pmovmskb_r32_r64, }, - { 0xD8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusb_r64_rm64, &i386_device::mmx_psubusb_r64_rm64, }, - { 0xD9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusw_r64_rm64, &i386_device::mmx_psubusw_r64_rm64, }, - { 0xDA, OP_2BYTE|OP_SSE, &i386_device::sse_pminub_r64_rm64, &i386_device::sse_pminub_r64_rm64, }, - { 0xDB, OP_2BYTE|OP_MMX, &i386_device::mmx_pand_r64_rm64, &i386_device::mmx_pand_r64_rm64, }, - { 0xDC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusb_r64_rm64, &i386_device::mmx_paddusb_r64_rm64, }, - { 0xDD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusw_r64_rm64, &i386_device::mmx_paddusw_r64_rm64, }, - { 0xDE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxub_r64_rm64, &i386_device::sse_pmaxub_r64_rm64, }, - { 0xDF, OP_2BYTE|OP_MMX, &i386_device::mmx_pandn_r64_rm64, &i386_device::mmx_pandn_r64_rm64, }, - { 0xE0, OP_2BYTE|OP_SSE, &i386_device::sse_pavgb_r64_rm64, &i386_device::sse_pavgb_r64_rm64, }, - { 0xE1, OP_2BYTE|OP_MMX, &i386_device::mmx_psraw_r64_rm64, &i386_device::mmx_psraw_r64_rm64, }, - { 0xE2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrad_r64_rm64, &i386_device::mmx_psrad_r64_rm64, }, - { 0xE3, OP_2BYTE|OP_SSE, &i386_device::sse_pavgw_r64_rm64, &i386_device::sse_pavgw_r64_rm64, }, - { 0xE4, OP_2BYTE|OP_SSE, &i386_device::sse_pmulhuw_r64_rm64, &i386_device::sse_pmulhuw_r64_rm64, }, - { 0xE5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmulhw_r64_rm64, &i386_device::mmx_pmulhw_r64_rm64, }, - { 0xE7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movntq_m64_r64, &i386_device::pentium_movntq_m64_r64, }, - { 0xE8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsb_r64_rm64, &i386_device::mmx_psubsb_r64_rm64, }, - { 0xE9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsw_r64_rm64, &i386_device::mmx_psubsw_r64_rm64, }, - { 0xEA, OP_2BYTE|OP_SSE, &i386_device::sse_pminsw_r64_rm64, &i386_device::sse_pminsw_r64_rm64, }, - { 0xEB, OP_2BYTE|OP_MMX, &i386_device::mmx_por_r64_rm64, &i386_device::mmx_por_r64_rm64, }, - { 0xEC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsb_r64_rm64, &i386_device::mmx_paddsb_r64_rm64, }, - { 0xED, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsw_r64_rm64, &i386_device::mmx_paddsw_r64_rm64, }, - { 0xEE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxsw_r64_rm64, &i386_device::sse_pmaxsw_r64_rm64, }, - { 0xEF, OP_2BYTE|OP_MMX, &i386_device::mmx_pxor_r64_rm64, &i386_device::mmx_pxor_r64_rm64, }, - { 0xF1, OP_2BYTE|OP_MMX, &i386_device::mmx_psllw_r64_rm64, &i386_device::mmx_psllw_r64_rm64, }, - { 0xF2, OP_2BYTE|OP_MMX, &i386_device::mmx_pslld_r64_rm64, &i386_device::mmx_pslld_r64_rm64, }, - { 0xF3, OP_2BYTE|OP_MMX, &i386_device::mmx_psllq_r64_rm64, &i386_device::mmx_psllq_r64_rm64, }, - { 0xF4, OP_2BYTE|OP_SSE, &i386_device::sse_pmuludq_r64_rm64, &i386_device::sse_pmuludq_r64_rm64, }, - { 0xF5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmaddwd_r64_rm64, &i386_device::mmx_pmaddwd_r64_rm64, }, - { 0xF6, OP_2BYTE|OP_SSE, &i386_device::sse_psadbw_r64_rm64, &i386_device::sse_psadbw_r64_rm64, }, - { 0xf7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_maskmovq_r64_r64, &i386_device::pentium_maskmovq_r64_r64,}, - { 0xF8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubb_r64_rm64, &i386_device::mmx_psubb_r64_rm64, }, - { 0xF9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubw_r64_rm64, &i386_device::mmx_psubw_r64_rm64, }, - { 0xFA, OP_2BYTE|OP_MMX, &i386_device::mmx_psubd_r64_rm64, &i386_device::mmx_psubd_r64_rm64, }, - { 0xFB, OP_2BYTE|OP_SSE, &i386_device::sse_psubq_r64_rm64, &i386_device::sse_psubq_r64_rm64, }, - { 0xFC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddb_r64_rm64, &i386_device::mmx_paddb_r64_rm64, }, - { 0xFD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddw_r64_rm64, &i386_device::mmx_paddw_r64_rm64, }, - { 0xFE, OP_2BYTE|OP_MMX, &i386_device::mmx_paddd_r64_rm64, &i386_device::mmx_paddd_r64_rm64, }, + { 0x00, OP_2BYTE|OP_I386, &i386_device::i386_group0F00_16, &i386_device::i386_group0F00_32, false}, + { 0x01, OP_2BYTE|OP_I386, &i386_device::i386_group0F01_16, &i386_device::i386_group0F01_32, false}, + { 0x01, OP_2BYTE|OP_I486, &i386_device::i486_group0F01_16, &i386_device::i486_group0F01_32, false}, + { 0x02, OP_2BYTE|OP_I386, &i386_device::i386_lar_r16_rm16, &i386_device::i386_lar_r32_rm32, false}, + { 0x03, OP_2BYTE|OP_I386, &i386_device::i386_lsl_r16_rm16, &i386_device::i386_lsl_r32_rm32, false}, + { 0x06, OP_2BYTE|OP_I386, &i386_device::i386_clts, &i386_device::i386_clts, false}, + { 0x07, OP_2BYTE|OP_I386, &i386_device::i386_loadall, &i386_device::i386_loadall, false}, + { 0x08, OP_2BYTE|OP_I486, &i386_device::i486_invd, &i386_device::i486_invd, false}, + { 0x09, OP_2BYTE|OP_I486, &i386_device::i486_wbinvd, &i386_device::i486_wbinvd, false}, + { 0x0B, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_ud2, &i386_device::pentium_ud2, false}, + { 0x10, OP_2BYTE|OP_SSE, &i386_device::sse_movups_r128_rm128, &i386_device::sse_movups_r128_rm128, false}, + { 0x11, OP_2BYTE|OP_SSE, &i386_device::sse_movups_rm128_r128, &i386_device::sse_movups_rm128_r128, false}, + { 0x12, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_r128_m64, &i386_device::sse_movlps_r128_m64, false}, + { 0x13, OP_2BYTE|OP_SSE, &i386_device::sse_movlps_m64_r128, &i386_device::sse_movlps_m64_r128, false}, + { 0x14, OP_2BYTE|OP_SSE, &i386_device::sse_unpcklps_r128_rm128, &i386_device::sse_unpcklps_r128_rm128, false}, + { 0x15, OP_2BYTE|OP_SSE, &i386_device::sse_unpckhps_r128_rm128, &i386_device::sse_unpckhps_r128_rm128, false}, + { 0x16, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_r128_m64, &i386_device::sse_movhps_r128_m64, false}, + { 0x17, OP_2BYTE|OP_SSE, &i386_device::sse_movhps_m64_r128, &i386_device::sse_movhps_m64_r128, false}, + { 0x18, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_prefetch_m8, &i386_device::pentium_prefetch_m8, false}, + { 0x20, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_cr, &i386_device::i386_mov_r32_cr, false}, + { 0x21, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_dr, &i386_device::i386_mov_r32_dr, false}, + { 0x22, OP_2BYTE|OP_I386, &i386_device::i386_mov_cr_r32, &i386_device::i386_mov_cr_r32, false}, + { 0x22, OP_2BYTE|OP_I486, &i386_device::i486_mov_cr_r32, &i386_device::i486_mov_cr_r32, false}, + { 0x23, OP_2BYTE|OP_I386, &i386_device::i386_mov_dr_r32, &i386_device::i386_mov_dr_r32, false}, + { 0x24, OP_2BYTE|OP_I386, &i386_device::i386_mov_r32_tr, &i386_device::i386_mov_r32_tr, false}, + { 0x26, OP_2BYTE|OP_I386, &i386_device::i386_mov_tr_r32, &i386_device::i386_mov_tr_r32, false}, + { 0x28, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_r128_rm128, &i386_device::sse_movaps_r128_rm128, false}, + { 0x29, OP_2BYTE|OP_SSE, &i386_device::sse_movaps_rm128_r128, &i386_device::sse_movaps_rm128_r128, false}, + { 0x2a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtpi2ps_r128_rm64, &i386_device::sse_cvtpi2ps_r128_rm64, false}, + { 0x2b, OP_2BYTE|OP_SSE, &i386_device::sse_movntps_m128_r128, &i386_device::sse_movntps_m128_r128, false}, + { 0x2c, OP_2BYTE|OP_SSE, &i386_device::sse_cvttps2pi_r64_r128m64, &i386_device::sse_cvttps2pi_r64_r128m64,false}, + { 0x2d, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pi_r64_r128m64, &i386_device::sse_cvtps2pi_r64_r128m64,false}, + { 0x2e, OP_2BYTE|OP_SSE, &i386_device::sse_ucomiss_r128_r128m32, &i386_device::sse_ucomiss_r128_r128m32,false}, + { 0x2f, OP_2BYTE|OP_SSE, &i386_device::sse_comiss_r128_r128m32, &i386_device::sse_comiss_r128_r128m32, false}, + { 0x30, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_wrmsr, &i386_device::pentium_wrmsr, false}, + { 0x31, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdtsc, &i386_device::pentium_rdtsc, false}, + { 0x32, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rdmsr, &i386_device::pentium_rdmsr, false}, + { 0x40, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovo_r16_rm16, &i386_device::pentium_cmovo_r32_rm32, false}, + { 0x41, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovno_r16_rm16, &i386_device::pentium_cmovno_r32_rm32, false}, + { 0x42, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovb_r16_rm16, &i386_device::pentium_cmovb_r32_rm32, false}, + { 0x43, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovae_r16_rm16, &i386_device::pentium_cmovae_r32_rm32, false}, + { 0x44, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmove_r16_rm16, &i386_device::pentium_cmove_r32_rm32, false}, + { 0x45, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovne_r16_rm16, &i386_device::pentium_cmovne_r32_rm32, false}, + { 0x46, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovbe_r16_rm16, &i386_device::pentium_cmovbe_r32_rm32, false}, + { 0x47, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmova_r16_rm16, &i386_device::pentium_cmova_r32_rm32, false}, + { 0x48, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovs_r16_rm16, &i386_device::pentium_cmovs_r32_rm32, false}, + { 0x49, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovns_r16_rm16, &i386_device::pentium_cmovns_r32_rm32, false}, + { 0x4a, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovp_r16_rm16, &i386_device::pentium_cmovp_r32_rm32, false}, + { 0x4b, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovnp_r16_rm16, &i386_device::pentium_cmovnp_r32_rm32, false}, + { 0x4c, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovl_r16_rm16, &i386_device::pentium_cmovl_r32_rm32, false}, + { 0x4d, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovge_r16_rm16, &i386_device::pentium_cmovge_r32_rm32, false}, + { 0x4e, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovle_r16_rm16, &i386_device::pentium_cmovle_r32_rm32, false}, + { 0x4f, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmovg_r16_rm16, &i386_device::pentium_cmovg_r32_rm32, false}, + { 0x50, OP_2BYTE|OP_SSE, &i386_device::sse_movmskps_r16_r128, &i386_device::sse_movmskps_r32_r128, false}, + { 0x51, OP_2BYTE|OP_SSE, &i386_device::sse_sqrtps_r128_rm128, &i386_device::sse_sqrtps_r128_rm128, false}, + { 0x52, OP_2BYTE|OP_SSE, &i386_device::sse_rsqrtps_r128_rm128, &i386_device::sse_rsqrtps_r128_rm128, false}, + { 0x53, OP_2BYTE|OP_SSE, &i386_device::sse_rcpps_r128_rm128, &i386_device::sse_rcpps_r128_rm128, false}, + { 0x54, OP_2BYTE|OP_SSE, &i386_device::sse_andps_r128_rm128, &i386_device::sse_andps_r128_rm128, false}, + { 0x55, OP_2BYTE|OP_SSE, &i386_device::sse_andnps_r128_rm128, &i386_device::sse_andnps_r128_rm128, false}, + { 0x56, OP_2BYTE|OP_SSE, &i386_device::sse_orps_r128_rm128, &i386_device::sse_orps_r128_rm128, false}, + { 0x57, OP_2BYTE|OP_SSE, &i386_device::sse_xorps, &i386_device::sse_xorps, false}, + { 0x58, OP_2BYTE|OP_SSE, &i386_device::sse_addps, &i386_device::sse_addps, false}, + { 0x59, OP_2BYTE|OP_SSE, &i386_device::sse_mulps, &i386_device::sse_mulps, false}, + { 0x5a, OP_2BYTE|OP_SSE, &i386_device::sse_cvtps2pd_r128_r128m64, &i386_device::sse_cvtps2pd_r128_r128m64,false}, + { 0x5b, OP_2BYTE|OP_SSE, &i386_device::sse_cvtdq2ps_r128_rm128, &i386_device::sse_cvtdq2ps_r128_rm128, false}, + { 0x5c, OP_2BYTE|OP_SSE, &i386_device::sse_subps, &i386_device::sse_subps, false}, + { 0x5d, OP_2BYTE|OP_SSE, &i386_device::sse_minps, &i386_device::sse_minps, false}, + { 0x5e, OP_2BYTE|OP_SSE, &i386_device::sse_divps, &i386_device::sse_divps, false}, + { 0x5f, OP_2BYTE|OP_SSE, &i386_device::sse_maxps, &i386_device::sse_maxps, false}, + { 0x60, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklbw_r64_r64m32, &i386_device::mmx_punpcklbw_r64_r64m32,false}, + { 0x61, OP_2BYTE|OP_MMX, &i386_device::mmx_punpcklwd_r64_r64m32, &i386_device::mmx_punpcklwd_r64_r64m32,false}, + { 0x62, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckldq_r64_r64m32, &i386_device::mmx_punpckldq_r64_r64m32,false}, + { 0x63, OP_2BYTE|OP_MMX, &i386_device::mmx_packsswb_r64_rm64, &i386_device::mmx_packsswb_r64_rm64, false}, + { 0x64, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtb_r64_rm64, &i386_device::mmx_pcmpgtb_r64_rm64, false}, + { 0x65, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtw_r64_rm64, &i386_device::mmx_pcmpgtw_r64_rm64, false}, + { 0x66, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpgtd_r64_rm64, &i386_device::mmx_pcmpgtd_r64_rm64, false}, + { 0x67, OP_2BYTE|OP_MMX, &i386_device::mmx_packuswb_r64_rm64, &i386_device::mmx_packuswb_r64_rm64, false}, + { 0x68, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhbw_r64_rm64, &i386_device::mmx_punpckhbw_r64_rm64, false}, + { 0x69, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhwd_r64_rm64, &i386_device::mmx_punpckhwd_r64_rm64, false}, + { 0x6a, OP_2BYTE|OP_MMX, &i386_device::mmx_punpckhdq_r64_rm64, &i386_device::mmx_punpckhdq_r64_rm64, false}, + { 0x6b, OP_2BYTE|OP_MMX, &i386_device::mmx_packssdw_r64_rm64, &i386_device::mmx_packssdw_r64_rm64, false}, + { 0x6e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_r64_rm32, &i386_device::mmx_movd_r64_rm32, false}, + { 0x6f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_r64_rm64, &i386_device::mmx_movq_r64_rm64, false}, + { 0x70, OP_2BYTE|OP_MMX, &i386_device::mmx_pshufw_r64_rm64_i8, &i386_device::mmx_pshufw_r64_rm64_i8, false}, + { 0x71, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f71, &i386_device::mmx_group_0f71, false}, + { 0x72, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f72, &i386_device::mmx_group_0f72, false}, + { 0x73, OP_2BYTE|OP_MMX, &i386_device::mmx_group_0f73, &i386_device::mmx_group_0f73, false}, + { 0x74, OP_2BYTE|OP_CYRIX, &i386_device::i386_cyrix_unknown, &i386_device::i386_cyrix_unknown, false}, + { 0x74, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqb_r64_rm64, &i386_device::mmx_pcmpeqb_r64_rm64, false}, + { 0x75, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqw_r64_rm64, &i386_device::mmx_pcmpeqw_r64_rm64, false}, + { 0x76, OP_2BYTE|OP_MMX, &i386_device::mmx_pcmpeqd_r64_rm64, &i386_device::mmx_pcmpeqd_r64_rm64, false}, + { 0x77, OP_2BYTE|OP_MMX, &i386_device::mmx_emms, &i386_device::mmx_emms, false}, + { 0x7e, OP_2BYTE|OP_MMX, &i386_device::mmx_movd_rm32_r64, &i386_device::mmx_movd_rm32_r64, false}, + { 0x7f, OP_2BYTE|OP_MMX, &i386_device::mmx_movq_rm64_r64, &i386_device::mmx_movq_rm64_r64, false}, + { 0x80, OP_2BYTE|OP_I386, &i386_device::i386_jo_rel16, &i386_device::i386_jo_rel32, false}, + { 0x81, OP_2BYTE|OP_I386, &i386_device::i386_jno_rel16, &i386_device::i386_jno_rel32, false}, + { 0x82, OP_2BYTE|OP_I386, &i386_device::i386_jc_rel16, &i386_device::i386_jc_rel32, false}, + { 0x83, OP_2BYTE|OP_I386, &i386_device::i386_jnc_rel16, &i386_device::i386_jnc_rel32, false}, + { 0x84, OP_2BYTE|OP_I386, &i386_device::i386_jz_rel16, &i386_device::i386_jz_rel32, false}, + { 0x85, OP_2BYTE|OP_I386, &i386_device::i386_jnz_rel16, &i386_device::i386_jnz_rel32, false}, + { 0x86, OP_2BYTE|OP_I386, &i386_device::i386_jbe_rel16, &i386_device::i386_jbe_rel32, false}, + { 0x87, OP_2BYTE|OP_I386, &i386_device::i386_ja_rel16, &i386_device::i386_ja_rel32, false}, + { 0x88, OP_2BYTE|OP_I386, &i386_device::i386_js_rel16, &i386_device::i386_js_rel32, false}, + { 0x89, OP_2BYTE|OP_I386, &i386_device::i386_jns_rel16, &i386_device::i386_jns_rel32, false}, + { 0x8A, OP_2BYTE|OP_I386, &i386_device::i386_jp_rel16, &i386_device::i386_jp_rel32, false}, + { 0x8B, OP_2BYTE|OP_I386, &i386_device::i386_jnp_rel16, &i386_device::i386_jnp_rel32, false}, + { 0x8C, OP_2BYTE|OP_I386, &i386_device::i386_jl_rel16, &i386_device::i386_jl_rel32, false}, + { 0x8D, OP_2BYTE|OP_I386, &i386_device::i386_jge_rel16, &i386_device::i386_jge_rel32, false}, + { 0x8E, OP_2BYTE|OP_I386, &i386_device::i386_jle_rel16, &i386_device::i386_jle_rel32, false}, + { 0x8F, OP_2BYTE|OP_I386, &i386_device::i386_jg_rel16, &i386_device::i386_jg_rel32, false}, + { 0x90, OP_2BYTE|OP_I386, &i386_device::i386_seto_rm8, &i386_device::i386_seto_rm8, false}, + { 0x91, OP_2BYTE|OP_I386, &i386_device::i386_setno_rm8, &i386_device::i386_setno_rm8, false}, + { 0x92, OP_2BYTE|OP_I386, &i386_device::i386_setc_rm8, &i386_device::i386_setc_rm8, false}, + { 0x93, OP_2BYTE|OP_I386, &i386_device::i386_setnc_rm8, &i386_device::i386_setnc_rm8, false}, + { 0x94, OP_2BYTE|OP_I386, &i386_device::i386_setz_rm8, &i386_device::i386_setz_rm8, false}, + { 0x95, OP_2BYTE|OP_I386, &i386_device::i386_setnz_rm8, &i386_device::i386_setnz_rm8, false}, + { 0x96, OP_2BYTE|OP_I386, &i386_device::i386_setbe_rm8, &i386_device::i386_setbe_rm8, false}, + { 0x97, OP_2BYTE|OP_I386, &i386_device::i386_seta_rm8, &i386_device::i386_seta_rm8, false}, + { 0x98, OP_2BYTE|OP_I386, &i386_device::i386_sets_rm8, &i386_device::i386_sets_rm8, false}, + { 0x99, OP_2BYTE|OP_I386, &i386_device::i386_setns_rm8, &i386_device::i386_setns_rm8, false}, + { 0x9A, OP_2BYTE|OP_I386, &i386_device::i386_setp_rm8, &i386_device::i386_setp_rm8, false}, + { 0x9B, OP_2BYTE|OP_I386, &i386_device::i386_setnp_rm8, &i386_device::i386_setnp_rm8, false}, + { 0x9C, OP_2BYTE|OP_I386, &i386_device::i386_setl_rm8, &i386_device::i386_setl_rm8, false}, + { 0x9D, OP_2BYTE|OP_I386, &i386_device::i386_setge_rm8, &i386_device::i386_setge_rm8, false}, + { 0x9E, OP_2BYTE|OP_I386, &i386_device::i386_setle_rm8, &i386_device::i386_setle_rm8, false}, + { 0x9F, OP_2BYTE|OP_I386, &i386_device::i386_setg_rm8, &i386_device::i386_setg_rm8, false}, + { 0xA0, OP_2BYTE|OP_I386, &i386_device::i386_push_fs16, &i386_device::i386_push_fs32, false}, + { 0xA1, OP_2BYTE|OP_I386, &i386_device::i386_pop_fs16, &i386_device::i386_pop_fs32, false}, + { 0xA2, OP_2BYTE|OP_I486, &i386_device::i486_cpuid, &i386_device::i486_cpuid, false}, + { 0xA3, OP_2BYTE|OP_I386, &i386_device::i386_bt_rm16_r16, &i386_device::i386_bt_rm32_r32, false}, + { 0xA4, OP_2BYTE|OP_I386, &i386_device::i386_shld16_i8, &i386_device::i386_shld32_i8, false}, + { 0xA5, OP_2BYTE|OP_I386, &i386_device::i386_shld16_cl, &i386_device::i386_shld32_cl, false}, + { 0xA8, OP_2BYTE|OP_I386, &i386_device::i386_push_gs16, &i386_device::i386_push_gs32, false}, + { 0xA9, OP_2BYTE|OP_I386, &i386_device::i386_pop_gs16, &i386_device::i386_pop_gs32, false}, + { 0xAA, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_rsm, &i386_device::pentium_rsm, false}, + { 0xAB, OP_2BYTE|OP_I386, &i386_device::i386_bts_rm16_r16, &i386_device::i386_bts_rm32_r32, true }, + { 0xAC, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_i8, &i386_device::i386_shrd32_i8, false}, + { 0xAD, OP_2BYTE|OP_I386, &i386_device::i386_shrd16_cl, &i386_device::i386_shrd32_cl, false}, + { 0xAE, OP_2BYTE|OP_SSE, &i386_device::sse_sse_group0fae, &i386_device::sse_sse_group0fae, false}, + { 0xAF, OP_2BYTE|OP_I386, &i386_device::i386_imul_r16_rm16, &i386_device::i386_imul_r32_rm32, false}, + { 0xB0, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm8_r8, &i386_device::i486_cmpxchg_rm8_r8, true }, + { 0xB1, OP_2BYTE|OP_I486, &i386_device::i486_cmpxchg_rm16_r16, &i386_device::i486_cmpxchg_rm32_r32, true }, + { 0xB2, OP_2BYTE|OP_I386, &i386_device::i386_lss16, &i386_device::i386_lss32, false}, + { 0xB3, OP_2BYTE|OP_I386, &i386_device::i386_btr_rm16_r16, &i386_device::i386_btr_rm32_r32, true }, + { 0xB4, OP_2BYTE|OP_I386, &i386_device::i386_lfs16, &i386_device::i386_lfs32, false}, + { 0xB5, OP_2BYTE|OP_I386, &i386_device::i386_lgs16, &i386_device::i386_lgs32, false}, + { 0xB6, OP_2BYTE|OP_I386, &i386_device::i386_movzx_r16_rm8, &i386_device::i386_movzx_r32_rm8, false}, + { 0xB7, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movzx_r32_rm16, false}, + { 0xBA, OP_2BYTE|OP_I386, &i386_device::i386_group0FBA_16, &i386_device::i386_group0FBA_32, true }, + { 0xBB, OP_2BYTE|OP_I386, &i386_device::i386_btc_rm16_r16, &i386_device::i386_btc_rm32_r32, true }, + { 0xBC, OP_2BYTE|OP_I386, &i386_device::i386_bsf_r16_rm16, &i386_device::i386_bsf_r32_rm32, false}, + { 0xBD, OP_2BYTE|OP_I386, &i386_device::i386_bsr_r16_rm16, &i386_device::i386_bsr_r32_rm32, false}, + { 0xBE, OP_2BYTE|OP_I386, &i386_device::i386_movsx_r16_rm8, &i386_device::i386_movsx_r32_rm8, false}, + { 0xBF, OP_2BYTE|OP_I386, &i386_device::i386_invalid, &i386_device::i386_movsx_r32_rm16, false}, + { 0xC0, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm8_r8, &i386_device::i486_xadd_rm8_r8, true }, + { 0xC1, OP_2BYTE|OP_I486, &i386_device::i486_xadd_rm16_r16, &i386_device::i486_xadd_rm32_r32, true }, + { 0xC2, OP_2BYTE|OP_SSE, &i386_device::sse_cmpps_r128_rm128_i8, &i386_device::sse_cmpps_r128_rm128_i8, false}, + { 0xC3, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movnti_m16_r16, &i386_device::pentium_movnti_m32_r32, false}, + { 0xC4, OP_2BYTE|OP_SSE, &i386_device::sse_pinsrw_r64_r16m16_i8, &i386_device::sse_pinsrw_r64_r32m16_i8,false}, + { 0xC5, OP_2BYTE|OP_SSE, &i386_device::sse_pextrw_r16_r64_i8, &i386_device::sse_pextrw_r32_r64_i8, false}, + { 0xC6, OP_2BYTE|OP_SSE, &i386_device::sse_shufps, &i386_device::sse_shufps, false}, + { 0xC7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_cmpxchg8b_m64, &i386_device::pentium_cmpxchg8b_m64, true }, + { 0xC8, OP_2BYTE|OP_I486, &i386_device::i486_bswap_eax, &i386_device::i486_bswap_eax, false}, + { 0xC9, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ecx, &i386_device::i486_bswap_ecx, false}, + { 0xCA, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edx, &i386_device::i486_bswap_edx, false}, + { 0xCB, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebx, &i386_device::i486_bswap_ebx, false}, + { 0xCC, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esp, &i386_device::i486_bswap_esp, false}, + { 0xCD, OP_2BYTE|OP_I486, &i386_device::i486_bswap_ebp, &i386_device::i486_bswap_ebp, false}, + { 0xCE, OP_2BYTE|OP_I486, &i386_device::i486_bswap_esi, &i386_device::i486_bswap_esi, false}, + { 0xCF, OP_2BYTE|OP_I486, &i386_device::i486_bswap_edi, &i386_device::i486_bswap_edi, false}, + { 0xD1, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlw_r64_rm64, &i386_device::mmx_psrlw_r64_rm64, false}, + { 0xD2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrld_r64_rm64, &i386_device::mmx_psrld_r64_rm64, false}, + { 0xD3, OP_2BYTE|OP_MMX, &i386_device::mmx_psrlq_r64_rm64, &i386_device::mmx_psrlq_r64_rm64, false}, + { 0xD4, OP_2BYTE|OP_MMX, &i386_device::mmx_paddq_r64_rm64, &i386_device::mmx_paddq_r64_rm64, false}, + { 0xD5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmullw_r64_rm64, &i386_device::mmx_pmullw_r64_rm64, false}, + { 0xD7, OP_2BYTE|OP_SSE, &i386_device::sse_pmovmskb_r16_r64, &i386_device::sse_pmovmskb_r32_r64, false}, + { 0xD8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusb_r64_rm64, &i386_device::mmx_psubusb_r64_rm64, false}, + { 0xD9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubusw_r64_rm64, &i386_device::mmx_psubusw_r64_rm64, false}, + { 0xDA, OP_2BYTE|OP_SSE, &i386_device::sse_pminub_r64_rm64, &i386_device::sse_pminub_r64_rm64, false}, + { 0xDB, OP_2BYTE|OP_MMX, &i386_device::mmx_pand_r64_rm64, &i386_device::mmx_pand_r64_rm64, false}, + { 0xDC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusb_r64_rm64, &i386_device::mmx_paddusb_r64_rm64, false}, + { 0xDD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddusw_r64_rm64, &i386_device::mmx_paddusw_r64_rm64, false}, + { 0xDE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxub_r64_rm64, &i386_device::sse_pmaxub_r64_rm64, false}, + { 0xDF, OP_2BYTE|OP_MMX, &i386_device::mmx_pandn_r64_rm64, &i386_device::mmx_pandn_r64_rm64, false}, + { 0xE0, OP_2BYTE|OP_SSE, &i386_device::sse_pavgb_r64_rm64, &i386_device::sse_pavgb_r64_rm64, false}, + { 0xE1, OP_2BYTE|OP_MMX, &i386_device::mmx_psraw_r64_rm64, &i386_device::mmx_psraw_r64_rm64, false}, + { 0xE2, OP_2BYTE|OP_MMX, &i386_device::mmx_psrad_r64_rm64, &i386_device::mmx_psrad_r64_rm64, false}, + { 0xE3, OP_2BYTE|OP_SSE, &i386_device::sse_pavgw_r64_rm64, &i386_device::sse_pavgw_r64_rm64, false}, + { 0xE4, OP_2BYTE|OP_SSE, &i386_device::sse_pmulhuw_r64_rm64, &i386_device::sse_pmulhuw_r64_rm64, false}, + { 0xE5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmulhw_r64_rm64, &i386_device::mmx_pmulhw_r64_rm64, false}, + { 0xE7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_movntq_m64_r64, &i386_device::pentium_movntq_m64_r64, false}, + { 0xE8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsb_r64_rm64, &i386_device::mmx_psubsb_r64_rm64, false}, + { 0xE9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubsw_r64_rm64, &i386_device::mmx_psubsw_r64_rm64, false}, + { 0xEA, OP_2BYTE|OP_SSE, &i386_device::sse_pminsw_r64_rm64, &i386_device::sse_pminsw_r64_rm64, false}, + { 0xEB, OP_2BYTE|OP_MMX, &i386_device::mmx_por_r64_rm64, &i386_device::mmx_por_r64_rm64, false}, + { 0xEC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsb_r64_rm64, &i386_device::mmx_paddsb_r64_rm64, false}, + { 0xED, OP_2BYTE|OP_MMX, &i386_device::mmx_paddsw_r64_rm64, &i386_device::mmx_paddsw_r64_rm64, false}, + { 0xEE, OP_2BYTE|OP_SSE, &i386_device::sse_pmaxsw_r64_rm64, &i386_device::sse_pmaxsw_r64_rm64, false}, + { 0xEF, OP_2BYTE|OP_MMX, &i386_device::mmx_pxor_r64_rm64, &i386_device::mmx_pxor_r64_rm64, false}, + { 0xF1, OP_2BYTE|OP_MMX, &i386_device::mmx_psllw_r64_rm64, &i386_device::mmx_psllw_r64_rm64, false}, + { 0xF2, OP_2BYTE|OP_MMX, &i386_device::mmx_pslld_r64_rm64, &i386_device::mmx_pslld_r64_rm64, false}, + { 0xF3, OP_2BYTE|OP_MMX, &i386_device::mmx_psllq_r64_rm64, &i386_device::mmx_psllq_r64_rm64, false}, + { 0xF4, OP_2BYTE|OP_SSE, &i386_device::sse_pmuludq_r64_rm64, &i386_device::sse_pmuludq_r64_rm64, false}, + { 0xF5, OP_2BYTE|OP_MMX, &i386_device::mmx_pmaddwd_r64_rm64, &i386_device::mmx_pmaddwd_r64_rm64, false}, + { 0xF6, OP_2BYTE|OP_SSE, &i386_device::sse_psadbw_r64_rm64, &i386_device::sse_psadbw_r64_rm64, false}, + { 0xf7, OP_2BYTE|OP_PENTIUM, &i386_device::pentium_maskmovq_r64_r64, &i386_device::pentium_maskmovq_r64_r64,false}, + { 0xF8, OP_2BYTE|OP_MMX, &i386_device::mmx_psubb_r64_rm64, &i386_device::mmx_psubb_r64_rm64, false}, + { 0xF9, OP_2BYTE|OP_MMX, &i386_device::mmx_psubw_r64_rm64, &i386_device::mmx_psubw_r64_rm64, false}, + { 0xFA, OP_2BYTE|OP_MMX, &i386_device::mmx_psubd_r64_rm64, &i386_device::mmx_psubd_r64_rm64, false}, + { 0xFB, OP_2BYTE|OP_SSE, &i386_device::sse_psubq_r64_rm64, &i386_device::sse_psubq_r64_rm64, false}, + { 0xFC, OP_2BYTE|OP_MMX, &i386_device::mmx_paddb_r64_rm64, &i386_device::mmx_paddb_r64_rm64, false}, + { 0xFD, OP_2BYTE|OP_MMX, &i386_device::mmx_paddw_r64_rm64, &i386_device::mmx_paddw_r64_rm64, false}, + { 0xFE, OP_2BYTE|OP_MMX, &i386_device::mmx_paddd_r64_rm64, &i386_device::mmx_paddd_r64_rm64, false}, /* F3 0F ?? */ - { 0x10, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_r128_rm128, &i386_device::sse_movss_r128_rm128, }, - { 0x11, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_rm128_r128, &i386_device::sse_movss_rm128_r128, }, - { 0x12, OP_3BYTEF3|OP_SSE, &i386_device::sse_movsldup_r128_rm128, &i386_device::sse_movsldup_r128_rm128, }, - { 0x16, OP_3BYTEF3|OP_SSE, &i386_device::sse_movshdup_r128_rm128, &i386_device::sse_movshdup_r128_rm128, }, - { 0x2A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtsi2ss_r128_rm32, &i386_device::sse_cvtsi2ss_r128_rm32, }, - { 0x2C, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttss2si_r32_r128m32, &i386_device::sse_cvttss2si_r32_r128m32,}, - { 0x2D, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2si_r32_r128m32, &i386_device::sse_cvtss2si_r32_r128m32,}, - { 0x51, OP_3BYTEF3|OP_SSE, &i386_device::sse_sqrtss_r128_r128m32, &i386_device::sse_sqrtss_r128_r128m32, }, - { 0x52, OP_3BYTEF3|OP_SSE, &i386_device::sse_rsqrtss_r128_r128m32, &i386_device::sse_rsqrtss_r128_r128m32,}, - { 0x53, OP_3BYTEF3|OP_SSE, &i386_device::sse_rcpss_r128_r128m32, &i386_device::sse_rcpss_r128_r128m32, }, - { 0x58, OP_3BYTEF3|OP_SSE, &i386_device::sse_addss, &i386_device::sse_addss, }, - { 0x59, OP_3BYTEF3|OP_SSE, &i386_device::sse_mulss, &i386_device::sse_mulss, }, - { 0x5A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2sd_r128_r128m32, &i386_device::sse_cvtss2sd_r128_r128m32,}, - { 0x5B, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttps2dq_r128_rm128, &i386_device::sse_cvttps2dq_r128_rm128,}, - { 0x5C, OP_3BYTEF3|OP_SSE, &i386_device::sse_subss, &i386_device::sse_subss, }, - { 0x5D, OP_3BYTEF3|OP_SSE, &i386_device::sse_minss_r128_r128m32, &i386_device::sse_minss_r128_r128m32, }, - { 0x5E, OP_3BYTEF3|OP_SSE, &i386_device::sse_divss, &i386_device::sse_divss, }, - { 0x5F, OP_3BYTEF3|OP_SSE, &i386_device::sse_maxss_r128_r128m32, &i386_device::sse_maxss_r128_r128m32, }, - { 0x6F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_r128_rm128, &i386_device::sse_movdqu_r128_rm128, }, - { 0x70, OP_3BYTEF3|OP_SSE, &i386_device::sse_pshufhw_r128_rm128_i8, &i386_device::sse_pshufhw_r128_rm128_i8,}, - { 0x7E, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq_r128_r128m64, &i386_device::sse_movq_r128_r128m64, }, - { 0x7F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_rm128_r128, &i386_device::sse_movdqu_rm128_r128, }, - { 0xB8, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_popcnt_r16_rm16, &i386_device::pentium_popcnt_r32_rm32, }, - { 0xBC, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_tzcnt_r16_rm16, &i386_device::pentium_tzcnt_r32_rm32, }, - { 0xC2, OP_3BYTEF3|OP_SSE, &i386_device::sse_cmpss_r128_r128m32_i8, &i386_device::sse_cmpss_r128_r128m32_i8,}, - { 0xD6, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq2dq_r128_r64, &i386_device::sse_movq2dq_r128_r64, }, - { 0xE6, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtdq2pd_r128_r128m64, &i386_device::sse_cvtdq2pd_r128_r128m64} + { 0x10, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_r128_rm128, &i386_device::sse_movss_r128_rm128, false}, + { 0x11, OP_3BYTEF3|OP_SSE, &i386_device::sse_movss_rm128_r128, &i386_device::sse_movss_rm128_r128, false}, + { 0x12, OP_3BYTEF3|OP_SSE, &i386_device::sse_movsldup_r128_rm128, &i386_device::sse_movsldup_r128_rm128, false}, + { 0x16, OP_3BYTEF3|OP_SSE, &i386_device::sse_movshdup_r128_rm128, &i386_device::sse_movshdup_r128_rm128, false}, + { 0x2A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtsi2ss_r128_rm32, &i386_device::sse_cvtsi2ss_r128_rm32, false}, + { 0x2C, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttss2si_r32_r128m32, &i386_device::sse_cvttss2si_r32_r128m32,false}, + { 0x2D, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2si_r32_r128m32, &i386_device::sse_cvtss2si_r32_r128m32,false}, + { 0x51, OP_3BYTEF3|OP_SSE, &i386_device::sse_sqrtss_r128_r128m32, &i386_device::sse_sqrtss_r128_r128m32, false}, + { 0x52, OP_3BYTEF3|OP_SSE, &i386_device::sse_rsqrtss_r128_r128m32, &i386_device::sse_rsqrtss_r128_r128m32,false}, + { 0x53, OP_3BYTEF3|OP_SSE, &i386_device::sse_rcpss_r128_r128m32, &i386_device::sse_rcpss_r128_r128m32, false}, + { 0x58, OP_3BYTEF3|OP_SSE, &i386_device::sse_addss, &i386_device::sse_addss, false}, + { 0x59, OP_3BYTEF3|OP_SSE, &i386_device::sse_mulss, &i386_device::sse_mulss, false}, + { 0x5A, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtss2sd_r128_r128m32, &i386_device::sse_cvtss2sd_r128_r128m32,false}, + { 0x5B, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvttps2dq_r128_rm128, &i386_device::sse_cvttps2dq_r128_rm128,false}, + { 0x5C, OP_3BYTEF3|OP_SSE, &i386_device::sse_subss, &i386_device::sse_subss, false}, + { 0x5D, OP_3BYTEF3|OP_SSE, &i386_device::sse_minss_r128_r128m32, &i386_device::sse_minss_r128_r128m32, false}, + { 0x5E, OP_3BYTEF3|OP_SSE, &i386_device::sse_divss, &i386_device::sse_divss, false}, + { 0x5F, OP_3BYTEF3|OP_SSE, &i386_device::sse_maxss_r128_r128m32, &i386_device::sse_maxss_r128_r128m32, false}, + { 0x6F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_r128_rm128, &i386_device::sse_movdqu_r128_rm128, false}, + { 0x70, OP_3BYTEF3|OP_SSE, &i386_device::sse_pshufhw_r128_rm128_i8, &i386_device::sse_pshufhw_r128_rm128_i8,false}, + { 0x7E, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq_r128_r128m64, &i386_device::sse_movq_r128_r128m64, false}, + { 0x7F, OP_3BYTEF3|OP_SSE, &i386_device::sse_movdqu_rm128_r128, &i386_device::sse_movdqu_rm128_r128, false}, + { 0xB8, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_popcnt_r16_rm16, &i386_device::pentium_popcnt_r32_rm32, false}, + { 0xBC, OP_3BYTEF3|OP_PENTIUM, &i386_device::pentium_tzcnt_r16_rm16, &i386_device::pentium_tzcnt_r32_rm32, false}, + { 0xC2, OP_3BYTEF3|OP_SSE, &i386_device::sse_cmpss_r128_r128m32_i8, &i386_device::sse_cmpss_r128_r128m32_i8,false}, + { 0xD6, OP_3BYTEF3|OP_SSE, &i386_device::sse_movq2dq_r128_r64, &i386_device::sse_movq2dq_r128_r64, false}, + { 0xE6, OP_3BYTEF3|OP_SSE, &i386_device::sse_cvtdq2pd_r128_r128m64, &i386_device::sse_cvtdq2pd_r128_r128m64,false} }; diff --git a/src/emu/cpu/i386/i386ops.inc b/src/emu/cpu/i386/i386ops.inc index fa267b0c80a..8d4cc59b5b5 100644 --- a/src/emu/cpu/i386/i386ops.inc +++ b/src/emu/cpu/i386/i386ops.inc @@ -2483,7 +2483,7 @@ void i386_device::i386_wait() // Opcode 0x9B void i386_device::i386_lock() // Opcode 0xf0 { // lock doesn't depend on iopl on 386 - // TODO: lock causes UD on unlockable opcodes + m_lock = true; CYCLES(CYCLES_LOCK); // TODO: Determine correct cycle count i386_decode_opcode(); } -- cgit v1.2.3 From d0b189505fbea8c39909f258f62885961ba99c4e Mon Sep 17 00:00:00 2001 From: Osso Date: Mon, 27 Oct 2014 19:24:59 +0100 Subject: konamigx: Moved global variables into driver state (nw) Let's see if I break line endings again. --- src/mame/drivers/konamigx.c | 215 ++++++++++----------- src/mame/drivers/mystwarr.c | 14 +- src/mame/includes/konamigx.h | 118 +++++++++--- src/mame/machine/konamigx.c | 84 ++++----- src/mame/video/konamigx.c | 437 ++++++++++++++++++------------------------- 5 files changed, 421 insertions(+), 447 deletions(-) diff --git a/src/mame/drivers/konamigx.c b/src/mame/drivers/konamigx.c index 3d443af61d5..01903dae7eb 100644 --- a/src/mame/drivers/konamigx.c +++ b/src/mame/drivers/konamigx.c @@ -106,14 +106,6 @@ - -static int konamigx_cfgport; - -static int gx_rdport1_3, gx_syncen; - -static emu_timer *dmadelay_timer; -static emu_timer *boothack_timer; - /**********************************************************************************/ /* Konami ESC (E Security Chip) protection chip found on: @@ -179,13 +171,10 @@ static struct sprite_entry { static void generate_sprites(address_space &space, UINT32 src, UINT32 spr, int count) { - int i; - int scount; - int ecount; - scount = 0; - ecount = 0; + int scount = 0; + int ecount = 0; - for(i=0; i(); - state->konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x0142, 0x100, 0); + konamigx_esc_alert(m_workram, 0x0142, 0x100, 0); } -static void dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { - konamigx_state* state = space.machine().driver_data(); - state->konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x5c00, 0x100, 0); + konamigx_esc_alert(m_workram, 0x5c00, 0x100, 0); } -static void sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { - konamigx_state* state = space.machine().driver_data(); - state->konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x1c8c, 0x172, 1); + konamigx_esc_alert(m_workram, 0x1c8c, 0x172, 1); } -static void sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { // The d20000 should probably be p3 generate_sprites(space, 0xc00604, 0xd20000, 0xfc); } -static void tbyahhoo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::tbyahhoo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { generate_sprites(space, 0xc00000, 0xd20000, 0x100); } -static void daiskiss_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) +void konamigx_state::daiskiss_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { generate_sprites(space, 0xc00000, 0xd20000, 0x100); } -static UINT8 esc_program[4096]; -static void (*esc_cb)(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); - WRITE32_MEMBER(konamigx_state::esc_w) { UINT32 opcode; @@ -386,7 +369,7 @@ WRITE32_MEMBER(konamigx_state::esc_w) break; case 2: // Load program for(i=0; i<4096; i++) - esc_program[i] = space.read_byte(params+i); + m_esc_program[i] = space.read_byte(params+i); /* { FILE *f; @@ -400,12 +383,12 @@ WRITE32_MEMBER(konamigx_state::esc_w) */ break; case 1: // Run program - if(esc_cb) { + if(m_esc_cb) { UINT32 p1 = (space.read_word(params+0)<<16) | space.read_word(params+2); UINT32 p2 = (space.read_word(params+4)<<16) | space.read_word(params+6); UINT32 p3 = (space.read_word(params+8)<<16) | space.read_word(params+10); UINT32 p4 = (space.read_word(params+12)<<16) | space.read_word(params+14); - esc_cb(space, p1, p2, p3, p4); + (this->*m_esc_cb)(space, p1, p2, p3, p4); } break; default: @@ -414,9 +397,9 @@ WRITE32_MEMBER(konamigx_state::esc_w) } space.write_byte(data+9, ESTATE_END); - if (konamigx_wrport1_1 & 0x10) + if (m_gx_wrport1_1 & 0x10) { - gx_rdport1_3 &= ~8; + m_gx_rdport1_3 &= ~8; m_maincpu->set_input_line(4, HOLD_LINE); } } @@ -439,7 +422,7 @@ WRITE32_MEMBER(konamigx_state::esc_w) CUSTOM_INPUT_MEMBER(konamigx_state::gx_rdport1_3_r) { - return (gx_rdport1_3 >> 1); + return (m_gx_rdport1_3 >> 1); } WRITE32_MEMBER(konamigx_state::eeprom_w) @@ -462,7 +445,7 @@ WRITE32_MEMBER(konamigx_state::eeprom_w) m_eepromout->write(odata, 0xff); - konamigx_wrport1_0 = odata; + m_gx_wrport1_0 = odata; } if (ACCESSING_BITS_16_23) @@ -478,12 +461,12 @@ WRITE32_MEMBER(konamigx_state::eeprom_w) bit 0 = CCU1-INT1 enable */ - konamigx_wrport1_1 = (data>>16)&0xff; -// logerror("write %x to IRQ register (PC=%x)\n", konamigx_wrport1_1, space.device().safe_pc()); + m_gx_wrport1_1 = (data>>16)&0xff; +// logerror("write %x to IRQ register (PC=%x)\n", m_gx_wrport1_1, space.device().safe_pc()); - // gx_syncen is to ensure each IRQ is trigger at least once after being enabled - if (konamigx_wrport1_1 & 0x80) - gx_syncen |= konamigx_wrport1_1 & 0x1f; + // m_gx_syncen is to ensure each IRQ is triggered at least once after being enabled + if (m_gx_wrport1_1 & 0x80) + m_gx_syncen |= m_gx_wrport1_1 & 0x1f; } } @@ -526,7 +509,7 @@ WRITE32_MEMBER(konamigx_state::control_w) m_k055673->k053246_set_objcha_line((data&0x100000) ? ASSERT_LINE : CLEAR_LINE); - konamigx_wrport2 = (data>>16)&0xff; + m_gx_wrport2 = (data>>16)&0xff; } } @@ -534,8 +517,6 @@ WRITE32_MEMBER(konamigx_state::control_w) /**********************************************************************************/ /* IRQ controllers */ -static int suspension_active, resume_trigger; - READ32_MEMBER(konamigx_state::ccu_r) { // the routine at 204abe in opengolf polls to see if we're in vblank (it wants values between 0x111 and 0x1df) @@ -559,14 +540,14 @@ WRITE32_MEMBER(konamigx_state::ccu_w) if (ACCESSING_BITS_24_31) { m_maincpu->set_input_line(1, CLEAR_LINE); - gx_syncen |= 0x20; + m_gx_syncen |= 0x20; } // hblank interrupt ACK if (ACCESSING_BITS_8_15) { m_maincpu->set_input_line(2, CLEAR_LINE); - gx_syncen |= 0x40; + m_gx_syncen |= 0x40; } } } @@ -588,22 +569,22 @@ TIMER_CALLBACK_MEMBER(konamigx_state::boothack_callback) TIMER_CALLBACK_MEMBER(konamigx_state::dmaend_callback) { // foul-proof (CPU0 could be deactivated while we wait) - if (resume_trigger && suspension_active) + if (m_resume_trigger && m_suspension_active) { - suspension_active = 0; - machine().scheduler().trigger(resume_trigger); + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); } // DMA busy flag must be cleared before triggering IRQ 3 - gx_rdport1_3 &= ~2; + m_gx_rdport1_3 &= ~2; // IRQ 3 is the "object DMA end" IRQ also happens during vblank - if ((konamigx_wrport1_1 & 0x84) == 0x84 || (gx_syncen & 4)) + if ((m_gx_wrport1_1 & 0x84) == 0x84 || (m_gx_syncen & 4)) { - gx_syncen &= ~4; + m_gx_syncen &= ~4; // lower OBJINT-REQ flag and trigger interrupt - gx_rdport1_3 &= ~0x80; + m_gx_rdport1_3 &= ~0x80; m_maincpu->set_input_line(3, HOLD_LINE); } } @@ -611,7 +592,7 @@ TIMER_CALLBACK_MEMBER(konamigx_state::dmaend_callback) void konamigx_state::dmastart_callback(int data) { // raise the DMA busy flag - gx_rdport1_3 |= 2; + m_gx_rdport1_3 |= 2; // begin transfer if DMAEN(bit4 of OBJSET1) is set (see p.48) if (m_k055673->k053246_read_register(5) & 0x10) @@ -621,27 +602,27 @@ void konamigx_state::dmastart_callback(int data) } // simulate DMA delay - dmadelay_timer->adjust(attotime::from_usec(120)); + m_dmadelay_timer->adjust(attotime::from_usec(120)); } INTERRUPT_GEN_MEMBER(konamigx_state::konamigx_vbinterrupt) { // lift idle suspension - if (resume_trigger && suspension_active) + if (m_resume_trigger && m_suspension_active) { - suspension_active = 0; - machine().scheduler().trigger(resume_trigger); + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); } // IRQ 1 is the main 60hz vblank interrupt - if (gx_syncen & 0x20) + if (m_gx_syncen & 0x20) { - gx_syncen &= ~0x20; + m_gx_syncen &= ~0x20; - if ((konamigx_wrport1_1 & 0x81) == 0x81 || (gx_syncen & 1)) + if ((m_gx_wrport1_1 & 0x81) == 0x81 || (m_gx_syncen & 1)) { - gx_syncen &= ~1; + m_gx_syncen &= ~1; device.execute().set_input_line(1, HOLD_LINE); } } @@ -656,26 +637,26 @@ TIMER_DEVICE_CALLBACK_MEMBER(konamigx_state::konamigx_hbinterrupt) if (scanline == 240) { // lift idle suspension - if (resume_trigger && suspension_active) + if (m_resume_trigger && m_suspension_active) { - suspension_active = 0; - machine().scheduler().trigger(resume_trigger); + m_suspension_active = 0; + machine().scheduler().trigger(m_resume_trigger); } // IRQ 1 is the main 60hz vblank interrupt - // the gx_syncen & 0x20 test doesn't work on type 3 or 4 ROM boards, likely because the ROM board + // the m_gx_syncen & 0x20 test doesn't work on type 3 or 4 ROM boards, likely because the ROM board // generates the timing in those cases. With this change, rushing heroes and rng2 boot :) // maybe this interrupt should only be every 30fps, or maybe there are flags to prevent the game running too fast // the real hardware should output the display for each screen on alternate frames // if(device->m_screen->frame_number() & 1) - if (1) // gx_syncen & 0x20) + if (1) // m_gx_syncen & 0x20) { - gx_syncen &= ~0x20; + m_gx_syncen &= ~0x20; - if ((konamigx_wrport1_1 & 0x81) == 0x81 || (gx_syncen & 1)) + if ((m_gx_wrport1_1 & 0x81) == 0x81 || (m_gx_syncen & 1)) { - gx_syncen &= ~1; + m_gx_syncen &= ~1; m_maincpu->set_input_line(1, HOLD_LINE); } @@ -686,13 +667,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(konamigx_state::konamigx_hbinterrupt) else if(scanline < 240) // hblank { // IRQ 2 is a programmable interrupt with scanline resolution - if (gx_syncen & 0x40) + if (m_gx_syncen & 0x40) { - gx_syncen &= ~0x40; + m_gx_syncen &= ~0x40; - if ((konamigx_wrport1_1 & 0x82) == 0x82 || (gx_syncen & 2)) + if ((m_gx_wrport1_1 & 0x82) == 0x82 || (m_gx_syncen & 2)) { - gx_syncen &= ~2; + m_gx_syncen &= ~2; m_maincpu->set_input_line(2, HOLD_LINE); } } @@ -759,8 +740,6 @@ READ32_MEMBER(konamigx_state::type1_roz_r2) return ROM[offset]; } -//static int sync_frame = 0; - READ32_MEMBER(konamigx_state::type3_sync_r) { if(m_konamigx_current_frame==0) @@ -768,7 +747,7 @@ READ32_MEMBER(konamigx_state::type3_sync_r) else return 0;// return 0xfffffffe | 0; } -static int last_prot_op, last_prot_clk; + /* Run and Gun 2, Rushing Heroes, Winning Spike, and Vs. Net Soccer contain a XILINX FPGA that serves as security. @@ -844,8 +823,6 @@ static int last_prot_op, last_prot_clk; move.l #$C10400,($C102EC).l move.l #$C10400,($C102EC).l */ -//static int cc=0; - WRITE32_MEMBER(konamigx_state::type4_prot_w) { int clk; @@ -853,18 +830,18 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) if (offset == 1) { - last_prot_op = data>>16; + m_last_prot_op = data>>16; } else { data >>= 16; clk = data & 0x200; - if ((clk == 0) && (last_prot_clk != 0)) + if ((clk == 0) && (m_last_prot_clk != 0)) { - if (last_prot_op != -1) + if (m_last_prot_op != -1) { -// osd_printf_debug("type 4 prot command: %x\n", last_prot_op); +// osd_printf_debug("type 4 prot command: %x\n", m_last_prot_op); /* known commands: rng2 rushhero vsnet winspike what @@ -874,7 +851,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) 0d97 0515 parse big DMA list at c10200 57a copy 4 bytes from c00f10 to c10f00 and 4 bytes from c00f30 to c0fe00 */ - if ((last_prot_op == 0xa56) || (last_prot_op == 0xd96) || (last_prot_op == 0xd14) || (last_prot_op == 0xd1c)) + if ((m_last_prot_op == 0xa56) || (m_last_prot_op == 0xd96) || (m_last_prot_op == 0xd14) || (m_last_prot_op == 0xd1c)) { // memcpy from c01000 to c01400 for 0x400 bytes (startup check for type 4 games) for (i = 0; i < 0x400; i += 2) @@ -882,7 +859,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) space.write_word(0xc01400+i, space.read_word(0xc01000+i)); } } - else if(last_prot_op == 0x57a) // winspike + else if(m_last_prot_op == 0x57a) // winspike { /* player 1 input buffer protection */ space.write_dword(0xc10f00, space.read_dword(0xc00f10)); @@ -894,7 +871,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) space.write_dword(0xc0fe00, space.read_dword(0xc00f30)); space.write_dword(0xc0fe04, space.read_dword(0xc00f34)); } - else if(last_prot_op == 0xd97) // rushhero + else if(m_last_prot_op == 0xd97) // rushhero { int src = 0xc09ff0; int dst = 0xd20000; @@ -917,7 +894,7 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) space.write_byte(0xc01cc4, ~space.read_byte(0xc00547)); space.write_byte(0xc01cc5, ~space.read_byte(0xc00567)); } - else if(last_prot_op == 0xb16) // slamdnk2 + else if(m_last_prot_op == 0xb16) // slamdnk2 { int src = 0xc01000; int dst = 0xd20000; @@ -932,36 +909,36 @@ WRITE32_MEMBER(konamigx_state::type4_prot_w) //maybe here there's a [$d8001f] <- 0x31 write too? } - else if(last_prot_op == 0x515) // vsnetscr screen 1 + else if(m_last_prot_op == 0x515) // vsnetscr screen 1 { int adr; - //printf("GXT4: command %x %d (PC=%x)\n", last_prot_op, cc++, space.device().safe_pc()); + //printf("GXT4: command %x %d (PC=%x)\n", m_last_prot_op, cc++, space.device().safe_pc()); for (adr = 0; adr < 0x400; adr += 2) space.write_word(0xc01c00+adr, space.read_word(0xc01800+adr)); } - else if(last_prot_op == 0x115d) // vsnetscr screen 2 + else if(m_last_prot_op == 0x115d) // vsnetscr screen 2 { int adr; - //printf("GXT4: command %x %d (PC=%x)\n", last_prot_op, cc++, space.device().safe_pc()); + //printf("GXT4: command %x %d (PC=%x)\n", m_last_prot_op, cc++, space.device().safe_pc()); for (adr = 0; adr < 0x400; adr += 2) space.write_word(0xc18c00+adr, space.read_word(0xc18800+adr)); } else { - printf("GXT4: unknown protection command %x (PC=%x)\n", last_prot_op, space.device().safe_pc()); + printf("GXT4: unknown protection command %x (PC=%x)\n", m_last_prot_op, space.device().safe_pc()); } - if (konamigx_wrport1_1 & 0x10) + if (m_gx_wrport1_1 & 0x10) { - gx_rdport1_3 &= ~8; + m_gx_rdport1_3 &= ~8; m_maincpu->set_input_line(4, HOLD_LINE); } // don't accidentally do a phony command - last_prot_op = -1; + m_last_prot_op = -1; } } - last_prot_clk = clk; + m_last_prot_clk = clk; } } @@ -1180,7 +1157,7 @@ static INPUT_PORTS_START( common ) // note: racin' force expects bit 1 of the eeprom port to toggle PORT_BIT( 0x00000001, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - PORT_BIT( 0x000000fe, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, konamigx_state,gx_rdport1_3_r, NULL) + PORT_BIT( 0x000000fe, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, konamigx_state, gx_rdport1_3_r, NULL) PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -3578,22 +3555,22 @@ ROM_END MACHINE_START_MEMBER(konamigx_state,konamigx) { - save_item(NAME(konamigx_wrport1_1)); + save_item(NAME(m_gx_wrport1_1)); } MACHINE_RESET_MEMBER(konamigx_state,konamigx) { - konamigx_wrport1_0 = konamigx_wrport1_1 = 0; - konamigx_wrport2 = 0; + m_gx_wrport1_0 = m_gx_wrport1_1 = 0; + m_gx_wrport2 = 0; /* bit0 : EEPROM data(don't care) bit1 : DMA busy (cleared) bit2-7: IRQ ready (all set) */ - gx_rdport1_3 = 0xfc; - gx_syncen = 0; - suspension_active = 0; + m_gx_rdport1_3 = 0xfc; + m_gx_syncen = 0; + m_suspension_active = 0; // Hold sound CPUs in reset m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); @@ -3633,7 +3610,7 @@ MACHINE_RESET_MEMBER(konamigx_state,konamigx) // To hack around this, we underclock the 68020 for 10 seconds during POST m_maincpu->set_clock_scale(0.66f); - boothack_timer->adjust(attotime::from_seconds(10)); + m_boothack_timer->adjust(attotime::from_seconds(10)); } if (!strcmp(setname, "le2") || @@ -3708,15 +3685,15 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) int i, match; int readback = 0; - konamigx_cfgport = -1; - last_prot_op = -1; - last_prot_clk = 0; + m_gx_cfgport = -1; + m_last_prot_op = -1; + m_last_prot_clk = 0; - esc_cb = 0; - resume_trigger = 0; + m_esc_cb = NULL; + m_resume_trigger = 0; - dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::dmaend_callback),this)); - boothack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::boothack_callback),this)); + m_dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::dmaend_callback),this)); + m_boothack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::boothack_callback),this)); i = match = 0; while ((gameDefs[i].cfgport != -1) && (!match)) @@ -3724,7 +3701,7 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) if (!strcmp(machine().system().name, gameDefs[i].romname)) { match = 1; - konamigx_cfgport = gameDefs[i].cfgport; + m_gx_cfgport = gameDefs[i].cfgport; readback = gameDefs[i].readback; switch (gameDefs[i].special) @@ -3745,24 +3722,24 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) rom[0x810f1] &= ~1; // fix checksum rom[0x872ea] |= 0xe0000; // enable plane B,C,D - esc_cb = tkmmpzdm_esc; + m_esc_cb = &konamigx_state::tkmmpzdm_esc; break; } case 3: // dragoon might - esc_cb = dragoonj_esc; + m_esc_cb = &konamigx_state::dragoonj_esc; break; case 4: // sexyparo - esc_cb = sexyparo_esc; + m_esc_cb = &konamigx_state::sexyparo_esc; break; case 5: // daiskiss - esc_cb = daiskiss_esc; + m_esc_cb = &konamigx_state::daiskiss_esc; break; case 6: // salamander 2 - esc_cb = sal2_esc; + m_esc_cb = &konamigx_state::sal2_esc; break; case 7: // install type 4 Xilinx protection for non-type 3/4 games @@ -3770,7 +3747,7 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx) break; case 8: // tbyahhoo - esc_cb = tbyahhoo_esc; + m_esc_cb = &konamigx_state::tbyahhoo_esc; break; case 9: // fantjour diff --git a/src/mame/drivers/mystwarr.c b/src/mame/drivers/mystwarr.c index 76502908844..31c3f6eb12d 100644 --- a/src/mame/drivers/mystwarr.c +++ b/src/mame/drivers/mystwarr.c @@ -847,13 +847,13 @@ MACHINE_START_MEMBER(mystwarr_state,mystwarr) m_sound_ctrl = 2; reset_sound_region(); - m_mw_irq_control = 0; - - /* konamigx_mixer uses this, so better initialize it */ - konamigx_wrport1_0 = 0; - - save_item(NAME(m_mw_irq_control)); - save_item(NAME(m_sound_ctrl)); + m_mw_irq_control = 0; + + /* konamigx_mixer uses this, so better initialize it */ + m_gx_wrport1_0 = 0; + + save_item(NAME(m_mw_irq_control)); + save_item(NAME(m_sound_ctrl)); save_item(NAME(m_sound_nmi_clk)); machine().save().register_postload(save_prepost_delegate(FUNC(mystwarr_state::reset_sound_region), this)); diff --git a/src/mame/includes/konamigx.h b/src/mame/includes/konamigx.h index 5921cabbb1f..0a4f1a497cd 100644 --- a/src/mame/includes/konamigx.h +++ b/src/mame/includes/konamigx.h @@ -16,58 +16,59 @@ public: m_maincpu(*this,"maincpu"), m_soundcpu(*this, "soundcpu"), m_dasp(*this, "dasp"), - m_workram(*this,"workram"), - m_psacram(*this,"psacram"), - m_subpaletteram32(*this,"subpaletteram"), m_k055673(*this, "k055673"), m_k055555(*this, "k055555"), m_k056832(*this, "k056832"), m_k054338(*this, "k054338"), + m_k056800(*this, "k056800"), + m_k054539_1(*this,"k054539_1"), + m_k054539_2(*this,"k054539_2"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_palette(*this, "palette"), + m_workram(*this,"workram"), + m_psacram(*this,"psacram"), + m_subpaletteram32(*this,"subpaletteram"), m_k053936_0_ctrl(*this,"k053936_0_ctrl",32), m_k053936_0_linectrl(*this,"k053936_0_line",32), m_k053936_0_ctrl_16(*this,"k053936_0_ct16",16), m_k053936_0_linectrl_16(*this,"k053936_0_li16",16), m_konamigx_type3_psac2_bank(*this,"psac2_bank"), - m_k056800(*this, "k056800"), - m_k054539_1(*this,"k054539_1"), - m_k054539_2(*this,"k054539_2"), + m_generic_paletteram_32(*this, "paletteram"), m_an0(*this, "AN0"), m_an1(*this, "AN1"), m_light0_x(*this, "LIGHT0_X"), m_light0_y(*this, "LIGHT0_Y"), m_light1_x(*this, "LIGHT1_X"), m_light1_y(*this, "LIGHT1_Y"), - m_eepromout(*this, "EEPROMOUT"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_generic_paletteram_32(*this, "paletteram") + m_eepromout(*this, "EEPROMOUT") { } required_device m_maincpu; optional_device m_soundcpu; optional_device m_dasp; - - optional_shared_ptr m_workram; - optional_shared_ptr m_psacram; - optional_shared_ptr m_subpaletteram32; required_device m_k055673; required_device m_k055555; required_device m_k056832; optional_device m_k054338; - optional_shared_ptr m_k053936_0_ctrl; - optional_shared_ptr m_k053936_0_linectrl; - optional_shared_ptr m_k053936_0_ctrl_16; - optional_shared_ptr m_k053936_0_linectrl_16; - optional_shared_ptr m_konamigx_type3_psac2_bank; optional_device m_k056800; optional_device m_k054539_1; optional_device m_k054539_2; - optional_ioport m_an0, m_an1, m_light0_x, m_light0_y, m_light1_x, m_light1_y, m_eepromout; required_device m_gfxdecode; required_device m_screen; required_device m_palette; + + optional_shared_ptr m_workram; + optional_shared_ptr m_psacram; + optional_shared_ptr m_subpaletteram32; + optional_shared_ptr m_k053936_0_ctrl; + optional_shared_ptr m_k053936_0_linectrl; + optional_shared_ptr m_k053936_0_ctrl_16; + optional_shared_ptr m_k053936_0_linectrl_16; + optional_shared_ptr m_konamigx_type3_psac2_bank; optional_shared_ptr m_generic_paletteram_32; + + optional_ioport m_an0, m_an1, m_light0_x, m_light0_y, m_light1_x, m_light1_y, m_eepromout; DECLARE_WRITE32_MEMBER(esc_w); DECLARE_WRITE32_MEMBER(eeprom_w); @@ -166,23 +167,84 @@ public: void fantjour_dma_install(); void konamigx_mixer_primode(int mode); + + typedef void (konamigx_state::*esc_cb)(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + + void tkmmpzdm_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void tbyahhoo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + void daiskiss_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4); + + inline int K053247GX_combine_c18(int attrib); + inline int K055555GX_decode_objcolor(int c18); + inline int K055555GX_decode_inpri(int c18); + int K055555GX_decode_vmixcolor(int layer, int *color); UINT8 m_sound_ctrl; UINT8 m_sound_intck; UINT32 m_fantjour_dma[8]; int m_konamigx_current_frame; int m_gx_objdma, m_gx_primode; -}; - + emu_timer *m_dmadelay_timer; + emu_timer *m_boothack_timer; + int m_gx_rdport1_3, m_gx_syncen; + int m_gx_cfgport; + int m_suspension_active, m_resume_trigger; + int m_last_prot_op, m_last_prot_clk; + + UINT8 m_esc_program[4096]; + esc_cb m_esc_cb; + + UINT16 m_prot_data[0x20]; + + // 1st-Tier GX/MW Variables + // frequently used registers + int m_k053247_vrcbk[4]; + int m_k053247_coreg, m_k053247_coregshift, m_k053247_opset; + int m_opri, m_oinprion; + int m_vcblk[6], m_ocblk; + int m_vinmix, m_vmixon, m_osinmix, m_osmixon; + UINT8 m_gx_wrport1_0, m_gx_wrport1_1; + UINT16 m_gx_wrport2; + + // 2nd-Tier GX/MW Graphics Variables + UINT8 *m_gx_objzbuf, *m_gx_shdzbuf; + int m_layer_colorbase[4]; + INT32 m_gx_tilebanks[8], m_gx_oldbanks[8]; + int m_gx_tilemode, m_gx_rozenable, m_psac_colorbase, m_last_psac_colorbase; + int m_gx_specialrozenable; // type 1 roz, with voxel height-map, rendered from 2 source tilemaps (which include height data) to temp bitmap for further processing + int m_gx_rushingheroes_hack; + int m_gx_le2_textcolour_hack; + tilemap_t *m_gx_psac_tilemap, *m_gx_psac_tilemap2; + bitmap_ind16 *m_type3_roz_temp_bitmap; + tilemap_t *m_gx_psac_tilemap_alt; + int m_konamigx_has_dual_screen; + int m_konamigx_palformat; + bitmap_rgb32 *m_dualscreen_left_tempbitmap; + bitmap_rgb32 *m_dualscreen_right_tempbitmap; + + /* On Type-1 the K053936 output is rendered to these temporary bitmaps as raw data + the 'voxel' effect to give the pixels height is a post-process operation on the + output of the K053936 (this can clearly be seen in videos as large chunks of + scenary flicker when in the distance due to single pixels in the K053936 output + becoming visible / invisible due to drawing precision. -/*----------- defined in video/konamigx.c -----------*/ + -- however, progress on this has stalled as our K053936 doesn't seem to give + the right output for post processing, I suspect the game is using some + unsupported flipping modes (probably due to the way it's hooked up to the + rest of the chips) which is causing entirely the wrong output. - -// 1st-Tier GX/MW Variables and Functions -extern UINT8 konamigx_wrport1_0, konamigx_wrport1_1; -extern UINT16 konamigx_wrport2; + -- furthermore video/konamigx.c contains it's own implementation of + the K053936_zoom_draw named K053936GP_zoom_draw ... + */ + bitmap_ind16 *m_gxtype1_roz_dstbitmap; + bitmap_ind16 *m_gxtype1_roz_dstbitmap2; + rectangle m_gxtype1_roz_dstbitmapclip; +}; // Sprite Callbacks diff --git a/src/mame/machine/konamigx.c b/src/mame/machine/konamigx.c index f871c31257a..c88d08e90f3 100644 --- a/src/mame/machine/konamigx.c +++ b/src/mame/machine/konamigx.c @@ -41,13 +41,11 @@ Has word-wide registers as follows: */ // K055550/K053990 protection chips, perform simple memset() and other game logic operations -static UINT16 prot_data[0x20]; - READ16_MEMBER(konamigx_state::K055550_word_r) { - return(prot_data[offset]); + return(m_prot_data[offset]); } WRITE16_MEMBER(konamigx_state::K055550_word_w) @@ -56,7 +54,7 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) int src, tgt, srcend, tgtend, skip, cx1, sx1, wx1, cy1, sy1, wy1, cz1, sz1, wz1, c2, s2, w2; int dx, dy, angle; - COMBINE_DATA(prot_data+offset); + COMBINE_DATA(m_prot_data+offset); if (offset == 0 && ACCESSING_BITS_8_15) { @@ -65,13 +63,13 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) { case 0x97: // memset() (Dadandarn at 0x639dc) case 0x9f: // memset() (Violent Storm at 0x989c) - adr = (prot_data[7] << 16) | prot_data[8]; - bsize = (prot_data[10] << 16) | prot_data[11]; - count = (prot_data[0] & 0xff) + 1; + adr = (m_prot_data[7] << 16) | m_prot_data[8]; + bsize = (m_prot_data[10] << 16) | m_prot_data[11]; + count = (m_prot_data[0] & 0xff) + 1; lim = adr+bsize*count; for(i=adr; i>(8-1); // words to skip in each entry to reach the "hit list" - adr = prot_data[2]<<16 | prot_data[3]; // where the table is located - bsize = prot_data[5]<<16 | prot_data[6]; // object entry size in bytes + count = m_prot_data[0] & 0xff; // number of objects - 1 + skip = m_prot_data[1]>>(8-1); // words to skip in each entry to reach the "hit list" + adr = m_prot_data[2]<<16 | m_prot_data[3]; // where the table is located + bsize = m_prot_data[5]<<16 | m_prot_data[6]; // object entry size in bytes srcend = adr + bsize * count; tgtend = srcend + bsize; @@ -142,8 +140,8 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) break; case 0xc0: // calculate object "homes-in" vector (Violent Storm at 0x03da9e) - dx = (short)prot_data[0xc]; - dy = (short)prot_data[0xd]; + dx = (short)m_prot_data[0xc]; + dy = (short)m_prot_data[0xd]; // it's not necessary to use lookup tables because Violent Storm // only calls the service once per enemy per frame. @@ -165,7 +163,7 @@ WRITE16_MEMBER(konamigx_state::K055550_word_w) else i = machine().rand() & 0xff; // vector direction indeterminate - prot_data[0x10] = i; + m_prot_data[0x10] = i; break; default: @@ -183,27 +181,27 @@ WRITE16_MEMBER(konamigx_state::K053990_martchmp_word_w) int mode, i, element_size = 1; UINT16 mod_val, mod_data; - COMBINE_DATA(prot_data+offset); + COMBINE_DATA(m_prot_data+offset); if (offset == 0x0c && ACCESSING_BITS_8_15) { - mode = (prot_data[0x0d]<<8 & 0xff00) | (prot_data[0x0f] & 0xff); + mode = (m_prot_data[0x0d]<<8 & 0xff00) | (m_prot_data[0x0f] & 0xff); switch (mode) { case 0xffff: // word copy element_size = 2; case 0xff00: // byte copy - src_addr = prot_data[0x0]; - src_addr |= prot_data[0x1]<<16 & 0xff0000; - dst_addr = prot_data[0x2]; - dst_addr |= prot_data[0x3]<<16 & 0xff0000; - src_count = prot_data[0x8]>>8; - //dst_count = prot_data[0x9]>>8; - src_skip = prot_data[0xa] & 0xff; - dst_skip = prot_data[0xb] & 0xff; - - if ((prot_data[0x8] & 0xff) == 2) src_count <<= 1; + src_addr = m_prot_data[0x0]; + src_addr |= m_prot_data[0x1]<<16 & 0xff0000; + dst_addr = m_prot_data[0x2]; + dst_addr |= m_prot_data[0x3]<<16 & 0xff0000; + src_count = m_prot_data[0x8]>>8; + //dst_count = m_prot_data[0x9]>>8; + src_skip = m_prot_data[0xa] & 0xff; + dst_skip = m_prot_data[0xb] & 0xff; + + if ((m_prot_data[0x8] & 0xff) == 2) src_count <<= 1; src_skip += element_size; dst_skip += element_size; @@ -223,16 +221,16 @@ WRITE16_MEMBER(konamigx_state::K053990_martchmp_word_w) break; case 0x00ff: // sprite list modifier - src_addr = prot_data[0x0]; - src_addr |= prot_data[0x1]<<16 & 0xff0000; - src_skip = prot_data[0x1]>>8; - dst_addr = prot_data[0x2]; - dst_addr |= prot_data[0x3]<<16 & 0xff0000; - dst_skip = prot_data[0x3]>>8; - mod_addr = prot_data[0x4]; - mod_addr |= prot_data[0x5]<<16 & 0xff0000; - mod_skip = prot_data[0x5]>>8; - mod_offs = prot_data[0x8] & 0xff; + src_addr = m_prot_data[0x0]; + src_addr |= m_prot_data[0x1]<<16 & 0xff0000; + src_skip = m_prot_data[0x1]>>8; + dst_addr = m_prot_data[0x2]; + dst_addr |= m_prot_data[0x3]<<16 & 0xff0000; + dst_skip = m_prot_data[0x3]>>8; + mod_addr = m_prot_data[0x4]; + mod_addr |= m_prot_data[0x5]<<16 & 0xff0000; + mod_skip = m_prot_data[0x5]>>8; + mod_offs = m_prot_data[0x8] & 0xff; mod_offs<<= 1; mod_count = 0x100; diff --git a/src/mame/video/konamigx.c b/src/mame/video/konamigx.c index 1128d55655b..6886673f1d8 100644 --- a/src/mame/video/konamigx.c +++ b/src/mame/video/konamigx.c @@ -11,71 +11,8 @@ //#define GX_DEBUG #define VERBOSE 0 -/***************************************************************************/ -/* */ -/* 2nd-Tier GX/MW Graphics Functions */ -/* */ -/***************************************************************************/ - - -static UINT8 *gx_objzbuf, *gx_shdzbuf; - - - -static int layer_colorbase[4]; -static INT32 gx_tilebanks[8], gx_oldbanks[8]; -static int gx_tilemode, gx_rozenable, psac_colorbase, last_psac_colorbase; -static int gx_specialrozenable; // type 1 roz, with voxel height-map, rendered from 2 source tilemaps (which include height data) to temp bitmap for further processing -static int gx_rushingheroes_hack; -static int gx_le2_textcolour_hack; -static tilemap_t *gx_psac_tilemap, *gx_psac_tilemap2; -static bitmap_ind16* type3_roz_temp_bitmap; -static tilemap_t* gx_psac_tilemap_alt; - -static int konamigx_has_dual_screen; INLINE void set_color_555(palette_device &palette, pen_t color, int rshift, int gshift, int bshift, UINT16 data); -static int konamigx_palformat; -static bitmap_rgb32* dualscreen_left_tempbitmap; -static bitmap_rgb32* dualscreen_right_tempbitmap; - -/* On Type-1 the K053936 output is rendered to these temporary bitmaps as raw data - the 'voxel' effect to give the pixels height is a post-process operation on the - output of the K053936 (this can clearly be seen in videos as large chunks of - scenary flicker when in the distance due to single pixels in the K053936 output - becoming visible / invisible due to drawing precision. - - -- however, progress on this has stalled as our K053936 doesn't seem to give - the right output for post processing, I suspect the game is using some - unsupported flipping modes (probably due to the way it's hooked up to the - rest of the chips) which is causing entirely the wrong output. - - -- furthermore machine/konamigx.c (!) contains it's own implementation of - the K053936_zoom_draw named K053936GP_zoom_draw ... It really shouldn't do, - epsecially not in 'machine', which isn't meant to be video related. - - - */ -static bitmap_ind16 *gxtype1_roz_dstbitmap; -static bitmap_ind16 *gxtype1_roz_dstbitmap2; -static rectangle gxtype1_roz_dstbitmapclip; - -/***************************************************************************/ -/* */ -/* 1st-Tier GX/MW Variables and Functions */ -/* */ -/***************************************************************************/ - -// global system ports access -UINT8 konamigx_wrport1_0, konamigx_wrport1_1; -UINT16 konamigx_wrport2; - -// frequently used registers -static int k053247_vrcbk[4]; -static int k053247_coreg, k053247_coregshift, k053247_opset; -static int opri, oinprion; -static int vcblk[6], ocblk; -static int vinmix, vmixon, osinmix, osmixon; void konamigx_state::konamigx_precache_registers(void) @@ -86,68 +23,68 @@ void konamigx_state::konamigx_precache_registers(void) int i; i = m_k055673->k053247_read_register(0x8/2); - k053247_vrcbk[0] = (i & 0x000f) << 14; - k053247_vrcbk[1] = (i & 0x0f00) << 6; + m_k053247_vrcbk[0] = (i & 0x000f) << 14; + m_k053247_vrcbk[1] = (i & 0x0f00) << 6; i = m_k055673->k053247_read_register(0xa/2); - k053247_vrcbk[2] = (i & 0x000f) << 14; - k053247_vrcbk[3] = (i & 0x0f00) << 6; + m_k053247_vrcbk[2] = (i & 0x000f) << 14; + m_k053247_vrcbk[3] = (i & 0x0f00) << 6; // COREG == OBJSET2+1C == bit8-11 of OPSET ??? (see p.50 last table, needs p.49 to confirm) - k053247_opset = m_k055673->k053247_read_register(0xc/2); - - i = k053247_opset & 7; if (i > 4) i = 4; - - k053247_coreg = m_k055673->k053247_read_register(0xc/2)>>8 & 0xf; - k053247_coreg =(k053247_coreg & coregmasks[i]) << 12; - - k053247_coregshift = coregshifts[i]; - - opri = m_k055555->K055555_read_register(K55_PRIINP_8); - oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON); - vcblk[0] = m_k055555->K055555_read_register(K55_PALBASE_A); - vcblk[1] = m_k055555->K055555_read_register(K55_PALBASE_B); - vcblk[2] = m_k055555->K055555_read_register(K55_PALBASE_C); - vcblk[3] = m_k055555->K055555_read_register(K55_PALBASE_D); - vcblk[4] = m_k055555->K055555_read_register(K55_PALBASE_SUB1); - vcblk[5] = m_k055555->K055555_read_register(K55_PALBASE_SUB2); - ocblk = m_k055555->K055555_read_register(K55_PALBASE_OBJ); - vinmix = m_k055555->K055555_read_register(K55_BLEND_ENABLES); - vmixon = m_k055555->K055555_read_register(K55_VINMIX_ON); - osinmix = m_k055555->K055555_read_register(K55_OSBLEND_ENABLES); - osmixon = m_k055555->K055555_read_register(K55_OSBLEND_ON); + m_k053247_opset = m_k055673->k053247_read_register(0xc/2); + + i = m_k053247_opset & 7; if (i > 4) i = 4; + + m_k053247_coreg = m_k055673->k053247_read_register(0xc/2)>>8 & 0xf; + m_k053247_coreg =(m_k053247_coreg & coregmasks[i]) << 12; + + m_k053247_coregshift = coregshifts[i]; + + m_opri = m_k055555->K055555_read_register(K55_PRIINP_8); + m_oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON); + m_vcblk[0] = m_k055555->K055555_read_register(K55_PALBASE_A); + m_vcblk[1] = m_k055555->K055555_read_register(K55_PALBASE_B); + m_vcblk[2] = m_k055555->K055555_read_register(K55_PALBASE_C); + m_vcblk[3] = m_k055555->K055555_read_register(K55_PALBASE_D); + m_vcblk[4] = m_k055555->K055555_read_register(K55_PALBASE_SUB1); + m_vcblk[5] = m_k055555->K055555_read_register(K55_PALBASE_SUB2); + m_ocblk = m_k055555->K055555_read_register(K55_PALBASE_OBJ); + m_vinmix = m_k055555->K055555_read_register(K55_BLEND_ENABLES); + m_vmixon = m_k055555->K055555_read_register(K55_VINMIX_ON); + m_osinmix = m_k055555->K055555_read_register(K55_OSBLEND_ENABLES); + m_osmixon = m_k055555->K055555_read_register(K55_OSBLEND_ON); } -INLINE int K053247GX_combine_c18(int attrib) // (see p.46) +inline int konamigx_state::K053247GX_combine_c18(int attrib) // (see p.46) { int c18; - c18 = (attrib & 0xff)<> k053247_coregshift); + return((ocb | c18) >> m_k053247_coregshift); } -INLINE int K055555GX_decode_inpri(int c18) // (see p.59 7.2.2) +inline int konamigx_state::K055555GX_decode_inpri(int c18) // (see p.59 7.2.2) { - int op = opri; + int op = m_opri; c18 >>= 8; - op &= oinprion; - c18 &=~oinprion; + op &= m_oinprion; + c18 &=~m_oinprion; return(c18 | op); } @@ -157,7 +94,7 @@ K055673_CB_MEMBER(konamigx_state::type2_sprite_callback) int num = *code; int c18 = *color; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); c18 = K053247GX_combine_c18(c18); *color = K055555GX_decode_objcolor(c18); *priority_mask = K055555GX_decode_inpri(c18); @@ -168,13 +105,13 @@ K055673_CB_MEMBER(konamigx_state::dragoonj_sprite_callback) int num, op, pri, c18; num = *code; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); c18 = pri = *color; - op = opri; + op = m_opri; pri = (pri & 0x200) ? 4 : pri>>4 & 0xf; - op &= oinprion; - pri &=~oinprion; + op &= m_oinprion; + pri &=~m_oinprion; *priority_mask = pri | op; c18 = K053247GX_combine_c18(c18); @@ -186,13 +123,13 @@ K055673_CB_MEMBER(konamigx_state::salmndr2_sprite_callback) int num, op, pri, c18; num = *code; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); c18 = pri = *color; - op = opri; + op = m_opri; pri = pri>>4 & 0x3f; - op &= oinprion; - pri &=~oinprion; + op &= m_oinprion; + pri &=~m_oinprion; *priority_mask = pri | op; c18 = K053247GX_combine_c18(c18); @@ -204,27 +141,27 @@ K055673_CB_MEMBER(konamigx_state::le2_sprite_callback) int num, op, pri; num = *code; - *code = k053247_vrcbk[num>>14] | (num & 0x3fff); + *code = m_k053247_vrcbk[num>>14] | (num & 0x3fff); pri = *color; *color &= 0x1f; - op = opri; + op = m_opri; pri &= 0xf0; - op &= oinprion; - pri &=~oinprion; + op &= m_oinprion; + pri &=~m_oinprion; *priority_mask = pri | op; } -static int K055555GX_decode_vmixcolor(int layer, int *color) // (see p.62 7.2.6 and p.27 3.3) +int konamigx_state::K055555GX_decode_vmixcolor(int layer, int *color) // (see p.62 7.2.6 and p.27 3.3) { int vcb, shift, pal, vmx, von, pl45, emx; - vcb = vcblk[layer]<<6; + vcb = m_vcblk[layer]<<6; shift = layer<<1; pal = *color; - vmx = vinmix>>shift & 3; - von = vmixon>>shift & 3; + vmx = m_vinmix>>shift & 3; + von = m_vmixon>>shift & 3; emx = pl45 = pal>>4 & 3; pal &= 0xf; pl45 &= von; @@ -235,7 +172,7 @@ static int K055555GX_decode_vmixcolor(int layer, int *color) // (see p.62 7.2.6 emx |= vmx; pal |= vcb; - if (gx_le2_textcolour_hack) + if (m_gx_le2_textcolour_hack) if (layer==0) pal |= 0x1c0; @@ -252,13 +189,13 @@ int K055555GX_decode_osmixcolor(int layer, int *color) // (see p.63, p.49-50 and shift = layer<<1; pal = *color; - osmx = osinmix>>shift & 3; - oson = osmixon>>shift & 3; + osmx = m_osinmix>>shift & 3; + oson = m_osmixon>>shift & 3; if (layer) { // layer 1-3 are external tile layers - scb = vcblk[layer+3]<<6; + scb = m_vcblk[layer+3]<<6; emx = pl45 = pal>>4 & 3; pal &= 0xf; pl45 &= oson; @@ -292,14 +229,14 @@ void konamigx_state::wipezbuf(int noshadow) int w = visarea.width(); int h = visarea.height(); - UINT8 *zptr = gx_objzbuf; + UINT8 *zptr = m_gx_objzbuf; int ecx = h; do { memset(zptr, -1, w); zptr += GX_ZBUFW; } while (--ecx); if (!noshadow) { - zptr = gx_shdzbuf; + zptr = m_gx_shdzbuf; w <<= 1; ecx = h; do { memset(zptr, -1, w); zptr += (GX_ZBUFW<<1); } while (--ecx); @@ -350,8 +287,8 @@ void konamigx_state::konamigx_mixer_init(screen_device &screen, int objdma) m_gx_objdma = 0; m_gx_primode = 0; - gx_objzbuf = &screen.priority().pix8(0); - gx_shdzbuf = auto_alloc_array(machine(), UINT8, GX_ZBUFSIZE); + m_gx_objzbuf = &screen.priority().pix8(0); + m_gx_shdzbuf = auto_alloc_array(machine(), UINT8, GX_ZBUFSIZE); gx_objpool = auto_alloc_array(machine(), struct GX_OBJ, GX_MAX_OBJECTS); m_k054338->export_config(&K054338_shdRGB); @@ -393,14 +330,14 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap, int cltc_shdpri, /*prflp,*/ disp; // buffer can move when it's resized, so refresh the pointer - gx_objzbuf = &screen.priority().pix8(0); + m_gx_objzbuf = &screen.priority().pix8(0); // abort if object database failed to initialize objpool = gx_objpool; if (!objpool) return; // clear screen with backcolor and update flicker pulse - if (konamigx_wrport1_0 & 0x20) + if (m_gx_wrport1_0 & 0x20) m_k054338->fill_backcolor(bitmap, cliprect, m_palette->pens() + (m_k055555->K055555_read_register(0) << 9), @@ -564,7 +501,7 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap, int zcode = gx_spriteram[offs] & 0xff; // invert z-order when opset_pri is set (see p.51 OPSET PRI) - if (k053247_opset & 0x10) zcode = 0xff - zcode; + if (m_k053247_opset & 0x10) zcode = 0xff - zcode; int code = gx_spriteram[offs+1]; int color = k = gx_spriteram[offs+6]; @@ -635,7 +572,7 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap, if (temp3) { // determine shadow priority - spri = (k053247_opset & 0x20) ? pri : shdpri[shadow]; // (see p.51 OPSET SDSEL) + spri = (m_k053247_opset & 0x20) ? pri : shdpri[shadow]; // (see p.51 OPSET SDSEL) } } @@ -732,13 +669,13 @@ void konamigx_state::gx_draw_basic_tilemaps(screen_device &screen, bitmap_rgb32 if (j == GXMIX_BLEND_FORCE) { temp1 = 0x00; temp2 = mixerflags>>(i+16); temp3 = 3; } else { - temp1 = vinmix; - temp2 = vinmix>>i & 3; - temp3 = vmixon>>i & 3; + temp1 = m_vinmix; + temp2 = m_vinmix>>i & 3; + temp3 = m_vmixon>>i & 3; } /* blend layer only when: - 1) vinmix != 0xff + 1) m_vinmix != 0xff 2) its internal mix code is set 3) all mix code bits are internal(overriden until tile blending has been implemented) 4) 0 > alpha < 255; @@ -775,9 +712,9 @@ void konamigx_state::gx_draw_basic_extended_tilemaps_1(screen_device &screen, bi if (j == GXMIX_BLEND_FORCE) { temp1 = 0x00; temp2 = mixerflags>>24; temp3 = 3; } else { - temp1 = osinmix; - temp2 = osinmix>>2 & 3; - temp3 = osmixon>>2 & 3; + temp1 = m_osinmix; + temp2 = m_osinmix>>2 & 3; + temp3 = m_osmixon>>2 & 3; } if (temp1!=0xff && temp2 /*&& temp3==3*/) @@ -803,7 +740,7 @@ void konamigx_state::gx_draw_basic_extended_tilemaps_1(screen_device &screen, bi } else { - machine().device("k053250_1")->draw(bitmap, cliprect, vcblk[4]<("k053250_1")->draw(bitmap, cliprect, m_vcblk[4]<>26; temp3 = 3; } else { - temp1 = osinmix; - temp2 = osinmix>>4 & 3; - temp3 = osmixon>>4 & 3; + temp1 = m_osinmix; + temp2 = m_osinmix>>4 & 3; + temp3 = m_osmixon>>4 & 3; } if (temp1!=0xff && temp2 /*&& temp3==3*/) @@ -875,7 +812,7 @@ void konamigx_state::gx_draw_basic_extended_tilemaps_2(screen_device &screen, bi } } else - machine().device("k053250_2")->draw(bitmap, cliprect, vcblk[5]<("k053250_2")->draw(bitmap, cliprect, m_vcblk[5]<k053247_draw_single_sprite_gxcore(bitmap, cliprect, - gx_objzbuf, gx_shdzbuf, code, gx_spriteram, offs, + m_gx_objzbuf, m_gx_shdzbuf, code, gx_spriteram, offs, color, alpha, drawmode, zcode, pri, /* non-gx only */ 0,0,NULL,NULL,0 @@ -985,7 +922,7 @@ TILE_GET_INFO_MEMBER(konamigx_state::get_gx_psac_tile_info) } - colour = (psac_colorbase << 4) + col; + colour = (m_psac_colorbase << 4) + col; SET_TILE_INFO_MEMBER(0, tileno, colour, TILE_FLIPYX(flip)); } @@ -1003,7 +940,7 @@ WRITE32_MEMBER(konamigx_state::konamigx_type3_psac2_bank_w) /* handle this by creating 2 roz tilemaps instead, otherwise performance dies completely on dual screen mode if (konamigx_type3_psac2_actual_bank!=konamigx_type3_psac2_actual_last_bank) { - gx_psac_tilemap->mark_all_dirty(); + m_gx_psac_tilemap->mark_all_dirty(); konamigx_type3_psac2_actual_last_bank = konamigx_type3_psac2_actual_bank; } */ @@ -1106,7 +1043,7 @@ K056832_CB_MEMBER(konamigx_state::type2_tile_callback) { int d = *code; - *code = (gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); + *code = (m_gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); K055555GX_decode_vmixcolor(layer, color); } @@ -1118,7 +1055,7 @@ K056832_CB_MEMBER(konamigx_state::alpha_tile_callback) mixcode = K055555GX_decode_vmixcolor(layer, color); if (mixcode < 0) - *code = (gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); + *code = (m_gx_tilebanks[(d & 0xe000)>>13]<<13) + (d & 0x1fff); else { /* save mixcode and mark tile alpha (unimplemented) */ @@ -1165,17 +1102,17 @@ void konamigx_state::common_init() for (int i = 0; i < 8; i++) { - gx_tilebanks[i] = gx_oldbanks[i] = 0; + m_gx_tilebanks[i] = m_gx_oldbanks[i] = 0; } - machine().save().save_item(NAME(gx_tilebanks)); + machine().save().save_item(NAME(m_gx_tilebanks)); - gx_tilemode = 0; + m_gx_tilemode = 0; - gx_rozenable = 0; - gx_specialrozenable = 0; - gx_rushingheroes_hack = 0; - gx_le2_textcolour_hack = 0; + m_gx_rozenable = 0; + m_gx_specialrozenable = 0; + m_gx_rushingheroes_hack = 0; + m_gx_le2_textcolour_hack = 0; // Documented relative offsets of non-flipped games are (-2, 0, 2, 3),(0, 0, 0, 0). // (+ve values move layers to the right and -ve values move layers to the left) @@ -1187,7 +1124,7 @@ void konamigx_state::common_init() m_k056832->set_layer_offs(2, 2, 0); m_k056832->set_layer_offs(3, 3, 0); - konamigx_has_dual_screen = 0; + m_konamigx_has_dual_screen = 0; m_konamigx_current_frame = 0; } @@ -1197,7 +1134,7 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_5bpp) common_init(); if (!strcmp(machine().system().name,"tbyahhoo")) - gx_tilemode = 1; + m_gx_tilemode = 1; else if (!strcmp(machine().system().name,"crzcross") || !strcmp(machine().system().name,"puzldama")) konamigx_mixer_primode(5); else if (!strcmp(machine().system().name,"daiskiss")) @@ -1220,7 +1157,7 @@ VIDEO_START_MEMBER(konamigx_state, le2) konamigx_mixer_primode(-1); // swapped layer B and C priorities? - gx_le2_textcolour_hack = 1; // force text layer to use the right palette + m_gx_le2_textcolour_hack = 1; // force text layer to use the right palette } VIDEO_START_MEMBER(konamigx_state, konamigx_6bpp) @@ -1234,23 +1171,23 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type3) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); - gx_psac_tilemap_alt = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_alt_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); + m_gx_psac_tilemap_alt = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac3_alt_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 256); - gx_rozenable = 0; - gx_specialrozenable = 2; + m_gx_rozenable = 0; + m_gx_specialrozenable = 2; /* set up tile layers */ - type3_roz_temp_bitmap = auto_bitmap_ind16_alloc(machine(), width, height); + m_type3_roz_temp_bitmap = auto_bitmap_ind16_alloc(machine(), width, height); - //gx_psac_tilemap->set_flip(TILEMAP_FLIPX| TILEMAP_FLIPY); + //m_gx_psac_tilemap->set_flip(TILEMAP_FLIPX| TILEMAP_FLIPY); K053936_wraparound_enable(0, 1); // K053936GP_set_offset(0, -30, -1); @@ -1261,8 +1198,8 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type3) m_k056832->set_layer_offs(2, -48, 0); m_k056832->set_layer_offs(3, -48, 0); - konamigx_has_dual_screen = 1; - konamigx_palformat = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 1; } VIDEO_START_MEMBER(konamigx_state, konamigx_type4) @@ -1270,14 +1207,14 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_rozenable = 0; - gx_specialrozenable = 3; + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_rozenable = 0; + m_gx_specialrozenable = 3; m_k056832->set_layer_offs(0, -27, 0); m_k056832->set_layer_offs(1, -25, 0); @@ -1287,9 +1224,9 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4) K053936_wraparound_enable(0, 0); K053936GP_set_offset(0, -36, 1); - gx_rushingheroes_hack = 1; - konamigx_has_dual_screen = 1; - konamigx_palformat = 0; + m_gx_rushingheroes_hack = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 0; } @@ -1298,14 +1235,14 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_vsn) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_rozenable = 0; - gx_specialrozenable = 3; + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_rozenable = 0; + m_gx_specialrozenable = 3; m_k056832->set_layer_offs(0, -52, 0); m_k056832->set_layer_offs(1, -48, 0); @@ -1315,9 +1252,9 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_vsn) K053936_wraparound_enable(0, 1); // wraparound doesn't work properly with the custom drawing function anyway, see the crowd in vsnet and rushhero K053936GP_set_offset(0, -30, 0); - gx_rushingheroes_hack = 1; - konamigx_has_dual_screen = 1; - konamigx_palformat = 0; + m_gx_rushingheroes_hack = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 0; } VIDEO_START_MEMBER(konamigx_state, konamigx_type4_sd2) @@ -1325,14 +1262,14 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_sd2) int width = m_screen->width(); int height = m_screen->height(); - dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); - dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); + m_dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); common_init(); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_rozenable = 0; - gx_specialrozenable = 3; + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_rozenable = 0; + m_gx_specialrozenable = 3; m_k056832->set_layer_offs(0, -29, -1); @@ -1344,9 +1281,9 @@ VIDEO_START_MEMBER(konamigx_state, konamigx_type4_sd2) K053936_wraparound_enable(0, 0); K053936GP_set_offset(0, -36, -1); - gx_rushingheroes_hack = 1; - konamigx_has_dual_screen = 1; - konamigx_palformat = 0; + m_gx_rushingheroes_hack = 1; + m_konamigx_has_dual_screen = 1; + m_konamigx_palformat = 0; } @@ -1359,21 +1296,21 @@ VIDEO_START_MEMBER(konamigx_state, opengolf) m_k056832->set_layer_offs(2, 2+1, 0); m_k056832->set_layer_offs(3, 3+1, 0); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); // transparency will be handled manually in post-processing - //gx_psac_tilemap->set_transparent_pen(0); - //gx_psac_tilemap2->set_transparent_pen(0); + //m_gx_psac_tilemap->set_transparent_pen(0); + //m_gx_psac_tilemap2->set_transparent_pen(0); - gx_rozenable = 0; - gx_specialrozenable = 1; + m_gx_rozenable = 0; + m_gx_specialrozenable = 1; - gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); + m_gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); K053936_wraparound_enable(0, 1); @@ -1394,21 +1331,21 @@ VIDEO_START_MEMBER(konamigx_state, racinfrc) m_k056832->set_layer_offs(2, 2+1, 0); m_k056832->set_layer_offs(3, 3+1, 0); - gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); - gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); + m_gx_psac_tilemap2 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128); // transparency will be handled manually in post-processing - //gx_psac_tilemap->set_transparent_pen(0); - //gx_psac_tilemap2->set_transparent_pen(0); + //m_gx_psac_tilemap->set_transparent_pen(0); + //m_gx_psac_tilemap2->set_transparent_pen(0); - gx_rozenable = 0; - gx_specialrozenable = 1; + m_gx_rozenable = 0; + m_gx_specialrozenable = 1; - gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing + m_gxtype1_roz_dstbitmap2 = auto_bitmap_ind16_alloc(machine(),512,512); // BITMAP_FORMAT_IND16 because we NEED the raw pen data for post-processing - gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); + m_gxtype1_roz_dstbitmapclip.set(0, 512-1, 0, 512-1); K053936_wraparound_enable(0, 1); @@ -1428,20 +1365,20 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 /* if any banks are different from last render, we need to flush the planes */ for (dirty = 0, i = 0; i < 8; i++) { - newbank = gx_tilebanks[i]; - if (gx_oldbanks[i] != newbank) { gx_oldbanks[i] = newbank; dirty = 1; } + newbank = m_gx_tilebanks[i]; + if (m_gx_oldbanks[i] != newbank) { m_gx_oldbanks[i] = newbank; dirty = 1; } } - if (gx_tilemode == 0) + if (m_gx_tilemode == 0) { // driver approximates tile update in mode 0 for speed unchained = m_k056832->get_layer_association(); for (i=0; i<4; i++) { newbase = m_k055555->K055555_get_palette_index(i)<<6; - if (layer_colorbase[i] != newbase) + if (m_layer_colorbase[i] != newbase) { - layer_colorbase[i] = newbase; + m_layer_colorbase[i] = newbase; if (unchained) m_k056832->mark_plane_dirty(i); @@ -1456,17 +1393,17 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 } // sub2 is PSAC colorbase on GX - if (gx_rozenable) + if (m_gx_rozenable) { - last_psac_colorbase = psac_colorbase; - psac_colorbase = m_k055555->K055555_get_palette_index(6); + m_last_psac_colorbase = m_psac_colorbase; + m_psac_colorbase = m_k055555->K055555_get_palette_index(6); - if (psac_colorbase != last_psac_colorbase) + if (m_psac_colorbase != m_last_psac_colorbase) { - gx_psac_tilemap->mark_all_dirty(); - if (gx_rozenable == 3) + m_gx_psac_tilemap->mark_all_dirty(); + if (m_gx_rozenable == 3) { - gx_psac_tilemap2->mark_all_dirty(); + m_gx_psac_tilemap2->mark_all_dirty(); } } } @@ -1474,42 +1411,42 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 if (dirty) m_k056832->mark_all_tilemaps_dirty(); // Type-1 - if (gx_specialrozenable == 1) + if (m_gx_specialrozenable == 1) { - K053936_0_zoom_draw(screen, *gxtype1_roz_dstbitmap, gxtype1_roz_dstbitmapclip,gx_psac_tilemap, 0,0,0); // height data - K053936_0_zoom_draw(screen, *gxtype1_roz_dstbitmap2,gxtype1_roz_dstbitmapclip,gx_psac_tilemap2,0,0,0); // colour data (+ some voxel height data?) + K053936_0_zoom_draw(screen, *m_gxtype1_roz_dstbitmap, m_gxtype1_roz_dstbitmapclip,m_gx_psac_tilemap, 0,0,0); // height data + K053936_0_zoom_draw(screen, *m_gxtype1_roz_dstbitmap2,m_gxtype1_roz_dstbitmapclip,m_gx_psac_tilemap2,0,0,0); // colour data (+ some voxel height data?) } - if (gx_specialrozenable==3) + if (m_gx_specialrozenable==3) { - konamigx_mixer(screen, bitmap, cliprect, gx_psac_tilemap, GXSUB_8BPP,0,0, 0, 0, gx_rushingheroes_hack); + konamigx_mixer(screen, bitmap, cliprect, m_gx_psac_tilemap, GXSUB_8BPP,0,0, 0, 0, m_gx_rushingheroes_hack); } // hack, draw the roz tilemap if W is held // todo: fix so that it works with the mixer without crashing(!) - else if (gx_specialrozenable == 2) + else if (m_gx_specialrozenable == 2) { // we're going to throw half of this away anyway in post-process, so only render what's needed rectangle temprect; temprect = cliprect; temprect.max_x = cliprect.min_x+320; - if (konamigx_type3_psac2_actual_bank == 1) K053936_0_zoom_draw(screen, *type3_roz_temp_bitmap, temprect,gx_psac_tilemap_alt, 0,0,0); // soccerss playfield - else K053936_0_zoom_draw(screen, *type3_roz_temp_bitmap, temprect,gx_psac_tilemap, 0,0,0); // soccerss playfield + if (konamigx_type3_psac2_actual_bank == 1) K053936_0_zoom_draw(screen, *m_type3_roz_temp_bitmap, temprect,m_gx_psac_tilemap_alt, 0,0,0); // soccerss playfield + else K053936_0_zoom_draw(screen, *m_type3_roz_temp_bitmap, temprect,m_gx_psac_tilemap, 0,0,0); // soccerss playfield - konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, type3_roz_temp_bitmap, gx_rushingheroes_hack); + konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, m_type3_roz_temp_bitmap, m_gx_rushingheroes_hack); } else { - konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, 0, gx_rushingheroes_hack); + konamigx_mixer(screen, bitmap, cliprect, 0, 0, 0, 0, 0, 0, m_gx_rushingheroes_hack); } /* Hack! draw type-1 roz layer here for testing purposes only */ - if (gx_specialrozenable == 1) + if (m_gx_specialrozenable == 1) { const pen_t *paldata = m_palette->pens(); @@ -1522,12 +1459,12 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 { for (y=0;y<256;y++) { - //UINT16* src = &gxtype1_roz_dstbitmap->pix16(y); + //UINT16* src = &m_gxtype1_roz_dstbitmap->pix16(y); //UINT32* dst = &bitmap.pix32(y); // ths K053936 rendering should probably just be flipped // this is just kludged to align the racing force 2d logo - UINT16* src = &gxtype1_roz_dstbitmap2->pix16(y+30); + UINT16* src = &m_gxtype1_roz_dstbitmap2->pix16(y+30); UINT32* dst = &bitmap.pix32(256-y); for (x=0;x<512;x++) @@ -1554,7 +1491,7 @@ UINT32 konamigx_state::screen_update_konamigx_left(screen_device &screen, bitmap { int offset=0; - if (konamigx_palformat==1) + if (m_konamigx_palformat==1) { for (offset=0;offset<0x4000/4;offset++) { @@ -1578,12 +1515,12 @@ UINT32 konamigx_state::screen_update_konamigx_left(screen_device &screen, bitmap } } - screen_update_konamigx( screen, downcast(*dualscreen_left_tempbitmap), cliprect); - copybitmap(bitmap, *dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); + screen_update_konamigx( screen, downcast(*m_dualscreen_left_tempbitmap), cliprect); + copybitmap(bitmap, *m_dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); } else { - copybitmap(bitmap, *dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); + copybitmap(bitmap, *m_dualscreen_left_tempbitmap, 0, 0, 0, 0, cliprect); } return 0; @@ -1593,13 +1530,13 @@ UINT32 konamigx_state::screen_update_konamigx_right(screen_device &screen, bitma { if (m_konamigx_current_frame==1) { - copybitmap(bitmap, *dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); + copybitmap(bitmap, *m_dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); } else { int offset=0; - if (konamigx_palformat==1) + if (m_konamigx_palformat==1) { for (offset=0;offset<0x4000/4;offset++) { @@ -1623,8 +1560,8 @@ UINT32 konamigx_state::screen_update_konamigx_right(screen_device &screen, bitma } } - screen_update_konamigx(screen, downcast(*dualscreen_right_tempbitmap), cliprect); - copybitmap(bitmap, *dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); + screen_update_konamigx(screen, downcast(*m_dualscreen_right_tempbitmap), cliprect); + copybitmap(bitmap, *m_dualscreen_right_tempbitmap, 0, 0, 0, 0, cliprect); } return 0; @@ -1697,21 +1634,21 @@ WRITE32_MEMBER(konamigx_state::konamigx_555_palette2_w) WRITE32_MEMBER(konamigx_state::konamigx_tilebank_w) { if (ACCESSING_BITS_24_31) - gx_tilebanks[offset*4] = (data>>24)&0xff; + m_gx_tilebanks[offset*4] = (data>>24)&0xff; if (ACCESSING_BITS_16_23) - gx_tilebanks[offset*4+1] = (data>>16)&0xff; + m_gx_tilebanks[offset*4+1] = (data>>16)&0xff; if (ACCESSING_BITS_8_15) - gx_tilebanks[offset*4+2] = (data>>8)&0xff; + m_gx_tilebanks[offset*4+2] = (data>>8)&0xff; if (ACCESSING_BITS_0_7) - gx_tilebanks[offset*4+3] = data&0xff; + m_gx_tilebanks[offset*4+3] = data&0xff; } // type 1 RAM-based PSAC tilemap WRITE32_MEMBER(konamigx_state::konamigx_t1_psacmap_w) { COMBINE_DATA(&m_psacram[offset]); - gx_psac_tilemap->mark_tile_dirty(offset/2); - gx_psac_tilemap2->mark_tile_dirty(offset/2); + m_gx_psac_tilemap->mark_tile_dirty(offset/2); + m_gx_psac_tilemap2->mark_tile_dirty(offset/2); } // type 4 RAM-based PSAC tilemap @@ -1719,6 +1656,6 @@ WRITE32_MEMBER(konamigx_state::konamigx_t4_psacmap_w) { COMBINE_DATA(&m_psacram[offset]); - gx_psac_tilemap->mark_tile_dirty(offset*2); - gx_psac_tilemap->mark_tile_dirty((offset*2)+1); + m_gx_psac_tilemap->mark_tile_dirty(offset*2); + m_gx_psac_tilemap->mark_tile_dirty((offset*2)+1); } -- cgit v1.2.3 From f13b94d7c68919c3815d9f69fa2f13fc1f34a943 Mon Sep 17 00:00:00 2001 From: miodragm Date: Mon, 27 Oct 2014 19:26:50 +0100 Subject: small fix (nw) --- src/mame/drivers/mystwarr.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/mame/drivers/mystwarr.c b/src/mame/drivers/mystwarr.c index 31c3f6eb12d..a33298acf88 100644 --- a/src/mame/drivers/mystwarr.c +++ b/src/mame/drivers/mystwarr.c @@ -847,13 +847,13 @@ MACHINE_START_MEMBER(mystwarr_state,mystwarr) m_sound_ctrl = 2; reset_sound_region(); - m_mw_irq_control = 0; - - /* konamigx_mixer uses this, so better initialize it */ - m_gx_wrport1_0 = 0; - - save_item(NAME(m_mw_irq_control)); - save_item(NAME(m_sound_ctrl)); + m_mw_irq_control = 0; + + /* konamigx_mixer uses this, so better initialize it */ + m_gx_wrport1_0 = 0; + + save_item(NAME(m_mw_irq_control)); + save_item(NAME(m_sound_ctrl)); save_item(NAME(m_sound_nmi_clk)); machine().save().register_postload(save_prepost_delegate(FUNC(mystwarr_state::reset_sound_region), this)); -- cgit v1.2.3