diff --git a/src/mame/drivers/seattle.cpp b/src/mame/drivers/seattle.cpp index 2506a5416c3..8369ca72e2a 100644 --- a/src/mame/drivers/seattle.cpp +++ b/src/mame/drivers/seattle.cpp @@ -332,6 +332,7 @@ public: DECLARE_WRITE32_MEMBER(output_w); DECLARE_READ32_MEMBER(widget_r); DECLARE_WRITE32_MEMBER(widget_w); + DECLARE_WRITE32_MEMBER(wheel_board_w); DECLARE_WRITE_LINE_MEMBER(ide_interrupt); @@ -451,6 +452,35 @@ WRITE_LINE_MEMBER(seattle_state::ioasic_irq) m_maincpu->set_input_line(IOASIC_IRQ_NUM, state); } +WRITE32_MEMBER(seattle_state::wheel_board_w) +{ + //logerror("wheel_board_w: data = %08x\n", data); + /* two writes in pairs. flag off first, on second. arg remains the same. */ + bool flag = (data & (1 << 11)); + uint8_t op = (data >> 8) & 0x7; + uint8_t arg = data & 0xff; + + if (flag) + { + switch (op) + { + case 0x0: + machine().output().set_value("wheel", arg); // target wheel angle. signed byte. + break; + + case 0x4: + for (uint8_t bit = 0; bit < 8; bit++) + machine().output().set_lamp_value(bit, (arg >> bit) & 0x1); + break; + + case 0x5: + for (uint8_t bit = 0; bit < 8; bit++) + machine().output().set_lamp_value(8 + bit, (arg >> bit) & 0x1); + break; + } + } +} + /************************************* * * Configurable interrupts @@ -1870,6 +1900,7 @@ static MACHINE_CONFIG_DERIVED( sfrush, flagstaff ) MCFG_MIDWAY_IOASIC_UPPER(315/* no alternates */) MCFG_MIDWAY_IOASIC_YEAR_OFFS(100) MCFG_MIDWAY_IOASIC_IRQ_CALLBACK(WRITELINE(seattle_state, ioasic_irq)) + MCFG_MIDWAY_IOASIC_AUX_OUT_CB(WRITE32(seattle_state, wheel_board_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( sfrushrk, flagstaff ) @@ -1882,6 +1913,7 @@ static MACHINE_CONFIG_DERIVED( sfrushrk, flagstaff ) MCFG_MIDWAY_IOASIC_UPPER(331/* unknown */) MCFG_MIDWAY_IOASIC_YEAR_OFFS(100) MCFG_MIDWAY_IOASIC_IRQ_CALLBACK(WRITELINE(seattle_state, ioasic_irq)) + MCFG_MIDWAY_IOASIC_AUX_OUT_CB(WRITE32(seattle_state, wheel_board_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( sfrushrkw, sfrushrk ) diff --git a/src/mame/drivers/vegas.cpp b/src/mame/drivers/vegas.cpp index bfa066e95b0..6bb868ee6ee 100644 --- a/src/mame/drivers/vegas.cpp +++ b/src/mame/drivers/vegas.cpp @@ -290,6 +290,7 @@ #include "video/voodoo_pci.h" #include "screen.h" +#include "sf2049.lh" /************************************* * @@ -974,8 +975,27 @@ WRITE32_MEMBER(vegas_state::wheel_board_w) uint8_t op = (data >> 8) & 0x3; uint8_t arg = data & 0xff; - if (valid && flag && op == 2) - m_keypad_select = arg; + if (valid && flag) + { + switch (op) + { + case 0x0: + machine().output().set_value("wheel", arg); // target wheel angle. signed byte. + break; + + case 0x1: + for (uint8_t bit = 0; bit < 8; bit++) + machine().output().set_lamp_value(bit, (arg >> bit) & 0x1); + + /* leader lamp bit is included in every write, for some reason. */ + machine().output().set_lamp_value(8, (data >> 12) & 0x1); + break; + + case 0x2: + m_keypad_select = arg; + break; + } + } } CUSTOM_INPUT_MEMBER(vegas_state::keypad_r) @@ -2186,9 +2206,9 @@ GAME( 2000, nbagold , 0, nbagold, nbashowt, vegas_state, nbanfl, ROT /* Durango + Denver SIO + Voodoo 3 */ -GAME( 1998, sf2049, 0, sf2049, sf2049, vegas_state, sf2049, ROT0, "Atari Games", "San Francisco Rush 2049", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1998, sf2049se, sf2049, sf2049se, sf2049se, vegas_state, sf2049se, ROT0, "Atari Games", "San Francisco Rush 2049: Special Edition", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1998, sf2049te, sf2049, sf2049te, sf2049, vegas_state, sf2049te, ROT0, "Atari Games", "San Francisco Rush 2049: Tournament Edition", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE) +GAMEL( 1998, sf2049, 0, sf2049, sf2049, vegas_state, sf2049, ROT0, "Atari Games", "San Francisco Rush 2049", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_sf2049 ) +GAMEL( 1998, sf2049se, sf2049, sf2049se, sf2049se, vegas_state, sf2049se, ROT0, "Atari Games", "San Francisco Rush 2049: Special Edition", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_sf2049 ) +GAMEL( 1998, sf2049te, sf2049, sf2049te, sf2049, vegas_state, sf2049te, ROT0, "Atari Games", "San Francisco Rush 2049: Tournament Edition", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_sf2049 ) /* Durango + Vegas SIO + Voodoo 3 */ GAME( 2000, cartfury, 0, cartfury, cartfury, vegas_state, cartfury, ROT0, "Midway Games", "Cart Fury", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/layout/sf2049.lay b/src/mame/layout/sf2049.lay new file mode 100644 index 00000000000..96c54bad22e --- /dev/null +++ b/src/mame/layout/sf2049.lay @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/machine/midwayic.cpp b/src/mame/machine/midwayic.cpp index 356c666525b..6cd2ab02612 100644 --- a/src/mame/machine/midwayic.cpp +++ b/src/mame/machine/midwayic.cpp @@ -932,52 +932,6 @@ void midway_ioasic_device::fifo_full_w(uint16_t data) } -/* need to check if device callback is required instead of hardcode here */ -void midway_ioasic_device::output_w(uint32_t data) -{ - if (!m_aux_output_cb.isnull()) { - // This is P15 on vegas boards - m_aux_output_cb(data); - } - else { - /* two writes in pairs. flag off first, on second. arg remains the same. */ - uint8_t flag = (data >> 8) & 0x8; - uint8_t op = (data >> 8) & 0x7; - uint8_t arg = data & 0xFF; - - switch (op) - { - default: - logerror("Unknown output (%02X) = %02X\n", flag | op, arg); - break; - - case 0x0: - if (flag) - { - machine().output().set_value("wheel", arg); // wheel motor delta. signed byte. - } - break; - - case 0x4: - if (flag) - { - for (uint8_t bit = 0; bit < 8; bit++) - machine().output().set_lamp_value(bit, (arg >> bit) & 0x1); - } - break; - - case 0x5: - if (flag) - { - for (uint8_t bit = 0; bit < 8; bit++) - machine().output().set_lamp_value(8 + bit, (arg >> bit) & 0x1); - } - break; - } - } -} - - /************************************* * @@ -1216,7 +1170,9 @@ WRITE32_MEMBER( midway_ioasic_device::write ) break; case IOASIC_PICIN: - output_w(data); + /* This is P15 on vegas boards */ + if (!m_aux_output_cb.isnull()) + m_aux_output_cb(data); break; case IOASIC_INTCTL: diff --git a/src/mame/machine/midwayic.h b/src/mame/machine/midwayic.h index f8a59c2506a..6019bd47b21 100644 --- a/src/mame/machine/midwayic.h +++ b/src/mame/machine/midwayic.h @@ -165,7 +165,6 @@ public: void set_shuffle_state(int state); void fifo_w(uint16_t data); void fifo_full_w(uint16_t data); - void output_w(uint32_t data); DECLARE_WRITE_LINE_MEMBER(fifo_reset_w); DECLARE_READ16_MEMBER(fifo_r);