summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2017-07-22 19:34:33 -0400
committer GitHub <noreply@github.com>2017-07-22 19:34:33 -0400
commit260c25c409f54a32ec062d2021a62ada10e801b1 (patch)
treeb534f1956c1e2e39c2421988a774114175fc8422 /src
parentb8864583f680fd8ede4da11b318beca978f66500 (diff)
parent9bdbb3671ea21f6d72365a4cfdde016590642e8a (diff)
Merge pull request #2509 from Risugami/master
Improved wheel board on flagstaff and vegas
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/seattle.cpp32
-rw-r--r--src/mame/drivers/vegas.cpp30
-rw-r--r--src/mame/layout/sf2049.lay136
-rw-r--r--src/mame/machine/midwayic.cpp50
-rw-r--r--src/mame/machine/midwayic.h1
5 files changed, 196 insertions, 53 deletions
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 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+ <element name="abort" defstate="0">
+ <disk state="0">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.443" green="0.086" blue="0.008" />
+ </disk>
+ <disk state="1">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.882" green="0.208" blue="0.024" />
+ </disk>
+ <text string="ABORT" state="0">
+ <color red="0.388" green="0.353" blue="0.357" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ <text string="ABORT" state="1">
+ <color red="1.000" green="0.843" blue="0.824" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ </element>
+
+ <element name="music" defstate="0">
+ <disk state="0">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.408" green="0.306" blue="0.000" />
+ </disk>
+ <disk state="1">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.855" green="0.643" blue="0.000" />
+ </disk>
+ <text string="MUSIC">
+ <color red="0.000" green="0.000" blue="0.000" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ </element>
+
+ <element name="view1" defstate="0">
+ <disk state="0">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.004" green="0.161" blue="0.447" />
+ </disk>
+ <disk state="1">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.027" green="0.278" blue="0.886" />
+ </disk>
+ <text string="VIEW 1" state="0">
+ <color red="0.294" green="0.353" blue="0.388" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ <text string="VIEW 1" state="1">
+ <color red="0.824" green="0.886" blue="1.000" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ </element>
+
+ <element name="view2" defstate="0">
+ <disk state="0">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.004" green="0.161" blue="0.447" />
+ </disk>
+ <disk state="1">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.027" green="0.278" blue="0.886" />
+ </disk>
+ <text string="VIEW 2" state="0">
+ <color red="0.294" green="0.353" blue="0.388" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ <text string="VIEW 2" state="1">
+ <color red="0.824" green="0.886" blue="1.000" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ </element>
+
+ <element name="view3" defstate="0">
+ <disk state="0">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.004" green="0.161" blue="0.447" />
+ </disk>
+ <disk state="1">
+ <bounds x="0.0" y="0.0" width="2.444444444" height="1.0" />
+ <color red="0.027" green="0.278" blue="0.886" />
+ </disk>
+ <text string="VIEW 3" state="0">
+ <color red="0.294" green="0.353" blue="0.388" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ <text string="VIEW 3" state="1">
+ <color red="0.824" green="0.886" blue="1.000" />
+ <bounds x="0.222222222" y="0.222222222" width="2" height="0.555555556" />
+ </text>
+ </element>
+
+ <element name="leader" defstate="0">
+ <rect>
+ <bounds x="0" y="0" width="3.0" height="1.75" />
+ <color red="0.05" green="0.05" blue="0.05" />
+ </rect>
+ <text string="LEADER" state="0">
+ <color red="0.1" green="0.1" blue="0.0" />
+ <bounds x="0.5" y="0.3" width="2.0" height="1.15" />
+ </text>
+ <text string="LEADER" state="1">
+ <color red="1.0" green="1.0" blue="0.0" />
+ <bounds x="0.5" y="0.3" width="2.0" height="1.15" />
+ </text>
+ </element>
+
+ <view name="Dashboard">
+ <bounds left="0" top="0" right="4" bottom="3.472" />
+
+ <screen index="0">
+ <bounds left="0" top="0" right="4" bottom="3" />
+ </screen>
+
+ <bezel name="lamp0" element="abort" inputtag="SYSTEM" inputmask="0x04">
+ <bounds x="3.696222222" y="3.323888889" width="0.268666667" height="0.134333333" />
+ </bezel>
+ <bezel name="lamp5" element="music" inputtag="IN1" inputmask="0x08">
+ <bounds x="0.512222222" y="3.323888889" width="0.268666667" height="0.134333333" />
+ </bezel>
+ <bezel name="lamp3" element="view3" inputtag="IN1" inputmask="0x04">
+ <bounds x="0.386666667" y="3.041388889" width="0.268666667" height="0.134333333" />
+ </bezel>
+ <bezel name="lamp2" element="view2" inputtag="IN1" inputmask="0x02">
+ <bounds x="0.160666667" y="3.160666667" width="0.268666667" height="0.134333333" />
+ </bezel>
+ <bezel name="lamp1" element="view1" inputtag="IN1" inputmask="0x01">
+ <bounds x="0.035111111" y="3.323888889" width="0.268666667" height="0.134333333" />
+ </bezel>
+
+ <bezel name="lamp8" element="leader">
+ <bounds x="1.75" y="3.1" width="0.5" height="0.23" />
+ </bezel>
+ </view>
+</mamelayout>
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);