From 478a1bdaadb11648a57368c541a2637d2e5ed9c0 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Mon, 30 Jul 2012 15:03:46 +0000 Subject: [PATCH] State-ized the thing --- src/mame/drivers/cyclemb.c | 137 +++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 68 deletions(-) diff --git a/src/mame/drivers/cyclemb.c b/src/mame/drivers/cyclemb.c index 8db33765761..0ae277c25ff 100644 --- a/src/mame/drivers/cyclemb.c +++ b/src/mame/drivers/cyclemb.c @@ -92,12 +92,24 @@ public: required_shared_ptr m_obj1_ram; required_shared_ptr m_obj2_ram; required_shared_ptr m_obj3_ram; - DECLARE_WRITE8_MEMBER(cyclemb_bankswitch_w); - DECLARE_READ8_MEMBER(mcu_status_r); - DECLARE_WRITE8_MEMBER(sound_cmd_w); - DECLARE_WRITE8_MEMBER(cyclemb_flip_w); + + struct + { + UINT8 rxd; + UINT8 txd; + UINT8 rst; + UINT8 state; + UINT8 packet_type; + }m_mcu[2]; UINT16 m_dsw_pc_hack; + + DECLARE_WRITE8_MEMBER(cyclemb_bankswitch_w); +// DECLARE_READ8_MEMBER(mcu_status_r); +// DECLARE_WRITE8_MEMBER(sound_cmd_w); + DECLARE_WRITE8_MEMBER(cyclemb_flip_w); + DECLARE_READ8_MEMBER(skydest_i8741_0_r); + DECLARE_WRITE8_MEMBER(skydest_i8741_0_w); }; @@ -375,15 +387,6 @@ WRITE8_MEMBER(cyclemb_state::sound_cmd_w)//actually ciom } #endif -static struct -{ - UINT8 rxd; - UINT8 txd; - UINT8 rst; - UINT8 state; -}skydest_mcu; - - WRITE8_MEMBER(cyclemb_state::cyclemb_flip_w) { flip_screen_set(data & 1); @@ -393,18 +396,17 @@ WRITE8_MEMBER(cyclemb_state::cyclemb_flip_w) static void skydest_i8741_reset(running_machine &machine) { - //cyclemb_state *state = machine.driver_data(); + cyclemb_state *state = machine.driver_data(); - skydest_mcu.rxd = 0; - skydest_mcu.txd = 0; - skydest_mcu.rst = 0; - skydest_mcu.state = 0; + state->m_mcu[0].rxd = 0; + state->m_mcu[0].txd = 0; + state->m_mcu[0].rst = 0; + state->m_mcu[0].state = 0; + state->m_mcu[0].packet_type = 0; } -static READ8_HANDLER( skydest_8741_0_r ) +READ8_MEMBER( cyclemb_state::skydest_i8741_0_r ) { - cyclemb_state *state = space->machine().driver_data(); - if(offset == 1) //status port { //printf("STATUS PC=%04x\n",cpu_get_pc(&space->device())); @@ -418,73 +420,72 @@ static READ8_HANDLER( skydest_8741_0_r ) //printf("%04x\n",cpu_get_pc(&space->device())); /* TODO: internal state of this */ - if(cpu_get_pc(&space->device()) == state->m_dsw_pc_hack) - skydest_mcu.rxd = (space->machine().root_device().ioport("DSW1")->read() & 0x1f) << 2; - else if(skydest_mcu.rst) + if(cpu_get_pc(&space.device()) == m_dsw_pc_hack) + m_mcu[0].rxd = (ioport("DSW1")->read() & 0x1f) << 2; + else if(m_mcu[0].rst) { //printf("READ PC=%04x\n",cpu_get_pc(&space->device())); { - static UINT8 mux_r; /* bit 6 controls inputs */ /* bit 7 routes to audio i8741 */ - switch(skydest_mcu.state) + switch(m_mcu[0].state) { case 1: { - mux_r^=0x20; - if(mux_r & 0x20) - skydest_mcu.rxd = ((space->machine().root_device().ioport("DSW3")->read()) & 0x9f) | (mux_r); + m_mcu[0].packet_type^=0x20; + if(m_mcu[0].packet_type & 0x20) + m_mcu[0].rxd = ((ioport("DSW3")->read()) & 0x9f) | (m_mcu[0].packet_type); else - skydest_mcu.rxd = ((space->machine().root_device().ioport("SYSTEM")->read()) & 0x9f) | (mux_r); + m_mcu[0].rxd = ((ioport("SYSTEM")->read()) & 0x9f) | (m_mcu[0].packet_type); break; } case 2: { - mux_r^=0x20; - if(mux_r & 0x20) - skydest_mcu.rxd = ((space->machine().root_device().ioport("P1_1")->read()) & 0x1f) | (mux_r); + m_mcu[0].packet_type^=0x20; + if(m_mcu[0].packet_type & 0x20) + m_mcu[0].rxd = ((ioport("P1_1")->read()) & 0x1f) | (m_mcu[0].packet_type); else - skydest_mcu.rxd = ((space->machine().root_device().ioport("P1_0")->read()) & 0x1f) | (mux_r); + m_mcu[0].rxd = ((ioport("P1_0")->read()) & 0x1f) | (m_mcu[0].packet_type); - skydest_mcu.rxd |= ((space->machine().root_device().ioport("SYSTEM")->read()) & 0x80); + m_mcu[0].rxd |= ((ioport("SYSTEM")->read()) & 0x80); break; } case 3: { - mux_r^=0x20; - if(mux_r & 0x20) - skydest_mcu.rxd = ((space->machine().root_device().ioport("P2_1")->read()) & 0x1f) | (mux_r); + m_mcu[0].packet_type^=0x20; + if(m_mcu[0].packet_type & 0x20) + m_mcu[0].rxd = ((ioport("P2_1")->read()) & 0x1f) | (m_mcu[0].packet_type); else - skydest_mcu.rxd = ((space->machine().root_device().ioport("P2_0")->read()) & 0x1f) | (mux_r); + m_mcu[0].rxd = ((ioport("P2_0")->read()) & 0x1f) | (m_mcu[0].packet_type); - skydest_mcu.rxd |= ((space->machine().root_device().ioport("SYSTEM")->read()) & 0x80); + m_mcu[0].rxd |= ((ioport("SYSTEM")->read()) & 0x80); break; } default: - //printf("%02x\n",skydest_mcu.txd); - skydest_mcu.rxd = 0x00; + //printf("%02x\n",m_mcu[0].txd); + m_mcu[0].rxd = 0x00; } - // skydest_mcu.rxd = space->machine().rand(); + // m_mcu[0].rxd = space->machine().rand(); // break; } for(i=0,pt=0;i<8;i++) { - if(skydest_mcu.rxd & (1 << i)) + if(m_mcu[0].rxd & (1 << i)) pt++; } if((pt % 2) == 1) - skydest_mcu.rxd|=0x40; + m_mcu[0].rxd|=0x40; } - return skydest_mcu.rxd; + return m_mcu[0].rxd; } } -static WRITE8_HANDLER( skydest_8741_0_w ) +WRITE8_MEMBER( cyclemb_state::skydest_i8741_0_w ) { if(offset == 1) //command port { @@ -492,9 +493,9 @@ static WRITE8_HANDLER( skydest_8741_0_w ) switch(data) { case 0: - skydest_mcu.rxd = 0x40; - skydest_mcu.rst = 0; - skydest_mcu.state = 0; + m_mcu[0].rxd = 0x40; + m_mcu[0].rst = 0; + m_mcu[0].state = 0; break; case 1: /* @@ -507,31 +508,31 @@ static WRITE8_HANDLER( skydest_8741_0_w ) 0x01 sub NG RAM 0x00 ok */ - skydest_mcu.rxd = 0x40; - skydest_mcu.rst = 0; + m_mcu[0].rxd = 0x40; + m_mcu[0].rst = 0; break; case 2: - skydest_mcu.rxd = (space->machine().root_device().ioport("DSW2")->read() & 0x1f) << 2; - skydest_mcu.rst = 0; + m_mcu[0].rxd = (ioport("DSW2")->read() & 0x1f) << 2; + m_mcu[0].rst = 0; break; case 3: - //skydest_mcu.rxd = (space->machine().root_device().ioport("DSW1")->read() & 0x1f) << 2; - skydest_mcu.rst = 1; - skydest_mcu.txd = 0; + //m_mcu[0].rxd = (ioport("DSW1")->read() & 0x1f) << 2; + m_mcu[0].rst = 1; + m_mcu[0].txd = 0; break; } } else { //printf("%02x DATA PC=%04x\n",data,cpu_get_pc(&space->device())); - skydest_mcu.txd = data; + m_mcu[0].txd = data; - if(skydest_mcu.txd == 0x41) - skydest_mcu.state = 1; - if(skydest_mcu.txd == 0x42) - skydest_mcu.state = 2; - if(skydest_mcu.txd == 0x44) - skydest_mcu.state = 3; + if(m_mcu[0].txd == 0x41) + m_mcu[0].state = 1; + if(m_mcu[0].txd == 0x42) + m_mcu[0].state = 2; + if(m_mcu[0].txd == 0x44) + m_mcu[0].state = 3; } } @@ -550,7 +551,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( cyclemb_io, AS_IO, 8, cyclemb_state ) // ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0xc000, 0xc000) AM_WRITE(cyclemb_bankswitch_w) - AM_RANGE(0xc09e, 0xc09f) AM_READWRITE_LEGACY(skydest_8741_0_r, skydest_8741_0_w) + AM_RANGE(0xc09e, 0xc09f) AM_READWRITE(skydest_i8741_0_r, skydest_i8741_0_w) AM_RANGE(0xc0bf, 0xc0bf) AM_WRITE(cyclemb_flip_w) //flip screen ADDRESS_MAP_END @@ -558,7 +559,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( skydest_io, AS_IO, 8, cyclemb_state ) // ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0xc000, 0xc000) AM_WRITE(cyclemb_bankswitch_w) - AM_RANGE(0xc080, 0xc081) AM_READWRITE_LEGACY(skydest_8741_0_r, skydest_8741_0_w) + AM_RANGE(0xc080, 0xc081) AM_READWRITE(skydest_i8741_0_r, skydest_i8741_0_w) AM_RANGE(0xc0bf, 0xc0bf) AM_WRITE(cyclemb_flip_w) //flip screen ADDRESS_MAP_END @@ -1076,5 +1077,5 @@ static DRIVER_INIT( skydest ) state->m_dsw_pc_hack = 0x554; } -GAME( 1984, cyclemb, 0, cyclemb, cyclemb, cyclemb, ROT0, "Taito Corporation", "Cycle Maabou (Japan)", GAME_NOT_WORKING ) -GAME( 1985, skydest, 0, skydest, skydest, skydest, ROT0, "Taito Corporation", "Sky Destroyer (Japan)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_UNEMULATED_PROTECTION ) +GAME( 1984, cyclemb, 0, cyclemb, cyclemb, cyclemb, ROT0, "Taito Corporation", "Cycle Maabou (Japan)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_NOT_WORKING ) +GAME( 1985, skydest, 0, skydest, skydest, skydest, ROT0, "Taito Corporation", "Sky Destroyer (Japan)", GAME_NO_COCKTAIL | GAME_NO_SOUND )