summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Scott Stone <tafoid@gmail.com>2016-12-02 16:14:06 -0500
committer Scott Stone <tafoid@gmail.com>2016-12-02 16:14:06 -0500
commiteccd7accb470c0edffbef60ebb516128abf03fef (patch)
treedf1942ce5122dd7fab859673f4c72a7ae8414b05
parent53e9168f15193d5abf5eb9399c743aa651b940bc (diff)
parent5ce105e0960405be3592679ce4f6b916b61a7215 (diff)
Merge branch 'master' of https://github.com/mamedev/mame
-rw-r--r--.gitignore2
-rw-r--r--3rdparty/genie/.gitignore1
-rw-r--r--scripts/src/machine.lua12
-rw-r--r--scripts/target/mame/arcade.lua1
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/devices/machine/74157.cpp202
-rw-r--r--src/devices/machine/74157.h95
-rw-r--r--src/devices/sound/msm5205.cpp5
-rw-r--r--src/devices/sound/msm5205.h4
-rw-r--r--src/mame/drivers/rainbow.cpp54
-rw-r--r--src/mame/drivers/rastan.cpp24
-rw-r--r--src/mame/includes/rastan.h14
12 files changed, 375 insertions, 40 deletions
diff --git a/.gitignore b/.gitignore
index 06cd6107cc9..9cb7959411c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@
!/docs/
!/hash/
!/hlsl/
+!/ini/
!/keymaps/
!/language/
!/nl_examples/
@@ -47,4 +48,3 @@ regtests/jedutil/output
/src/devices/cpu/m68000/m68kmake.*
/src/devices/cpu/m68000/m68kmake
!/src/devices/cpu/m68000/m68kmake.cpp
-/samples
diff --git a/3rdparty/genie/.gitignore b/3rdparty/genie/.gitignore
index e089800419f..42624a0c146 100644
--- a/3rdparty/genie/.gitignore
+++ b/3rdparty/genie/.gitignore
@@ -1,3 +1,2 @@
bin
build/*/obj
-src/host/scripts.c
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua
index 99262a72e93..59a506c3324 100644
--- a/scripts/src/machine.lua
+++ b/scripts/src/machine.lua
@@ -357,6 +357,18 @@ end
---------------------------------------------------
--
+--@src/devices/machine/74157.h,MACHINES["TTL74157"] = true
+---------------------------------------------------
+
+if (MACHINES["TTL74157"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/74157.cpp",
+ MAME_DIR .. "src/devices/machine/74157.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/machine/74161.h,MACHINES["TTL74161"] = true
---------------------------------------------------
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 6476796d55e..b6e86ef7357 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -360,6 +360,7 @@ MACHINES["TTL74123"] = true
MACHINES["TTL74145"] = true
MACHINES["TTL74148"] = true
MACHINES["TTL74153"] = true
+MACHINES["TTL74157"] = true
--MACHINES["TTL74161"] = true
--MACHINES["TTL74175"] = true
MACHINES["TTL74181"] = true
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 152c04e5c79..c6121b5fe0d 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -536,6 +536,7 @@ MACHINES["TTL74123"] = true
MACHINES["TTL74145"] = true
MACHINES["TTL74148"] = true
MACHINES["TTL74153"] = true
+--MACHINES["TTL74157"] = true
MACHINES["TTL74161"] = true
MACHINES["TTL74175"] = true
MACHINES["TTL74181"] = true
diff --git a/src/devices/machine/74157.cpp b/src/devices/machine/74157.cpp
new file mode 100644
index 00000000000..d02d2f5c936
--- /dev/null
+++ b/src/devices/machine/74157.cpp
@@ -0,0 +1,202 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+/***************************************************************************
+
+ 74LS157 Quad 2-Line to 1-Line Data Selectors/Multiplexers (TTL)
+
+ Often used to help feed 8-bit ROM data into a MSM5205, and for many
+ other purposes.
+
+ 74LS158 has inverted outputs; 74LS157 is non-inverting.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "74157.h"
+
+
+//**************************************************************************
+// 74LS157 DEVICE
+//**************************************************************************
+
+const device_type LS157 = &device_creator<ls157_device>;
+
+//-------------------------------------------------
+// ls157_device - constructor
+//-------------------------------------------------
+
+ls157_device::ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, LS157, "74LS157 Data Selectors/Multiplexers", tag, owner, clock, "74ls157", __FILE__)
+ , m_out_cb(*this)
+{
+ m_a = 0;
+ m_b = 0;
+ m_select = false;
+ m_strobe = false;
+}
+
+
+//-------------------------------------------------
+// device_start - perform device-specific
+// startup
+//-------------------------------------------------
+
+void ls157_device::device_start()
+{
+ // resolve callbacks
+ m_out_cb.resolve_safe();
+
+ // register items for save state
+ save_item(NAME(m_a));
+ save_item(NAME(m_b));
+ save_item(NAME(m_select));
+ save_item(NAME(m_strobe));
+}
+
+
+//**************************************************************************
+// DATA INPUTS
+//**************************************************************************
+
+//-------------------------------------------------
+// a_w -- write nibble to A1-A4
+//-------------------------------------------------
+
+WRITE8_MEMBER(ls157_device::a_w)
+{
+ a_w(data);
+}
+
+void ls157_device::a_w(u8 data)
+{
+ m_a = data & 0xf;
+ update_output();
+}
+
+
+//-------------------------------------------------
+// b_w -- write nibble to B1-B4
+//-------------------------------------------------
+
+WRITE8_MEMBER(ls157_device::b_w)
+{
+ b_w(data);
+}
+
+void ls157_device::b_w(u8 data)
+{
+ m_b = data & 0xf;
+ update_output();
+}
+
+
+//-------------------------------------------------
+// ab_w -- write high nibble to A1-A4 and write
+// low nibble to B1-B4
+//-------------------------------------------------
+
+WRITE8_MEMBER(ls157_device::ab_w)
+{
+ ab_w(data);
+}
+
+void ls157_device::ab_w(u8 data)
+{
+ m_a = data >> 4;
+ m_b = data & 0xf;
+ update_output();
+}
+
+
+//-------------------------------------------------
+// ba_w -- write high nibble to B1-B4 and write
+// low nibble to A1-A4
+//-------------------------------------------------
+
+WRITE8_MEMBER(ls157_device::ba_w)
+{
+ ba_w(data);
+}
+
+void ls157_device::ba_w(u8 data)
+{
+ m_b = data >> 4;
+ m_a = data & 0xf;
+ update_output();
+}
+
+
+//-------------------------------------------------
+// interleave_w -- write even-numbered bits to
+// A1-A4 and write odd-numbered bits to B1-B4
+//-------------------------------------------------
+
+WRITE8_MEMBER(ls157_device::interleave_w)
+{
+ interleave_w(data);
+}
+
+void ls157_device::interleave_w(u8 data)
+{
+ m_b = ((data >> 4) & 8)
+ | ((data >> 3) & 4)
+ | ((data >> 2) & 2)
+ | ((data >> 1) & 1);
+ m_a = ((data >> 3) & 8)
+ | ((data >> 2) & 4)
+ | ((data >> 1) & 2)
+ | ((data >> 0) & 1);
+ update_output();
+}
+
+
+//**************************************************************************
+// CONTROL LINE INPUTS
+//**************************************************************************
+
+//-------------------------------------------------
+// select_w -- set select input
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(ls157_device::select_w)
+{
+ if (m_select != bool(state))
+ {
+ m_select = bool(state);
+ update_output();
+ }
+}
+
+
+//-------------------------------------------------
+// strobe_w -- set strobe input (active low)
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(ls157_device::strobe_w)
+{
+ if (m_strobe != bool(state))
+ {
+ m_strobe = bool(state);
+
+ // Clear output when strobe goes high
+ if (m_strobe)
+ m_out_cb(0);
+ else
+ m_out_cb(m_select ? m_b : m_a);
+ }
+}
+
+
+//-------------------------------------------------
+// update_output -- update output lines Y1-Y4
+// unless strobe is high
+//-------------------------------------------------
+
+void ls157_device::update_output()
+{
+ // S high, strobe low: Y1-Y4 = B1-B4
+ // S low, strobe low: Y1-Y4 = A1-A4
+ if (!m_strobe)
+ m_out_cb(m_select ? m_b : m_a);
+}
diff --git a/src/devices/machine/74157.h b/src/devices/machine/74157.h
new file mode 100644
index 00000000000..18b6f641075
--- /dev/null
+++ b/src/devices/machine/74157.h
@@ -0,0 +1,95 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+/***************************************************************************
+
+ 74LS157 Quad 2-Line to 1-Line Data Selectors/Multiplexers (TTL)
+
+****************************************************************************
+ ____ ____
+ SELECT 1 |* \_/ | 16 Vcc
+ A1 IN 2 | | 15 STROBE
+ B1 IN 3 | | 14 A4 IN
+ Y1 OUT 4 | | 13 B4 IN
+ A2 IN 5 | 74LS157 | 12 Y4 OUT
+ B2 IN 6 | | 11 A3 IN
+ Y2 OUT 7 | | 10 B3 IN
+ GND 8 |___________| 9 Y3 OUT
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef DEVICES_MACHINE_74157_H
+#define DEVICES_MACHINE_74157_H
+
+#include "emu.h"
+
+
+//**************************************************************************
+// DEVICE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_74LS157_OUT_CB(_devcb) \
+ devcb = &ls157_device::set_out_callback(*device, DEVCB_##_devcb);
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> ls157_device
+
+class ls157_device : public device_t
+{
+public:
+ // construction/destruction
+ ls157_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ // static configuration
+ template<class _Object> static devcb_base &set_out_callback(device_t &device, _Object object) { return downcast<ls157_device &>(device).m_out_cb.set_callback(object); }
+
+ // data writes
+ DECLARE_WRITE8_MEMBER(a_w);
+ void a_w(u8 data);
+ DECLARE_WRITE8_MEMBER(b_w);
+ void b_w(u8 data);
+ DECLARE_WRITE8_MEMBER(ab_w);
+ void ab_w(u8 data);
+ DECLARE_WRITE8_MEMBER(ba_w);
+ void ba_w(u8 data);
+ DECLARE_WRITE8_MEMBER(interleave_w);
+ void interleave_w(u8 data);
+
+ // line writes
+ DECLARE_WRITE_LINE_MEMBER(select_w);
+ DECLARE_WRITE_LINE_MEMBER(strobe_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+private:
+ // internal helpers
+ void update_output();
+
+ // callbacks
+ devcb_write8 m_out_cb;
+
+ // internal state
+ u8 m_a;
+ u8 m_b;
+ bool m_select;
+ bool m_strobe;
+};
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+// device type definition
+extern const device_type LS157;
+
+
+#endif
diff --git a/src/devices/sound/msm5205.cpp b/src/devices/sound/msm5205.cpp
index ee1a8400558..c49a4ddc62f 100644
--- a/src/devices/sound/msm5205.cpp
+++ b/src/devices/sound/msm5205.cpp
@@ -252,6 +252,11 @@ void msm5205_device::data_w(int data)
m_data = (data & 0x07) << 1; /* unknown */
}
+WRITE8_MEMBER(msm5205_device::data_w)
+{
+ data_w(data);
+}
+
/*
* Handle a change of the selector
*/
diff --git a/src/devices/sound/msm5205.h b/src/devices/sound/msm5205.h
index edf38744227..a7afa5bd8af 100644
--- a/src/devices/sound/msm5205.h
+++ b/src/devices/sound/msm5205.h
@@ -52,12 +52,16 @@ public:
// reset signal should keep for 2cycle of VCLK
void reset_w(int reset);
+
// adpcmata is latched after vclk_interrupt callback
void data_w(int data);
+ DECLARE_WRITE8_MEMBER(data_w);
+
// VCLK slave mode option
// if VCLK and reset or data is changed at the same time,
// call vclk_w after data_w and reset_w.
void vclk_w(int vclk);
+
// option , selected pin selector
void playmode_w(int select);
diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp
index 6fac84a96f2..22fd8db8cee 100644
--- a/src/mame/drivers/rainbow.cpp
+++ b/src/mame/drivers/rainbow.cpp
@@ -8,7 +8,7 @@
// - Registers of graphics option not directly mapped (indirect access via mode register)
// - write mask is 16 bits wide (not only 8)
// - scroll register is 8 bits wide - not 16.
-// - no "DMA SCROLL", "LINE ERASE MODE", no ZOOM hardware (factor must always be 1)
+// - no "LINE ERASE MODE", 7220 DMA lines are unused. No ZOOM hardware (factor must always be 1)
// Two modes: highres and medres mode (different bank length..?)
// - MEDRES: palette of 16 colors out of 4096. 384 x 240
@@ -34,14 +34,12 @@ SCREEN 1 vs. SCREEN 2 IN EMULATION
// The type of monochrome monitor (VR-210 A, B or C) is selectable via another DIP (coarsly simulates a phosphor color).
BUGS
-- MEDRES LOOKS CORRECT
-- HIRES-MODE SEMI BROKEN (colors OK, else untested).
-- GDC diagnostic disk bails out on 10 of 13 low level tests. Separate SCROLL CHECK crashes CPU. Readback from GDC fails?
-- VECTOR MODE SEEMS TO DISPLAY NOTHING AT ALL (16 bit access botched here in driver?)
+- MEDRES and HIRES MODE APPEAR TO BE CORRECT
+- GDC diagnostic disk bails out on 9 of 13 tests (tests 4 and 6 - 13). Scroll check doesn't...
+
Interaction of Upd7220 and Rainbow.cpp:
-- FIG directions / params appear to be odd (lines go 45 degrees up or down instead of straight dir.),
-- RDAT with MOD 2 is unimplemented. WDAT appears to set "m_bitmap_mod" wrongly ("2" means all pixels will be reset)...
-Freeware to try: MMIND (MasterMind, after BMP logo), SOLIT (Solitaire), CANON (high resolution + vectors).
+- RDAT with MOD 2 is unimplemented (other modes than 00). Effect of missing R-M-W...?
+Software to try: MMIND (MasterMind, after BMP logo), SOLIT (Solitaire), CANON (high resolution + vectors), GDC Test Disk.
UNIMPLEMENTED:
// - Rainbow 100 A palette quirks (2 bit palette... applies to certain modes only)
@@ -49,21 +47,19 @@ UNIMPLEMENTED:
UNKNOWN IMPLEMENTATION DETAILS:
// a. READBACK (hard copy programs like JOBSDUMP definitely use it. See also GDC diagnostics). VRAM_R ?
-// b. SCROLL BUFFER initialization (details) unclear. What happens when a programs does not write all 256 bytes? Value of uninitialized areas?
- Play, then retry (y) SCRAM to see the effect. Scram doesn't seem to write all (256) bytes, a GDC RESET is only executed at startup...
+// b. SCROLL BUFFER details unclear. What happens when a programs does not write all 256 bytes? Value of uninitialized areas?
+ Play, then retry (y) SCRAM to see the effect. Scram doesn't seem to write all (256) bytes, a GDC RESET is only executed ONCE.
(PAGE 48 OF PDF HAS A SUPERFICIAL DESCRIPTION OF THE SCROLL BUFFER)
-// c. UNVERIFIED XTAL / CLOCK:
-// There is a 31.188 Mhz crystal in DUELL's hand written Option Graphics circuit (not to be found in XTAL).
-// According to the datasheet, the NEC 7220 was certified for 4.0 , 5.0, and 5.5 Mhz and the 7220A for 6.0, 7.0, and 8.0 Mhz
+// c. UNVERIFIED DIVIDER (31.188 Mhz / 32) is at least close to 1 Mhz (as seen on the VT240)
-// d. UPD7220 oddities: * refresh rate much too fast at 32Mhz/4 (Upd7220 LOG says 492 Mhz?!).
-// * pixels are stretched out too wide at 384 x 240. Compare the real SCRAM screenshot online!
+// d. UPD7220 / CORE oddities:
+ * pixels are stretched out too wide at 384 x 240 (not fixable here). -KEEPASPECT?
-// e. FIXME (MAME/MESS): what happens when the left screen is at 50 Hz and the right at 60 Hz?
-// According to Haze: "if you have 2 screens running at different refresh rates one of them won't update properly
-// (the partial update system gets very confused because it expects both the screens to end at the same time
-// and if that isn't the case large parts of one screen end up not updating at all)
+// * (MAME core): what happens when the left screen is at 50 Hz and the right at 60 Hz?
+// According to Haze: "if you have 2 screens running at different refresh rates one of them won't update properly
+// (the partial update system gets very confused because it expects both the screens to end at the same time
+// and if that isn't the case large parts of one screen end up not updating at all)
*/
// license:GPL-2.0+
@@ -72,7 +68,7 @@ UNKNOWN IMPLEMENTATION DETAILS:
DEC Rainbow 100
Driver-in-progress by R. Belmont and Miodrag Milanovic.
-Keyboard fix by Cracyc (June 2016), Baud rate generator by Shattered (July 2016)
+Keyboard & GDC fixes by Cracyc (June - Nov. 2016), Baud rate generator by Shattered (July 2016)
Portions (2013 - 2016) by Karl-Ludwig Deisenhofer (Floppy, ClikClok RTC, NVRAM, DIPs, hard disk, Color Graphics).
To unlock floppy drives A-D compile with WORKAROUND_RAINBOW_B (prevents a side effect of ERROR 13).
@@ -92,8 +88,8 @@ PLEASE USE THE RIGHT SLOT - AND ALWAYS SAVE YOUR DATA BEFORE MOUNTING FOREIGN DI
You * should * also reassign SETUP (away from F3, where it sits on a LK201).
DATA LOSS POSSIBLE: when in partial emulation mode, F3 performs a hard reset!
-STATE AS OF OCTOBER 2016
-------------------------
+STATE AS OF DECE;BER 2016
+-------------------------
Driver is based entirely on the DEC-100 'B' variant (DEC-190 and DEC-100 A models are treated as clones).
While this is OK for the compatible -190, it doesn't do justice to ancient '100 A' hardware.
The public domain file RBCONVERT.ZIP documents how model 'A' differs from version B.
@@ -733,8 +729,15 @@ UPD7220_DISPLAY_PIXELS_MEMBER( rainbow_state::hgdc_display_pixels )
uint16_t plane0, plane1, plane2, plane3;
uint8_t pen;
- if(!(m_GDC_MODE_REGISTER & GDC_MODE_ENABLE_VIDEO))
+ if(m_ONBOARD_GRAPHICS_SELECTED && (m_inp13->read() != DUAL_MONITOR) )
+ {
+ for(xi=0;xi<16;xi++) // blank screen when VT102 output active (..)
+ {
+ if (bitmap.cliprect().contains(x + xi, y))
+ bitmap.pix32(y, x + xi) = 0;
+ }
return; // no output from graphics option
+ }
// ********************* GET BITMAP DATA FOR 4 PLANES ***************************************
// _READ_ BIT MAP from 2 or 4 planes (plane 0 is least, plane 3 most significant). See page 42 / 43
@@ -2432,6 +2435,8 @@ WRITE_LINE_MEMBER(rainbow_state::GDC_vblank_irq)
}
case COLOR_MONITOR:
+ if(!(m_GDC_MODE_REGISTER & GDC_MODE_ENABLE_VIDEO))
+ red = blue = 0; // Page 21 of PDF AA-AE36A (PDF) explains why
red = uint8_t( red * 17 * ( (255-video_levels[ red ] ) / 255.0f) );
green = uint8_t( mono * 17 * ( (255-video_levels[ mono ]) / 255.0f) ); // BCC-17 cable (red, mono -> green, blue)
blue = uint8_t( blue * 17 * ( (255-video_levels[ blue ] ) / 255.0f) );
@@ -3071,7 +3076,8 @@ MCFG_VT_VIDEO_RAM_CALLBACK(READ8(rainbow_state, read_video_ram_r))
MCFG_VT_VIDEO_CLEAR_VIDEO_INTERRUPT_CALLBACK(WRITELINE(rainbow_state, clear_video_interrupt))
// *************************** COLOR GRAPHICS (OPTION) **************************************
-MCFG_DEVICE_ADD("upd7220", UPD7220, 31188000 / 4) // Duell schematics shows a 31.188 Mhz clock (confirmed by RFKA; not in XTAL)
+// While the OSC frequency is confirmed, the divider is not. Refresh rate is ~60 Hz with 32.
+MCFG_DEVICE_ADD("upd7220", UPD7220, 31188000 / 32) // Duell schematics shows a 31.188 Mhz oscillator (confirmed by RFKA).
MCFG_UPD7220_VSYNC_CALLBACK(WRITELINE(rainbow_state, GDC_vblank_irq)) // "The vsync callback line needs to be below the 7220 DEVICE_ADD line."
MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map)
diff --git a/src/mame/drivers/rastan.cpp b/src/mame/drivers/rastan.cpp
index 95a2af14072..7be287f3702 100644
--- a/src/mame/drivers/rastan.cpp
+++ b/src/mame/drivers/rastan.cpp
@@ -171,16 +171,16 @@ WRITE8_MEMBER(rastan_state::rastan_bankswitch_w)
WRITE_LINE_MEMBER(rastan_state::rastan_msm5205_vck)
{
- if (m_adpcm_data != -1)
- {
- m_msm->data_w(m_adpcm_data & 0x0f);
- m_adpcm_data = -1;
- }
- else
+ if (!state)
+ return;
+
+ m_adpcm_ff = !m_adpcm_ff;
+ m_adpcm_sel->select_w(m_adpcm_ff);
+
+ if (m_adpcm_ff)
{
- m_adpcm_data = memregion("adpcm")->base()[m_adpcm_pos];
+ m_adpcm_sel->ba_w(m_adpcm_data[m_adpcm_pos]);
m_adpcm_pos = (m_adpcm_pos + 1) & 0xffff;
- m_msm->data_w(m_adpcm_data >> 4);
}
}
@@ -192,6 +192,7 @@ WRITE8_MEMBER(rastan_state::rastan_msm5205_address_w)
WRITE8_MEMBER(rastan_state::rastan_msm5205_start_w)
{
m_msm->reset_w(0);
+ m_adpcm_ff = false;
}
WRITE8_MEMBER(rastan_state::rastan_msm5205_stop_w)
@@ -344,7 +345,7 @@ void rastan_state::machine_start()
save_item(NAME(m_sprites_flipscreen));
save_item(NAME(m_adpcm_pos));
- save_item(NAME(m_adpcm_data));
+ save_item(NAME(m_adpcm_ff));
}
void rastan_state::machine_reset()
@@ -352,7 +353,7 @@ void rastan_state::machine_reset()
m_sprite_ctrl = 0;
m_sprites_flipscreen = 0;
m_adpcm_pos = 0;
- m_adpcm_data = -1;
+ m_adpcm_ff = false;
}
@@ -405,6 +406,9 @@ static MACHINE_CONFIG_START( rastan, rastan_state )
MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8 kHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
+ MCFG_DEVICE_ADD("adpcm_sel", LS157, 0)
+ MCFG_74LS157_OUT_CB(DEVWRITE8("msm", msm5205_device, data_w))
+
MCFG_DEVICE_ADD("tc0140syt", TC0140SYT, 0)
MCFG_TC0140SYT_MASTER_CPU("maincpu")
MCFG_TC0140SYT_SLAVE_CPU("audiocpu")
diff --git a/src/mame/includes/rastan.h b/src/mame/includes/rastan.h
index 393a213d56c..f66399d8b64 100644
--- a/src/mame/includes/rastan.h
+++ b/src/mame/includes/rastan.h
@@ -5,6 +5,8 @@
Rastan
*************************************************************************/
+
+#include "machine/74157.h"
#include "sound/msm5205.h"
#include "video/pc080sn.h"
#include "video/pc090oj.h"
@@ -17,21 +19,25 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_msm(*this, "msm"),
+ m_adpcm_sel(*this, "adpcm_sel"),
+ m_adpcm_data(*this, "adpcm"),
m_pc080sn(*this, "pc080sn"),
m_pc090oj(*this, "pc090oj") { }
/* video-related */
- uint16_t m_sprite_ctrl;
- uint16_t m_sprites_flipscreen;
+ u16 m_sprite_ctrl;
+ u16 m_sprites_flipscreen;
/* misc */
- int m_adpcm_pos;
- int m_adpcm_data;
+ u16 m_adpcm_pos;
+ bool m_adpcm_ff;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<msm5205_device> m_msm;
+ required_device<ls157_device> m_adpcm_sel;
+ required_region_ptr<u8> m_adpcm_data;
required_device<pc080sn_device> m_pc080sn;
required_device<pc090oj_device> m_pc090oj;
DECLARE_WRITE8_MEMBER(rastan_msm5205_address_w);