summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-03-03 20:25:46 -0500
committer Vas Crabb <cuavas@users.noreply.github.com>2017-07-25 11:21:43 +1000
commitdab683e78f0bed3f786a9206d905027c1ffba9a6 (patch)
tree8db4a08166df6755f530c137ad1497e77a53cd01 /src/mame
parent9488a7703ae0e9bef19043bc3b1d5de2c65d2246 (diff)
New 74LS259/9334/CD4099 devices
These humble 16-pin logic devices were commonly used in 8-bit arcade games to control coin counters/lockouts, IRQ flipflops, graphics banking, slave CPU reset lines, discrete audio triggers, screen flipping, serial EEPROMs and much else. Over 100 drivers and a few bus devices have been updated to use the new implementation, and a great deal of research has gone into documenting the physical location of these devices on actual PCBs in the source. Write handlers have been provided for both orthodox and somewhat less conventional memory mappings. Incidental to this update, coin counters and/or lockouts have been added to Atari System 1 games, Basketball, Gauntlet, Gyruss, Hana Yayoi, Hole Land, Jr. Pac-Man, Mahjong Sisters, Pooyan, Roc'n Rope, Squash, Thunder Hoop, Time Limit, Time Pilot '84 and many others. This also cleans up coin counter behavior in Sauro and Rally Bike. (nw) The purpose of committing this change, which has been several months in the making, early in the 0.189GIT cycle will be to allow time for fixing potential regressions; I've fixed a number of drivers that lost sound from this for various reasons (hnayayoi.cpp having missing or garbage ADPCM was particularly painful, since the three games in that driver all work slightly differently), but I can't test all affected drivers exhaustively. @Tafoid, don't bother running automated screen capture comparison tests on this, as many drivers are now expected to have the screen flipped for the first few seconds after reset.
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/audio/asteroid.cpp33
-rw-r--r--src/mame/audio/avalnche.cpp45
-rw-r--r--src/mame/audio/bsktball.cpp5
-rw-r--r--src/mame/audio/canyon.cpp12
-rw-r--r--src/mame/audio/cclimber.cpp15
-rw-r--r--src/mame/audio/cclimber.h7
-rw-r--r--src/mame/audio/cinemat.cpp520
-rw-r--r--src/mame/audio/copsnrob.cpp77
-rw-r--r--src/mame/audio/jedi.cpp4
-rw-r--r--src/mame/audio/sprint8.cpp58
-rw-r--r--src/mame/audio/subs.cpp20
-rw-r--r--src/mame/audio/timeplt.cpp13
-rw-r--r--src/mame/audio/timeplt.h7
-rw-r--r--src/mame/drivers/ambush.cpp65
-rw-r--r--src/mame/drivers/apple2.cpp139
-rw-r--r--src/mame/drivers/asteroid.cpp43
-rw-r--r--src/mame/drivers/atarisy1.cpp41
-rw-r--r--src/mame/drivers/avalnche.cpp47
-rw-r--r--src/mame/drivers/bagman.cpp147
-rw-r--r--src/mame/drivers/bsktball.cpp18
-rw-r--r--src/mame/drivers/canyon.cpp27
-rw-r--r--src/mame/drivers/cclimber.cpp73
-rw-r--r--src/mame/drivers/centiped.cpp134
-rw-r--r--src/mame/drivers/champbas.cpp79
-rw-r--r--src/mame/drivers/changela.cpp38
-rw-r--r--src/mame/drivers/cinemat.cpp39
-rw-r--r--src/mame/drivers/cloak.cpp34
-rw-r--r--src/mame/drivers/cloud9.cpp33
-rw-r--r--src/mame/drivers/clshroad.cpp32
-rw-r--r--src/mame/drivers/copsnrob.cpp11
-rw-r--r--src/mame/drivers/cortex.cpp15
-rw-r--r--src/mame/drivers/crgolf.cpp56
-rw-r--r--src/mame/drivers/ddenlovr.cpp11
-rw-r--r--src/mame/drivers/destroyr.cpp54
-rw-r--r--src/mame/drivers/dragrace.cpp122
-rw-r--r--src/mame/drivers/dynax.cpp284
-rw-r--r--src/mame/drivers/equites.cpp41
-rw-r--r--src/mame/drivers/fastfred.cpp54
-rw-r--r--src/mame/drivers/firefox.cpp120
-rw-r--r--src/mame/drivers/flyball.cpp40
-rw-r--r--src/mame/drivers/freekick.cpp96
-rw-r--r--src/mame/drivers/funkybee.cpp23
-rw-r--r--src/mame/drivers/gaelco.cpp55
-rw-r--r--src/mame/drivers/gaelco2.cpp46
-rw-r--r--src/mame/drivers/gaelco3d.cpp212
-rw-r--r--src/mame/drivers/galaga.cpp187
-rw-r--r--src/mame/drivers/gauntlet.cpp56
-rw-r--r--src/mame/drivers/gladiatr.cpp28
-rw-r--r--src/mame/drivers/glass.cpp43
-rw-r--r--src/mame/drivers/gng.cpp30
-rw-r--r--src/mame/drivers/gomoku.cpp16
-rw-r--r--src/mame/drivers/gridlee.cpp37
-rw-r--r--src/mame/drivers/gyruss.cpp24
-rw-r--r--src/mame/drivers/hnayayoi.cpp52
-rw-r--r--src/mame/drivers/holeland.cpp20
-rw-r--r--src/mame/drivers/jedi.cpp27
-rw-r--r--src/mame/drivers/joctronic.cpp29
-rw-r--r--src/mame/drivers/jrpacman.cpp34
-rw-r--r--src/mame/drivers/junofrst.cpp38
-rw-r--r--src/mame/drivers/kchamp.cpp35
-rw-r--r--src/mame/drivers/kyugo.cpp23
-rw-r--r--src/mame/drivers/ladybug.cpp6
-rw-r--r--src/mame/drivers/liberatr.cpp52
-rw-r--r--src/mame/drivers/lisa.cpp10
-rw-r--r--src/mame/drivers/looping.cpp123
-rw-r--r--src/mame/drivers/m63.cpp74
-rw-r--r--src/mame/drivers/mappy.cpp219
-rw-r--r--src/mame/drivers/marineb.cpp33
-rw-r--r--src/mame/drivers/mastboy.cpp65
-rw-r--r--src/mame/drivers/megazone.cpp25
-rw-r--r--src/mame/drivers/mermaid.cpp81
-rw-r--r--src/mame/drivers/mjsister.cpp133
-rw-r--r--src/mame/drivers/mouser.cpp20
-rw-r--r--src/mame/drivers/nemesis.cpp151
-rw-r--r--src/mame/drivers/orbit.cpp54
-rw-r--r--src/mame/drivers/pacman.cpp214
-rw-r--r--src/mame/drivers/pandoras.cpp75
-rw-r--r--src/mame/drivers/pengo.cpp57
-rw-r--r--src/mame/drivers/playch10.cpp37
-rw-r--r--src/mame/drivers/polepos.cpp97
-rw-r--r--src/mame/drivers/pooyan.cpp37
-rw-r--r--src/mame/drivers/prof80.cpp203
-rw-r--r--src/mame/drivers/punchout.cpp44
-rw-r--r--src/mame/drivers/rallyx.cpp143
-rw-r--r--src/mame/drivers/retofinv.cpp48
-rw-r--r--src/mame/drivers/rocnrope.cpp30
-rw-r--r--src/mame/drivers/rollrace.cpp30
-rw-r--r--src/mame/drivers/sauro.cpp72
-rw-r--r--src/mame/drivers/sbrkout.cpp77
-rw-r--r--src/mame/drivers/shangkid.cpp68
-rw-r--r--src/mame/drivers/shougi.cpp65
-rw-r--r--src/mame/drivers/skyarmy.cpp39
-rw-r--r--src/mame/drivers/skydiver.cpp63
-rw-r--r--src/mame/drivers/slapfght.cpp91
-rw-r--r--src/mame/drivers/sonson.cpp41
-rw-r--r--src/mame/drivers/splash.cpp53
-rw-r--r--src/mame/drivers/sprint2.cpp60
-rw-r--r--src/mame/drivers/sprint4.cpp49
-rw-r--r--src/mame/drivers/sprint8.cpp38
-rw-r--r--src/mame/drivers/starshp1.cpp129
-rw-r--r--src/mame/drivers/starwars.cpp26
-rw-r--r--src/mame/drivers/subs.cpp23
-rw-r--r--src/mame/drivers/tankbatt.cpp70
-rw-r--r--src/mame/drivers/targeth.cpp22
-rw-r--r--src/mame/drivers/thepit.cpp73
-rw-r--r--src/mame/drivers/thoop2.cpp56
-rw-r--r--src/mame/drivers/timelimt.cpp37
-rw-r--r--src/mame/drivers/timeplt.cpp49
-rw-r--r--src/mame/drivers/toaplan1.cpp9
-rw-r--r--src/mame/drivers/tomcat.cpp149
-rw-r--r--src/mame/drivers/tp84.cpp63
-rw-r--r--src/mame/drivers/triplhnt.cpp90
-rw-r--r--src/mame/drivers/tsamurai.cpp56
-rw-r--r--src/mame/drivers/tubep.cpp68
-rw-r--r--src/mame/drivers/tutankhm.cpp43
-rw-r--r--src/mame/drivers/ultratnk.cpp34
-rw-r--r--src/mame/drivers/vastar.cpp27
-rw-r--r--src/mame/drivers/warpwarp.cpp142
-rw-r--r--src/mame/drivers/wiping.cpp26
-rw-r--r--src/mame/drivers/wrally.cpp16
-rw-r--r--src/mame/drivers/xorworld.cpp32
-rw-r--r--src/mame/includes/asteroid.h32
-rw-r--r--src/mame/includes/atarisy1.h15
-rw-r--r--src/mame/includes/avalnche.h21
-rw-r--r--src/mame/includes/bagman.h23
-rw-r--r--src/mame/includes/bosco.h3
-rw-r--r--src/mame/includes/bsktball.h11
-rw-r--r--src/mame/includes/canyon.h9
-rw-r--r--src/mame/includes/cclimber.h26
-rw-r--r--src/mame/includes/centiped.h17
-rw-r--r--src/mame/includes/champbas.h12
-rw-r--r--src/mame/includes/changela.h9
-rw-r--r--src/mame/includes/cinemat.h106
-rw-r--r--src/mame/includes/cloak.h8
-rw-r--r--src/mame/includes/cloud9.h13
-rw-r--r--src/mame/includes/clshroad.h7
-rw-r--r--src/mame/includes/copsnrob.h5
-rw-r--r--src/mame/includes/crgolf.h18
-rw-r--r--src/mame/includes/digdug.h6
-rw-r--r--src/mame/includes/dragrace.h11
-rw-r--r--src/mame/includes/dynax.h46
-rw-r--r--src/mame/includes/equites.h15
-rw-r--r--src/mame/includes/fastfred.h18
-rw-r--r--src/mame/includes/freekick.h13
-rw-r--r--src/mame/includes/funkybee.h8
-rw-r--r--src/mame/includes/gaelco.h9
-rw-r--r--src/mame/includes/gaelco2.h20
-rw-r--r--src/mame/includes/gaelco3d.h30
-rw-r--r--src/mame/includes/galaga.h16
-rw-r--r--src/mame/includes/gauntlet.h8
-rw-r--r--src/mame/includes/gladiatr.h6
-rw-r--r--src/mame/includes/glass.h9
-rw-r--r--src/mame/includes/gng.h9
-rw-r--r--src/mame/includes/gomoku.h8
-rw-r--r--src/mame/includes/gridlee.h14
-rw-r--r--src/mame/includes/gyruss.h8
-rw-r--r--src/mame/includes/hnayayoi.h8
-rw-r--r--src/mame/includes/holeland.h10
-rw-r--r--src/mame/includes/jedi.h13
-rw-r--r--src/mame/includes/kchamp.h9
-rw-r--r--src/mame/includes/kyugo.h5
-rw-r--r--src/mame/includes/ladybug.h2
-rw-r--r--src/mame/includes/liberatr.h21
-rw-r--r--src/mame/includes/lisa.h11
-rw-r--r--src/mame/includes/mappy.h11
-rw-r--r--src/mame/includes/marineb.h8
-rw-r--r--src/mame/includes/megazone.h7
-rw-r--r--src/mame/includes/mermaid.h27
-rw-r--r--src/mame/includes/mouser.h6
-rw-r--r--src/mame/includes/nemesis.h17
-rw-r--r--src/mame/includes/orbit.h11
-rw-r--r--src/mame/includes/pacman.h26
-rw-r--r--src/mame/includes/pandoras.h7
-rw-r--r--src/mame/includes/playch10.h20
-rw-r--r--src/mame/includes/polepos.h10
-rw-r--r--src/mame/includes/pooyan.h7
-rw-r--r--src/mame/includes/prof80.h26
-rw-r--r--src/mame/includes/punchout.h5
-rw-r--r--src/mame/includes/rallyx.h15
-rw-r--r--src/mame/includes/retofinv.h9
-rw-r--r--src/mame/includes/rocnrope.h6
-rw-r--r--src/mame/includes/rollrace.h13
-rw-r--r--src/mame/includes/sauro.h16
-rw-r--r--src/mame/includes/shangkid.h6
-rw-r--r--src/mame/includes/skydiver.h29
-rw-r--r--src/mame/includes/slapfght.h9
-rw-r--r--src/mame/includes/sonson.h13
-rw-r--r--src/mame/includes/splash.h9
-rw-r--r--src/mame/includes/sprint2.h16
-rw-r--r--src/mame/includes/sprint4.h5
-rw-r--r--src/mame/includes/sprint8.h15
-rw-r--r--src/mame/includes/starshp1.h11
-rw-r--r--src/mame/includes/starwars.h9
-rw-r--r--src/mame/includes/subs.h12
-rw-r--r--src/mame/includes/tankbatt.h17
-rw-r--r--src/mame/includes/targeth.h9
-rw-r--r--src/mame/includes/thepit.h11
-rw-r--r--src/mame/includes/thoop2.h13
-rw-r--r--src/mame/includes/timelimt.h6
-rw-r--r--src/mame/includes/timeplt.h13
-rw-r--r--src/mame/includes/toaplan1.h6
-rw-r--r--src/mame/includes/tp84.h18
-rw-r--r--src/mame/includes/triplhnt.h13
-rw-r--r--src/mame/includes/tsamurai.h11
-rw-r--r--src/mame/includes/tubep.h9
-rw-r--r--src/mame/includes/tutankhm.h20
-rw-r--r--src/mame/includes/ultratnk.h8
-rw-r--r--src/mame/includes/vastar.h5
-rw-r--r--src/mame/includes/warpwarp.h9
-rw-r--r--src/mame/includes/wiping.h7
-rw-r--r--src/mame/includes/wrally.h13
-rw-r--r--src/mame/includes/xorworld.h3
-rw-r--r--src/mame/machine/asteroid.cpp10
-rw-r--r--src/mame/machine/bsktball.cpp22
-rw-r--r--src/mame/machine/gaelco2.cpp93
-rw-r--r--src/mame/machine/gaelco3d.cpp20
-rw-r--r--src/mame/machine/gaelco3d.h14
-rw-r--r--src/mame/machine/lisa.cpp104
-rw-r--r--src/mame/machine/playch10.cpp41
-rw-r--r--src/mame/machine/starwars.cpp61
-rw-r--r--src/mame/machine/subs.cpp8
-rw-r--r--src/mame/machine/toaplan1.cpp32
-rw-r--r--src/mame/machine/wrally.cpp27
-rw-r--r--src/mame/video/atarisy1.cpp7
-rw-r--r--src/mame/video/bagman.cpp16
-rw-r--r--src/mame/video/bosco.cpp4
-rw-r--r--src/mame/video/cclimber.cpp74
-rw-r--r--src/mame/video/centiped.cpp4
-rw-r--r--src/mame/video/champbas.cpp19
-rw-r--r--src/mame/video/cinemat.cpp17
-rw-r--r--src/mame/video/cloak.cpp4
-rw-r--r--src/mame/video/cloud9.cpp27
-rw-r--r--src/mame/video/clshroad.cpp4
-rw-r--r--src/mame/video/crgolf.cpp8
-rw-r--r--src/mame/video/digdug.cpp74
-rw-r--r--src/mame/video/dynax.cpp73
-rw-r--r--src/mame/video/equites.cpp22
-rw-r--r--src/mame/video/fastfred.cpp40
-rw-r--r--src/mame/video/funkybee.cpp13
-rw-r--r--src/mame/video/galaga.cpp16
-rw-r--r--src/mame/video/gladiatr.cpp11
-rw-r--r--src/mame/video/gng.cpp4
-rw-r--r--src/mame/video/gomoku.cpp8
-rw-r--r--src/mame/video/gridlee.cpp4
-rw-r--r--src/mame/video/gyruss.cpp10
-rw-r--r--src/mame/video/holeland.cpp19
-rw-r--r--src/mame/video/jedi.cpp19
-rw-r--r--src/mame/video/kchamp.cpp4
-rw-r--r--src/mame/video/kyugo.cpp4
-rw-r--r--src/mame/video/ladybug.cpp6
-rw-r--r--src/mame/video/liberatr.cpp9
-rw-r--r--src/mame/video/marineb.cpp8
-rw-r--r--src/mame/video/megazone.cpp4
-rw-r--r--src/mame/video/mermaid.cpp16
-rw-r--r--src/mame/video/mouser.cpp8
-rw-r--r--src/mame/video/nemesis.cpp38
-rw-r--r--src/mame/video/pacman.cpp50
-rw-r--r--src/mame/video/pandoras.cpp4
-rw-r--r--src/mame/video/pooyan.cpp4
-rw-r--r--src/mame/video/rallyx.cpp4
-rw-r--r--src/mame/video/rocnrope.cpp8
-rw-r--r--src/mame/video/rollrace.cpp19
-rw-r--r--src/mame/video/sauro.cpp16
-rw-r--r--src/mame/video/skydiver.cpp95
-rw-r--r--src/mame/video/slapfght.cpp8
-rw-r--r--src/mame/video/sonson.cpp4
-rw-r--r--src/mame/video/sprint8.cpp2
-rw-r--r--src/mame/video/subs.cpp8
-rw-r--r--src/mame/video/thepit.cpp25
-rw-r--r--src/mame/video/timeplt.cpp8
-rw-r--r--src/mame/video/tp84.cpp4
-rw-r--r--src/mame/video/triplhnt.cpp1
-rw-r--r--src/mame/video/tsamurai.cpp18
-rw-r--r--src/mame/video/tubep.cpp16
-rw-r--r--src/mame/video/tutankhm.cpp10
-rw-r--r--src/mame/video/wiping.cpp4
276 files changed, 5508 insertions, 4807 deletions
diff --git a/src/mame/audio/asteroid.cpp b/src/mame/audio/asteroid.cpp
index 43900205d88..dcf5cde8b7a 100644
--- a/src/mame/audio/asteroid.cpp
+++ b/src/mame/audio/asteroid.cpp
@@ -48,28 +48,6 @@ static const discrete_555_cc_desc asteroid_thump_555cc =
0.8 // VBE 2N3906 (Si)
};
-#define ASTEROID_SAUCER_SND_EN NODE_01
-#define ASTEROID_SAUCER_FIRE_EN NODE_02
-#define ASTEROID_SAUCER_SEL NODE_03
-#define ASTEROID_THRUST_EN NODE_04
-#define ASTEROID_SHIP_FIRE_EN NODE_05
-#define ASTEROID_LIFE_EN NODE_06
-#define ASTEROID_NOISE_RESET NODE_07
-
-#define ASTEROID_THUMP_EN NODE_08
-#define ASTEROID_THUMP_DATA NODE_09
-#define ASTEROID_EXPLODE_DATA NODE_10
-#define ASTEROID_EXPLODE_PITCH NODE_11
-
-#define ASTEROID_NOISE NODE_20
-#define ASTEROID_THUMP_SND NODE_21
-#define ASTEROID_SAUCER_SND NODE_22
-#define ASTEROID_LIFE_SND NODE_23
-#define ASTEROID_SAUCER_FIRE_SND NODE_24
-#define ASTEROID_SHIP_FIRE_SND NODE_25
-#define ASTEROID_EXPLODE_SND NODE_26
-#define ASTEROID_THRUST_SND NODE_27
-
DISCRETE_SOUND_START(asteroid)
/************************************************/
/* Asteroid Effects Relataive Gain Table */
@@ -308,17 +286,6 @@ WRITE8_MEMBER(asteroid_state::asteroid_thump_w)
m_discrete->write(space, ASTEROID_THUMP_DATA, data & 0x0f);
}
-WRITE8_MEMBER(asteroid_state::asteroid_sounds_w)
-{
- m_discrete->write(space, NODE_RELATIVE(ASTEROID_SAUCER_SND_EN, offset), data & 0x80);
-}
-
-WRITE8_MEMBER(asteroid_state::astdelux_sounds_w)
-{
- /* Only ever activates the thrusters in Astdelux */
- m_discrete->write(space, ASTEROID_THRUST_EN, data & 0x80);
-}
-
WRITE8_MEMBER(asteroid_state::asteroid_noise_reset_w)
{
m_discrete->write(space, ASTEROID_NOISE_RESET, 0);
diff --git a/src/mame/audio/avalnche.cpp b/src/mame/audio/avalnche.cpp
index c4d6865b5ff..8040ea4c734 100644
--- a/src/mame/audio/avalnche.cpp
+++ b/src/mame/audio/avalnche.cpp
@@ -7,15 +7,6 @@
*************************************************************************/
#include "emu.h"
#include "includes/avalnche.h"
-#include "sound/discrete.h"
-
-
-/* Avalanche Discrete Sound Input Nodes */
-#define AVALNCHE_AUD0_EN NODE_01
-#define AVALNCHE_AUD1_EN NODE_02
-#define AVALNCHE_AUD2_EN NODE_03
-#define AVALNCHE_SOUNDLVL_DATA NODE_04
-#define AVALNCHE_ATTRACT_EN NODE_05
/***************************************************************************
@@ -27,32 +18,6 @@ WRITE8_MEMBER(avalnche_state::avalnche_noise_amplitude_w)
m_discrete->write(space, AVALNCHE_SOUNDLVL_DATA, data & 0x3f);
}
-WRITE8_MEMBER(avalnche_state::avalnche_attract_enable_w)
-{
- m_discrete->write(space, AVALNCHE_ATTRACT_EN, data & 0x01);
-}
-
-WRITE8_MEMBER(avalnche_state::avalnche_audio_w)
-{
- int bit = data & 0x01;
-
- switch (offset & 0x07)
- {
- case 0x00: /* AUD0 */
- m_discrete->write(space, AVALNCHE_AUD0_EN, bit);
- break;
-
- case 0x01: /* AUD1 */
- m_discrete->write(space, AVALNCHE_AUD1_EN, bit);
- break;
-
- case 0x02: /* AUD2 */
- default:
- m_discrete->write(space, AVALNCHE_AUD2_EN, bit);
- break;
- }
-}
-
/***************************************************************************
Avalanche sound system analog emulation
@@ -130,8 +95,16 @@ DISCRETE_SOUND_END
Catch memory audio output handlers
***************************************************************************/
-WRITE8_MEMBER(avalnche_state::catch_audio_w)
+WRITE_LINE_MEMBER(avalnche_state::catch_aud0_w)
{
/* Different from avalnche, it plays a sound (offset 0/1/2) on data bit 0 rising edge.
There's no indication that the game silences sound, it's probably done automatically. */
}
+
+WRITE_LINE_MEMBER(avalnche_state::catch_aud1_w)
+{
+}
+
+WRITE_LINE_MEMBER(avalnche_state::catch_aud2_w)
+{
+}
diff --git a/src/mame/audio/bsktball.cpp b/src/mame/audio/bsktball.cpp
index 23b01226f70..3322c33dc92 100644
--- a/src/mame/audio/bsktball.cpp
+++ b/src/mame/audio/bsktball.cpp
@@ -23,11 +23,6 @@ WRITE8_MEMBER(bsktball_state::bsktball_note_w)
m_discrete->write(space, BSKTBALL_NOTE_DATA, data); // Note
}
-WRITE8_MEMBER(bsktball_state::bsktball_noise_reset_w)
-{
- m_discrete->write(space, BSKTBALL_NOISE_EN, offset & 0x01);
-}
-
/************************************************************************/
/* bsktball Sound System Analog emulation */
diff --git a/src/mame/audio/canyon.cpp b/src/mame/audio/canyon.cpp
index 99d502605ad..7e65dc0f6cd 100644
--- a/src/mame/audio/canyon.cpp
+++ b/src/mame/audio/canyon.cpp
@@ -28,18 +28,6 @@ WRITE8_MEMBER(canyon_state::canyon_explode_w)
}
-WRITE8_MEMBER(canyon_state::canyon_attract_w)
-{
- m_discrete->write(space, NODE_RELATIVE(CANYON_ATTRACT1_EN, (offset & 0x01)), offset & 0x02);
-}
-
-
-WRITE8_MEMBER(canyon_state::canyon_whistle_w)
-{
- m_discrete->write(space, NODE_RELATIVE(CANYON_WHISTLE1_EN, (offset & 0x01)), offset & 0x02);
-}
-
-
/************************************************************************/
/* canyon Sound System Analog emulation */
/************************************************************************/
diff --git a/src/mame/audio/cclimber.cpp b/src/mame/audio/cclimber.cpp
index 9da3460cf17..ba6fe7bd70f 100644
--- a/src/mame/audio/cclimber.cpp
+++ b/src/mame/audio/cclimber.cpp
@@ -69,30 +69,35 @@ MACHINE_CONFIG_MEMBER( cclimber_audio_device::device_add_mconfig )
MACHINE_CONFIG_END
-WRITE8_MEMBER( cclimber_audio_device::sample_select_w )
+WRITE8_MEMBER(cclimber_audio_device::sample_select_w)
{
m_sample_num = data;
}
-WRITE8_MEMBER( cclimber_audio_device::sample_rate_w )
+WRITE8_MEMBER(cclimber_audio_device::sample_rate_w)
{
/* calculate the sampling frequency */
m_sample_freq = SND_CLOCK / 4 / (256 - data);
}
-WRITE8_MEMBER( cclimber_audio_device::sample_volume_w )
+WRITE8_MEMBER(cclimber_audio_device::sample_volume_w)
{
m_sample_volume = data & 0x1f; /* range 0-31 */
}
-WRITE8_MEMBER( cclimber_audio_device::sample_trigger_w )
+WRITE_LINE_MEMBER(cclimber_audio_device::sample_trigger_w)
{
- if (data == 0)
+ if (state == 0)
return;
play_sample(32 * m_sample_num,m_sample_freq,m_sample_volume);
}
+WRITE8_MEMBER(cclimber_audio_device::sample_trigger_w)
+{
+ sample_trigger_w(data != 0);
+}
+
void cclimber_audio_device::play_sample(int start,int freq,int volume)
{
diff --git a/src/mame/audio/cclimber.h b/src/mame/audio/cclimber.h
index e11b471ffe7..9e84673dee4 100644
--- a/src/mame/audio/cclimber.h
+++ b/src/mame/audio/cclimber.h
@@ -36,9 +36,10 @@ public:
// construction/destruction
cclimber_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_WRITE8_MEMBER( sample_trigger_w );
- DECLARE_WRITE8_MEMBER( sample_rate_w );
- DECLARE_WRITE8_MEMBER( sample_volume_w );
+ DECLARE_WRITE_LINE_MEMBER(sample_trigger_w);
+ DECLARE_WRITE8_MEMBER(sample_trigger_w);
+ DECLARE_WRITE8_MEMBER(sample_rate_w);
+ DECLARE_WRITE8_MEMBER(sample_volume_w);
protected:
// device level overrides
diff --git a/src/mame/audio/cinemat.cpp b/src/mame/audio/cinemat.cpp
index 3d757eb92f1..66b491825d2 100644
--- a/src/mame/audio/cinemat.cpp
+++ b/src/mame/audio/cinemat.cpp
@@ -36,9 +36,6 @@
#define RISING_EDGE(bit, changed, val) (((changed) & (bit)) && ((val) & (bit)))
#define FALLING_EDGE(bit, changed, val) (((changed) & (bit)) && !((val) & (bit)))
-#define SOUNDVAL_RISING_EDGE(bit) RISING_EDGE(bit, bits_changed, sound_val)
-#define SOUNDVAL_FALLING_EDGE(bit) FALLING_EDGE(bit, bits_changed, sound_val)
-
#define SHIFTREG_RISING_EDGE(bit) RISING_EDGE(bit, (m_last_shift ^ m_current_shift), m_current_shift)
#define SHIFTREG_FALLING_EDGE(bit) FALLING_EDGE(bit, (m_last_shift ^ m_current_shift), m_current_shift)
@@ -48,26 +45,6 @@
/*************************************
*
- * Generic sound write
- *
- *************************************/
-
-WRITE8_MEMBER(cinemat_state::cinemat_sound_control_w)
-{
- uint8_t oldval = m_sound_control;
-
- /* form an 8-bit value with the new bit */
- m_sound_control = (m_sound_control & ~(1 << offset)) | ((data & 1) << offset);
-
- /* if something changed, call the sound subroutine */
- if ((m_sound_control != oldval) && m_sound_handler)
- (this->*m_sound_handler)(m_sound_control, m_sound_control ^ oldval);
-}
-
-
-
-/*************************************
- *
* Generic sound init
*
*************************************/
@@ -75,7 +52,6 @@ WRITE8_MEMBER(cinemat_state::cinemat_sound_control_w)
void cinemat_state::sound_start()
{
/* register for save states */
- save_item(NAME(m_sound_control));
save_item(NAME(m_current_shift));
save_item(NAME(m_last_shift));
save_item(NAME(m_last_shift2));
@@ -88,14 +64,8 @@ void cinemat_state::sound_start()
}
-void cinemat_state::generic_init(sound_func sound_handler)
+void cinemat_state::sound_reset()
{
- /* set the sound handler */
- m_sound_handler = sound_handler;
-
- /* reset sound control */
- m_sound_control = 0x9f;
-
/* reset shift register values */
m_current_shift = 0xffff;
m_last_shift = 0xffff;
@@ -130,32 +100,44 @@ static const char *const spacewar_sample_names[] =
nullptr
};
-void cinemat_state::spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::spacewar_sound0_w)
{
/* Explosion - rising edge */
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
m_samples->start(0, (machine().rand() & 1) ? 0 : 6);
+}
+WRITE_LINE_MEMBER(cinemat_state::spacewar_sound1_w)
+{
/* Fire sound - rising edge */
- if (SOUNDVAL_RISING_EDGE(0x02))
+ if (state)
m_samples->start(1, (machine().rand() & 1) ? 1 : 7);
+}
+WRITE_LINE_MEMBER(cinemat_state::spacewar_sound2_w)
+{
/* Player 1 thrust - 0=on, 1=off */
- if (SOUNDVAL_FALLING_EDGE(0x04))
+ if (!state)
m_samples->start(3, 3, true);
- if (SOUNDVAL_RISING_EDGE(0x04))
+ if (state)
m_samples->stop(3);
+}
+WRITE_LINE_MEMBER(cinemat_state::spacewar_sound3_w)
+{
/* Player 2 thrust - 0=on, 1-off */
- if (SOUNDVAL_FALLING_EDGE(0x08))
+ if (!state)
m_samples->start(4, 4, true);
- if (SOUNDVAL_RISING_EDGE(0x08))
+ if (state)
m_samples->stop(4);
+}
+WRITE_LINE_MEMBER(cinemat_state::spacewar_sound4_w)
+{
/* Mute - 0=off, 1=on */
- if (SOUNDVAL_FALLING_EDGE(0x10))
+ if (!state)
m_samples->start(2, 2, true); /* play idle sound */
- if (SOUNDVAL_RISING_EDGE(0x10))
+ if (state)
{
int i;
@@ -169,13 +151,13 @@ void cinemat_state::spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed)
}
}
-SOUND_RESET_MEMBER( cinemat_state, spacewar )
-{
- generic_init(&cinemat_state::spacewar_sound_w);
-}
-
MACHINE_CONFIG_START( spacewar_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, spacewar)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, spacewar_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, spacewar_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, spacewar_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, spacewar_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, spacewar_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -202,28 +184,32 @@ static const char *const barrier_sample_names[] =
nullptr
};
-void cinemat_state::barrier_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::barrier_sound0_w)
{
/* Player die - rising edge */
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
m_samples->start(0, 0);
+}
+WRITE_LINE_MEMBER(cinemat_state::barrier_sound1_w)
+{
/* Player move - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x02))
+ if (!state)
m_samples->start(1, 1);
-
- /* Enemy move - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x04))
- m_samples->start(2, 2);
}
-SOUND_RESET_MEMBER( cinemat_state, barrier )
+WRITE_LINE_MEMBER(cinemat_state::barrier_sound2_w)
{
- generic_init(&cinemat_state::barrier_sound_w);
+ /* Enemy move - falling edge */
+ if (!state)
+ m_samples->start(2, 2);
}
MACHINE_CONFIG_START( barrier_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, barrier)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, barrier_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, barrier_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, barrier_sound2_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -248,35 +234,39 @@ static const char *const speedfrk_sample_names[] =
nullptr
};
-void cinemat_state::speedfrk_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::speedfrk_sound3_w)
{
/* on the falling edge of bit 0x08, clock the inverse of bit 0x04 into the top of the shiftreg */
- if (SOUNDVAL_FALLING_EDGE(0x08))
+ if (!state)
{
- m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((~sound_val << 13) & 1);
+ m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((~m_outlatch->q2_r() << 13) & 1);
/* high 12 bits control the frequency - counts from value to $FFF, carry triggers */
/* another counter */
/* low 4 bits control the volume of the noise output (explosion?) */
}
+}
+WRITE_LINE_MEMBER(cinemat_state::speedfrk_sound4_w)
+{
/* off-road - 1=on, 0=off */
- if (SOUNDVAL_RISING_EDGE(0x10))
+ if (state)
m_samples->start(0, 0, true);
- if (SOUNDVAL_FALLING_EDGE(0x10))
+ if (!state)
m_samples->stop(0);
-
- /* start LED is controlled by bit 0x02 */
- output().set_led_value(0, ~sound_val & 0x02);
}
-SOUND_RESET_MEMBER( cinemat_state, speedfrk )
+WRITE_LINE_MEMBER(cinemat_state::speedfrk_start_led_w)
{
- generic_init(&cinemat_state::speedfrk_sound_w);
+ /* start LED is controlled by bit 0x02 */
+ output().set_led_value(0, !state);
}
MACHINE_CONFIG_START( speedfrk_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, speedfrk)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, speedfrk_start_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, speedfrk_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, speedfrk_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -306,46 +296,62 @@ static const char *const starhawk_sample_names[] =
nullptr
};
-void cinemat_state::starhawk_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::starhawk_sound0_w)
{
/* explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x01))
+ if (!state)
m_samples->start(0, 0);
+}
+WRITE_LINE_MEMBER(cinemat_state::starhawk_sound1_w)
+{
/* right laser - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x02))
+ if (!state)
m_samples->start(1, 1);
+}
+WRITE_LINE_MEMBER(cinemat_state::starhawk_sound2_w)
+{
/* left laser - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x04))
+ if (!state)
m_samples->start(2, 2);
+}
+WRITE_LINE_MEMBER(cinemat_state::starhawk_sound3_w)
+{
/* K - 0=on, 1=off */
- if (SOUNDVAL_FALLING_EDGE(0x08))
+ if (!state)
m_samples->start(3, 3, true);
- if (SOUNDVAL_RISING_EDGE(0x08))
+ if (state)
m_samples->stop(3);
+}
+WRITE_LINE_MEMBER(cinemat_state::starhawk_sound4_w)
+{
/* master - 0=on, 1=off */
- if (SOUNDVAL_FALLING_EDGE(0x10))
+ if (!state)
m_samples->start(4, 4, true);
- if (SOUNDVAL_RISING_EDGE(0x10))
+ if (state)
m_samples->stop(4);
+}
+WRITE_LINE_MEMBER(cinemat_state::starhawk_sound7_w)
+{
/* K exit - 1=on, 0=off */
- if (SOUNDVAL_RISING_EDGE(0x80))
+ if (state)
m_samples->start(3, 5, true);
- if (SOUNDVAL_FALLING_EDGE(0x80))
+ if (!state)
m_samples->stop(3);
}
-SOUND_RESET_MEMBER( cinemat_state, starhawk )
-{
- generic_init(&cinemat_state::starhawk_sound_w);
-}
-
MACHINE_CONFIG_START( starhawk_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, starhawk)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, starhawk_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, starhawk_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, starhawk_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, starhawk_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, starhawk_sound4_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, starhawk_sound7_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -375,40 +381,56 @@ static const char *const sundance_sample_names[] =
nullptr
};
-void cinemat_state::sundance_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::sundance_sound0_w)
{
/* bong - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x01))
+ if (!state)
m_samples->start(0, 0);
+}
+WRITE_LINE_MEMBER(cinemat_state::sundance_sound1_w)
+{
/* whoosh - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x02))
+ if (!state)
m_samples->start(1, 1);
+}
+WRITE_LINE_MEMBER(cinemat_state::sundance_sound2_w)
+{
/* explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x04))
+ if (!state)
m_samples->start(2, 2);
+}
+WRITE_LINE_MEMBER(cinemat_state::sundance_sound3_w)
+{
/* ping - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x08))
+ if (!state)
m_samples->start(3, 3);
+}
+WRITE_LINE_MEMBER(cinemat_state::sundance_sound4_w)
+{
/* ping - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x10))
+ if (!state)
m_samples->start(4, 4);
-
- /* hatch - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x80))
- m_samples->start(5, 5);
}
-SOUND_RESET_MEMBER( cinemat_state, sundance )
+WRITE_LINE_MEMBER(cinemat_state::sundance_sound7_w)
{
- generic_init(&cinemat_state::sundance_sound_w);
+ /* hatch - falling edge */
+ if (!state)
+ m_samples->start(5, 5);
}
MACHINE_CONFIG_START( sundance_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, sundance)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, sundance_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, sundance_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, sundance_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, sundance_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, sundance_sound4_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, sundance_sound7_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -438,13 +460,13 @@ static const char *const tailg_sample_names[] =
nullptr
};
-void cinemat_state::tailg_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::tailg_sound_w)
{
/* the falling edge of bit 0x10 clocks bit 0x08 into the mux selected by bits 0x07 */
- if (SOUNDVAL_FALLING_EDGE(0x10))
+ if (!state)
{
/* update the shift register (actually just a simple mux) */
- m_current_shift = (m_current_shift & ~(1 << (sound_val & 7))) | (((sound_val >> 3) & 1) << (sound_val & 7));
+ m_current_shift = (m_current_shift & ~(1 << (m_outlatch->output_state() & 7))) | (m_outlatch->q3_r() << (m_outlatch->output_state() & 7));
/* explosion - falling edge */
if (SHIFTREG_FALLING_EDGE(0x01))
@@ -484,13 +506,9 @@ void cinemat_state::tailg_sound_w(uint8_t sound_val, uint8_t bits_changed)
}
}
-SOUND_RESET_MEMBER( cinemat_state, tailg )
-{
- generic_init(&cinemat_state::tailg_sound_w);
-}
-
MACHINE_CONFIG_START( tailg_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, tailg)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, tailg_sound_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -519,40 +537,52 @@ static const char *const warrior_sample_names[] =
nullptr
};
-void cinemat_state::warrior_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::warrior_sound0_w)
{
/* normal level - 0=on, 1=off */
- if (SOUNDVAL_FALLING_EDGE(0x01))
+ if (!state)
m_samples->start(0, 0, true);
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
m_samples->stop(0);
+}
+WRITE_LINE_MEMBER(cinemat_state::warrior_sound1_w)
+{
/* hi level - 0=on, 1=off */
- if (SOUNDVAL_FALLING_EDGE(0x02))
+ if (!state)
m_samples->start(1, 1, true);
- if (SOUNDVAL_RISING_EDGE(0x02))
+ if (state)
m_samples->stop(1);
+}
+WRITE_LINE_MEMBER(cinemat_state::warrior_sound2_w)
+{
/* explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x04))
+ if (!state)
m_samples->start(2, 2);
+}
+WRITE_LINE_MEMBER(cinemat_state::warrior_sound3_w)
+{
/* fall - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x08))
+ if (!state)
m_samples->start(3, 3);
-
- /* appear - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x10))
- m_samples->start(4, 4);
}
-SOUND_RESET_MEMBER( cinemat_state, warrior )
+WRITE_LINE_MEMBER(cinemat_state::warrior_sound4_w)
{
- generic_init(&cinemat_state::warrior_sound_w);
+ /* appear - falling edge */
+ if (!state)
+ m_samples->start(4, 4);
}
MACHINE_CONFIG_START( warrior_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, warrior)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, warrior_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, warrior_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, warrior_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, warrior_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, warrior_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -583,14 +613,17 @@ static const char *const armora_sample_names[] =
nullptr
};
-void cinemat_state::armora_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::armora_sound4_w)
{
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
- if (SOUNDVAL_RISING_EDGE(0x10))
- m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80);
+ if (state)
+ m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7);
+}
+WRITE_LINE_MEMBER(cinemat_state::armora_sound0_w)
+{
/* execute on the rising edge of bit 0x01 */
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
{
/* bits 0-4 control the tank sound speed */
@@ -613,34 +646,43 @@ void cinemat_state::armora_sound_w(uint8_t sound_val, uint8_t bits_changed)
/* remember the previous value */
m_last_shift = m_current_shift;
}
+}
+WRITE_LINE_MEMBER(cinemat_state::armora_sound1_w)
+{
/* tank sound - 0=on, 1=off */
/* still not totally correct - should be multiple speeds based on remaining bits in shift reg */
- if (SOUNDVAL_FALLING_EDGE(0x02))
+ if (!state)
m_samples->start(4, 4, true);
- if (SOUNDVAL_RISING_EDGE(0x02))
+ if (state)
m_samples->stop(4);
+}
+WRITE_LINE_MEMBER(cinemat_state::armora_sound2_w)
+{
/* beep sound - 0=on, 1=off */
- if (SOUNDVAL_FALLING_EDGE(0x04))
+ if (!state)
m_samples->start(5, 5, true);
- if (SOUNDVAL_RISING_EDGE(0x04))
+ if (state)
m_samples->stop(5);
+}
+WRITE_LINE_MEMBER(cinemat_state::armora_sound3_w)
+{
/* chopper sound - 0=on, 1=off */
- if (SOUNDVAL_FALLING_EDGE(0x08))
+ if (!state)
m_samples->start(6, 6, true);
- if (SOUNDVAL_RISING_EDGE(0x08))
+ if (state)
m_samples->stop(6);
}
-SOUND_RESET_MEMBER( cinemat_state, armora )
-{
- generic_init(&cinemat_state::armora_sound_w);
-}
-
MACHINE_CONFIG_START( armora_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, armora)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, armora_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, armora_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, armora_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, armora_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, armora_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -677,14 +719,17 @@ static const char *const ripoff_sample_names[] =
nullptr
};
-void cinemat_state::ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::ripoff_sound1_w)
{
/* on the rising edge of bit 0x02, clock bit 0x01 into the shift register */
- if (SOUNDVAL_RISING_EDGE(0x02))
- m_current_shift = ((m_current_shift >> 1) & 0x7f) | ((sound_val << 7) & 0x80);
+ if (state)
+ m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q0_r() << 7);
+}
+WRITE_LINE_MEMBER(cinemat_state::ripoff_sound2_w)
+{
/* execute on the rising edge of bit 0x04 */
- if (SOUNDVAL_RISING_EDGE(0x04))
+ if (state)
{
/* background - 0=on, 1=off, selected by bits 0x38 */
if ((((m_current_shift ^ m_last_shift) & 0x38) && !(m_current_shift & 0x04)) || SHIFTREG_FALLING_EDGE(0x04))
@@ -705,27 +750,36 @@ void cinemat_state::ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed)
/* remember the previous value */
m_last_shift = m_current_shift;
}
+}
+WRITE_LINE_MEMBER(cinemat_state::ripoff_sound3_w)
+{
/* torpedo - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x08))
+ if (!state)
m_samples->start(2, 2);
+}
+WRITE_LINE_MEMBER(cinemat_state::ripoff_sound4_w)
+{
/* laser - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x10))
+ if (!state)
m_samples->start(3, 3);
-
- /* explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x80))
- m_samples->start(4, 4);
}
-SOUND_RESET_MEMBER( cinemat_state, ripoff )
+WRITE_LINE_MEMBER(cinemat_state::ripoff_sound7_w)
{
- generic_init(&cinemat_state::ripoff_sound_w);
+ /* explosion - falling edge */
+ if (!state)
+ m_samples->start(4, 4);
}
MACHINE_CONFIG_START( ripoff_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, ripoff)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, ripoff_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, ripoff_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, ripoff_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, ripoff_sound4_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, ripoff_sound7_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -757,16 +811,17 @@ static const char *const starcas_sample_names[] =
nullptr
};
-void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::starcas_sound4_w)
{
- uint32_t target_pitch;
-
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
- if (SOUNDVAL_RISING_EDGE(0x10))
- m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80);
+ if (state)
+ m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7);
+}
+WRITE_LINE_MEMBER(cinemat_state::starcas_sound0_w)
+{
/* execute on the rising edge of bit 0x01 */
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
{
/* fireball - falling edge */
if (SHIFTREG_FALLING_EDGE(0x80))
@@ -795,7 +850,7 @@ void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed)
m_samples->stop(4);
/* latch the drone pitch */
- target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
+ u32 target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
target_pitch = 0x5800 + (target_pitch << 12);
/* once per frame slide the pitch toward the target */
@@ -812,27 +867,36 @@ void cinemat_state::starcas_sound_w(uint8_t sound_val, uint8_t bits_changed)
/* remember the previous value */
m_last_shift = m_current_shift;
}
+}
+WRITE_LINE_MEMBER(cinemat_state::starcas_sound1_w)
+{
/* loud explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x02))
+ if (!state)
m_samples->start(5, 5);
+}
+WRITE_LINE_MEMBER(cinemat_state::starcas_sound2_w)
+{
/* soft explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x04))
+ if (!state)
m_samples->start(6, 6);
-
- /* player fire - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x08))
- m_samples->start(7, 7);
}
-SOUND_RESET_MEMBER( cinemat_state, starcas )
+WRITE_LINE_MEMBER(cinemat_state::starcas_sound3_w)
{
- generic_init(&cinemat_state::starcas_sound_w);
+ /* player fire - falling edge */
+ if (!state)
+ m_samples->start(7, 7);
}
MACHINE_CONFIG_START( starcas_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, starcas)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, starcas_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, starcas_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, starcas_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, starcas_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, starcas_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -864,14 +928,17 @@ static const char *const solarq_sample_names[] =
nullptr
};
-void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::solarq_sound4_w)
{
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
- if (SOUNDVAL_RISING_EDGE(0x10))
- m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((sound_val << 8) & 0x8000);
+ if (state)
+ m_current_shift = ((m_current_shift >> 1) & 0x7fff) | (m_outlatch->q7_r() << 15);
+}
+WRITE_LINE_MEMBER(cinemat_state::solarq_sound1_w)
+{
/* execute on the rising edge of bit 0x02 */
- if (SOUNDVAL_RISING_EDGE(0x02))
+ if (state)
{
/* only the upper 8 bits matter */
m_current_shift >>= 8;
@@ -929,9 +996,12 @@ void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed)
/* remember the previous value */
m_last_shift = m_current_shift;
}
+}
+WRITE_LINE_MEMBER(cinemat_state::solarq_sound0_w)
+{
/* clock music data on the rising edge of bit 0x01 */
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
{
int freq, vol;
@@ -954,13 +1024,11 @@ void cinemat_state::solarq_sound_w(uint8_t sound_val, uint8_t bits_changed)
}
}
-SOUND_RESET_MEMBER( cinemat_state, solarq )
-{
- generic_init(&cinemat_state::solarq_sound_w);
-}
-
MACHINE_CONFIG_START( solarq_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, solarq)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, solarq_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, solarq_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, solarq_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -996,14 +1064,17 @@ static const char *const boxingb_sample_names[] =
nullptr
};
-void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::boxingb_sound4_w)
{
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
- if (SOUNDVAL_RISING_EDGE(0x10))
- m_current_shift = ((m_current_shift >> 1) & 0x7fff) | ((sound_val << 8) & 0x8000);
+ if (state)
+ m_current_shift = ((m_current_shift >> 1) & 0x7fff) | (m_outlatch->q7_r() << 15);
+}
+WRITE_LINE_MEMBER(cinemat_state::boxingb_sound1_w)
+{
/* execute on the rising edge of bit 0x02 */
- if (SOUNDVAL_RISING_EDGE(0x02))
+ if (state)
{
/* only the upper 8 bits matter */
m_current_shift >>= 8;
@@ -1045,9 +1116,12 @@ void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed)
/* remember the previous value */
m_last_shift = m_current_shift;
}
+}
+WRITE_LINE_MEMBER(cinemat_state::boxingb_sound0_w)
+{
/* clock music data on the rising edge of bit 0x01 */
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
{
int freq, vol;
@@ -1072,23 +1146,29 @@ void cinemat_state::boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed)
/* remember the previous value */
m_last_shift2 = m_current_shift;
}
+}
+WRITE_LINE_MEMBER(cinemat_state::boxingb_sound2_w)
+{
/* bounce - rising edge */
- if (SOUNDVAL_RISING_EDGE(0x04))
+ if (state)
m_samples->start(10, 10);
-
- /* bell - falling edge */
- if (SOUNDVAL_RISING_EDGE(0x08))
- m_samples->start(11, 11);
}
-SOUND_RESET_MEMBER( cinemat_state, boxingb )
+WRITE_LINE_MEMBER(cinemat_state::boxingb_sound3_w)
{
- generic_init(&cinemat_state::boxingb_sound_w);
+ /* bell - falling edge */
+ if (state)
+ m_samples->start(11, 11);
}
MACHINE_CONFIG_START( boxingb_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, boxingb)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, boxingb_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, boxingb_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, boxingb_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, boxingb_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, boxingb_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1120,16 +1200,17 @@ static const char *const wotw_sample_names[] =
nullptr
};
-void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::wotw_sound4_w)
{
- uint32_t target_pitch;
-
/* on the rising edge of bit 0x10, clock bit 0x80 into the shift register */
- if (SOUNDVAL_RISING_EDGE(0x10))
- m_current_shift = ((m_current_shift >> 1) & 0x7f) | (sound_val & 0x80);
+ if (state)
+ m_current_shift = ((m_current_shift >> 1) & 0x7f) | (m_outlatch->q7_r() << 7);
+}
+WRITE_LINE_MEMBER(cinemat_state::wotw_sound0_w)
+{
/* execute on the rising edge of bit 0x01 */
- if (SOUNDVAL_RISING_EDGE(0x01))
+ if (state)
{
/* fireball - falling edge */
if (SHIFTREG_FALLING_EDGE(0x80))
@@ -1158,7 +1239,7 @@ void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed)
m_samples->stop(4);
/* latch the drone pitch */
- target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
+ u32 target_pitch = (m_current_shift & 7) + ((m_current_shift & 2) << 2);
target_pitch = 0x10000 + (target_pitch << 12);
/* once per frame slide the pitch toward the target */
@@ -1175,27 +1256,36 @@ void cinemat_state::wotw_sound_w(uint8_t sound_val, uint8_t bits_changed)
/* remember the previous value */
m_last_shift = m_current_shift;
}
+}
+WRITE_LINE_MEMBER(cinemat_state::wotw_sound1_w)
+{
/* loud explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x02))
+ if (!state)
m_samples->start(5, 5);
+}
+WRITE_LINE_MEMBER(cinemat_state::wotw_sound2_w)
+{
/* soft explosion - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x04))
+ if (!state)
m_samples->start(6, 6);
-
- /* player fire - falling edge */
- if (SOUNDVAL_FALLING_EDGE(0x08))
- m_samples->start(7, 7);
}
-SOUND_RESET_MEMBER( cinemat_state, wotw )
+WRITE_LINE_MEMBER(cinemat_state::wotw_sound3_w)
{
- generic_init(&cinemat_state::wotw_sound_w);
+ /* player fire - falling edge */
+ if (!state)
+ m_samples->start(7, 7);
}
MACHINE_CONFIG_START( wotw_sound )
- MCFG_SOUND_RESET_OVERRIDE(cinemat_state, wotw)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, wotw_sound0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cinemat_state, wotw_sound1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cinemat_state, wotw_sound2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cinemat_state, wotw_sound3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, wotw_sound4_w))
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1220,14 +1310,11 @@ TIMER_CALLBACK_MEMBER( cinemat_state::synced_sound_w )
}
-void cinemat_state::demon_sound_w(uint8_t sound_val, uint8_t bits_changed)
+WRITE_LINE_MEMBER(cinemat_state::demon_sound4_w)
{
- /* all inputs are inverted */
- sound_val = ~sound_val;
-
/* watch for a 0->1 edge on bit 4 ("shift in") to clock in the new data */
- if ((bits_changed & 0x10) && (sound_val & 0x10))
- machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), sound_val & 0x0f);
+ if (state)
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), ~m_outlatch->output_state() & 0x0f);
}
@@ -1270,7 +1357,7 @@ WRITE8_MEMBER(cinemat_state::sound_output_w)
SOUND_RESET_MEMBER( cinemat_state, demon )
{
/* generic init */
- generic_init(&cinemat_state::demon_sound_w);
+ sound_reset();
/* reset the FIFO */
m_sound_fifo_in = m_sound_fifo_out = 0;
@@ -1321,6 +1408,9 @@ MACHINE_CONFIG_START( demon_sound )
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, demon)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, demon_sound4_w))
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1348,17 +1438,16 @@ MACHINE_CONFIG_END
*
*************************************/
-WRITE8_MEMBER(cinemat_state::qb3_sound_w)
+WRITE_LINE_MEMBER(cinemat_state::qb3_sound4_w)
{
uint16_t rega = m_maincpu->state_int(ccpu_cpu_device::CCPU_A);
- demon_sound_w(0x00 | (~rega & 0x0f), 0x10);
+ machine().scheduler().synchronize(timer_expired_delegate(FUNC(cinemat_state::synced_sound_w), this), ~rega & 0x0f);
}
SOUND_RESET_MEMBER( cinemat_state, qb3 )
{
SOUND_RESET_CALL_MEMBER(demon);
- m_maincpu->space(AS_IO).install_write_handler(0x04, 0x04, write8_delegate(FUNC(cinemat_state::qb3_sound_w),this));
/* this patch prevents the sound ROM from eating itself when command $0A is sent */
/* on a cube rotate */
@@ -1368,4 +1457,7 @@ SOUND_RESET_MEMBER( cinemat_state, qb3 )
MACHINE_CONFIG_DERIVED( qb3_sound, demon_sound )
MCFG_SOUND_RESET_OVERRIDE(cinemat_state, qb3)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cinemat_state, qb3_sound4_w))
MACHINE_CONFIG_END
diff --git a/src/mame/audio/copsnrob.cpp b/src/mame/audio/copsnrob.cpp
index cccd856a864..c5200a5d6ce 100644
--- a/src/mame/audio/copsnrob.cpp
+++ b/src/mame/audio/copsnrob.cpp
@@ -5,6 +5,7 @@
* Nov 2010, Derrick Renaud
************************************************************************/
#include "emu.h"
+#include "speaker.h"
#include "includes/copsnrob.h"
#include "sound/discrete.h"
@@ -589,7 +590,7 @@ DISCRETE_RESET(copsnrob_zings_555_astable)
************************************************/
-DISCRETE_SOUND_START(copsnrob)
+static DISCRETE_SOUND_START(copsnrob)
/************************************************
* Input register mapping
@@ -687,57 +688,29 @@ DISCRETE_SOUND_START(copsnrob)
DISCRETE_SOUND_END
-WRITE8_MEMBER(copsnrob_state::copsnrob_misc_w)
+WRITE_LINE_MEMBER(copsnrob_state::one_start_w)
{
- uint8_t latched_data = m_ic_h3_data;
- uint8_t special_data = data & 0x01;
-
- /* ignore if no change */
- if (((latched_data >> offset) & 0x01) == special_data)
- return;
-
- if (special_data)
- latched_data |= 1 << offset;
- else
- latched_data &= ~(1 << offset);
-
- switch (offset)
- {
- case 0x00:
- m_discrete->write(space, COPSNROB_MOTOR3_INV, special_data);
- break;
-
- case 0x01:
- m_discrete->write(space, COPSNROB_MOTOR2_INV, special_data);
- break;
-
- case 0x02:
- m_discrete->write(space, COPSNROB_MOTOR1_INV, special_data);
- break;
-
- case 0x03:
- m_discrete->write(space, COPSNROB_MOTOR0_INV, special_data);
- break;
-
- case 0x04:
- m_discrete->write(space, COPSNROB_SCREECH_INV, special_data);
- break;
-
- case 0x05:
- m_discrete->write(space, COPSNROB_CRASH_INV, special_data);
- break;
-
- case 0x06:
- /* One Start */
- output().set_led_value(0, !special_data);
- break;
-
- case 0x07:
- m_discrete->write(space, COPSNROB_AUDIO_ENABLE, special_data);
- //machine().sound().system_mute(special_data);
- break;
+ /* One Start */
+ output().set_led_value(0, !state);
+}
- }
- m_ic_h3_data = latched_data;
-}
+MACHINE_CONFIG_START( copsnrob_audio )
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+
+ MCFG_SOUND_ADD("discrete", DISCRETE, 0)
+ MCFG_DISCRETE_INTF(copsnrob)
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DEVICE_ADD("latch", F9334, 0) // H3 on audio board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR3_INV>))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR2_INV>))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR1_INV>))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_MOTOR0_INV>))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_SCREECH_INV>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_CRASH_INV>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(copsnrob_state, one_start_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<COPSNROB_AUDIO_ENABLE>))
+MACHINE_CONFIG_END
diff --git a/src/mame/audio/jedi.cpp b/src/mame/audio/jedi.cpp
index 1e44c6c322d..70c8cc8fade 100644
--- a/src/mame/audio/jedi.cpp
+++ b/src/mame/audio/jedi.cpp
@@ -70,9 +70,9 @@ WRITE8_MEMBER(jedi_state::irq_ack_w)
*
*************************************/
-WRITE8_MEMBER(jedi_state::jedi_audio_reset_w)
+WRITE_LINE_MEMBER(jedi_state::audio_reset_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
}
diff --git a/src/mame/audio/sprint8.cpp b/src/mame/audio/sprint8.cpp
index 393652e760d..0294e94ca85 100644
--- a/src/mame/audio/sprint8.cpp
+++ b/src/mame/audio/sprint8.cpp
@@ -8,6 +8,8 @@
#include "emu.h"
#include "includes/sprint8.h"
+#include "speaker.h"
+
/* Discrete Sound Input Nodes */
#define SPRINT8_CRASH_EN NODE_01
@@ -294,23 +296,39 @@ DISCRETE_SOUND_START( sprint8 )
DISCRETE_TASK_END()
DISCRETE_SOUND_END
-
-WRITE8_MEMBER(sprint8_state::crash_w)
-{
- m_discrete->write(space, SPRINT8_CRASH_EN, data & 0x01);
-}
-
-WRITE8_MEMBER(sprint8_state::screech_w)
-{
- m_discrete->write(space, SPRINT8_SCREECH_EN, data & 0x01);
-}
-
-WRITE8_MEMBER(sprint8_state::attract_w)
-{
- m_discrete->write(space, SPRINT8_ATTRACT_EN, data & 0x01);
-}
-
-WRITE8_MEMBER(sprint8_state::motor_w)
-{
- m_discrete->write(space, NODE_RELATIVE(SPRINT8_MOTOR1_EN, offset & 0x07), data & 0x01);
-}
+MACHINE_CONFIG_START( sprint8_audio )
+ /* sound hardware */
+ /* the proper way is to hook up 4 speakers, but they are not really
+ * F/R/L/R speakers. Though you can pretend the 1-2 mix is the front. */
+ MCFG_SPEAKER_ADD("speaker_1_2", 0.0, 0.0, 1.0) /* front */
+ MCFG_SPEAKER_ADD("speaker_3_7", -0.2, 0.0, 1.0) /* left */
+ MCFG_SPEAKER_ADD("speaker_5_6", 0.0, 0.0, -0.5) /* back */
+ MCFG_SPEAKER_ADD("speaker_4_8", 0.2, 0.0, 1.0) /* right */
+
+ MCFG_SOUND_ADD("discrete", DISCRETE, 0)
+ MCFG_DISCRETE_INTF(sprint8)
+ MCFG_SOUND_ROUTE(0, "speaker_1_2", 1.0)
+ /* volumes on other channels defaulted to off, */
+ /* user can turn them up if needed. */
+ /* The game does not sound good with all channels mixed to stereo. */
+ MCFG_SOUND_ROUTE(1, "speaker_3_7", 0.0)
+ MCFG_SOUND_ROUTE(2, "speaker_5_6", 0.0)
+ MCFG_SOUND_ROUTE(3, "speaker_4_8", 0.0)
+
+ MCFG_DEVICE_ADD("latch", F9334, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sprint8_state, int_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_CRASH_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_SCREECH_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sprint8_state, team_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_ATTRACT_EN>))
+
+ MCFG_DEVICE_ADD("motor", F9334, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR1_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR2_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR3_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR4_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR5_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR6_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR7_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT8_MOTOR8_EN>))
+MACHINE_CONFIG_END
diff --git a/src/mame/audio/subs.cpp b/src/mame/audio/subs.cpp
index fe794e9f49a..40d58bdddfb 100644
--- a/src/mame/audio/subs.cpp
+++ b/src/mame/audio/subs.cpp
@@ -14,26 +14,6 @@
sub sound functions
***************************************************************************/
-WRITE8_MEMBER(subs_state::sonar1_w)
-{
- m_discrete->write(space, SUBS_SONAR1_EN, offset & 0x01);
-}
-
-WRITE8_MEMBER(subs_state::sonar2_w)
-{
- m_discrete->write(space, SUBS_SONAR2_EN, offset & 0x01);
-}
-
-WRITE8_MEMBER(subs_state::crash_w)
-{
- m_discrete->write(space, SUBS_CRASH_EN, offset & 0x01);
-}
-
-WRITE8_MEMBER(subs_state::explode_w)
-{
- m_discrete->write(space, SUBS_EXPLODE_EN, offset & 0x01);
-}
-
WRITE8_MEMBER(subs_state::noise_reset_w)
{
/* Pulse noise reset */
diff --git a/src/mame/audio/timeplt.cpp b/src/mame/audio/timeplt.cpp
index 6030ddae87c..711a3878538 100644
--- a/src/mame/audio/timeplt.cpp
+++ b/src/mame/audio/timeplt.cpp
@@ -122,15 +122,22 @@ WRITE8_MEMBER( timeplt_audio_device::filter_w )
*
*************************************/
-WRITE8_MEMBER( timeplt_audio_device::sh_irqtrigger_w )
+WRITE_LINE_MEMBER(timeplt_audio_device::sh_irqtrigger_w)
{
- if (m_last_irq_state == 0 && data)
+ if (m_last_irq_state == 0 && state)
{
/* setting bit 0 low then high triggers IRQ on the sound CPU */
m_soundcpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
- m_last_irq_state = data;
+ m_last_irq_state = state;
+}
+
+
+WRITE_LINE_MEMBER(timeplt_audio_device::mute_w)
+{
+ // controls pin 6 (DC audio mute) of LA4460 amplifier
+ machine().sound().system_mute(state);
}
diff --git a/src/mame/audio/timeplt.h b/src/mame/audio/timeplt.h
index 98fab24a429..075dc50f163 100644
--- a/src/mame/audio/timeplt.h
+++ b/src/mame/audio/timeplt.h
@@ -14,9 +14,10 @@ class timeplt_audio_device : public device_t, public device_sound_interface
public:
timeplt_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_WRITE8_MEMBER( sh_irqtrigger_w );
- DECLARE_WRITE8_MEMBER( filter_w );
- DECLARE_READ8_MEMBER( portB_r );
+ DECLARE_WRITE_LINE_MEMBER(sh_irqtrigger_w);
+ DECLARE_WRITE_LINE_MEMBER(mute_w);
+ DECLARE_WRITE8_MEMBER(filter_w);
+ DECLARE_READ8_MEMBER(portB_r);
protected:
// device-level overrides
diff --git a/src/mame/drivers/ambush.cpp b/src/mame/drivers/ambush.cpp
index 2becacfa56e..d870631d5af 100644
--- a/src/mame/drivers/ambush.cpp
+++ b/src/mame/drivers/ambush.cpp
@@ -45,6 +45,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "screen.h"
@@ -61,6 +62,7 @@ public:
ambush_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_gfxdecode(*this, "gfxdecode"),
+ m_outlatch(*this, "outlatch%u", 1),
m_video_ram(*this, "video_ram"),
m_sprite_ram(*this, "sprite_ram"),
m_attribute_ram(*this, "attribute_ram"),
@@ -80,21 +82,24 @@ public:
TILE_GET_INFO_MEMBER(mariobl_char_tile_info);
TILE_GET_INFO_MEMBER(dkong3abl_char_tile_info);
- DECLARE_WRITE8_MEMBER(flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
DECLARE_WRITE8_MEMBER(scroll_ram_w);
- DECLARE_WRITE8_MEMBER(color_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(color_bank_1_w);
+ DECLARE_WRITE_LINE_MEMBER(color_bank_2_w);
DECLARE_MACHINE_START(ambush);
DECLARE_MACHINE_START(mariobl);
DECLARE_MACHINE_START(dkong3abl);
- DECLARE_WRITE8_MEMBER(coin_counter_w);
- DECLARE_WRITE8_MEMBER(unk_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE8_MEMBER(output_latches_w);
private:
void register_save_states();
required_device<gfxdecode_device> m_gfxdecode;
+ optional_device_array<ls259_device, 2> m_outlatch;
required_shared_ptr<uint8_t> m_video_ram;
required_shared_ptr<uint8_t> m_sprite_ram;
required_shared_ptr<uint8_t> m_attribute_ram;
@@ -120,10 +125,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, ambush_state )
AM_RANGE(0xc200, 0xc3ff) AM_RAM AM_SHARE("sprite_ram")
AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_SHARE("video_ram")
AM_RANGE(0xc800, 0xc800) AM_READ_PORT("sw1")
- AM_RANGE(0xcc00, 0xcc03) AM_WRITE(unk_w)
- AM_RANGE(0xcc04, 0xcc04) AM_WRITE(flip_screen_w)
- AM_RANGE(0xcc05, 0xcc05) AM_WRITE(color_bank_w)
- AM_RANGE(0xcc07, 0xcc07) AM_WRITE(coin_counter_w)
+ AM_RANGE(0xcc00, 0xcc07) AM_WRITE(output_latches_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( main_portmap, AS_IO, 8, ambush_state )
@@ -145,8 +147,7 @@ static ADDRESS_MAP_START( bootleg_map, AS_PROGRAM, 8, ambush_state )
AM_RANGE(0x8000, 0x9fff) AM_ROM
AM_RANGE(0xa000, 0xa000) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r)
AM_RANGE(0xa100, 0xa100) AM_READ_PORT("sw1")
- AM_RANGE(0xa204, 0xa204) AM_WRITE(coin_counter_w)
- AM_RANGE(0xa206, 0xa206) AM_WRITE(color_bank_w)
+ AM_RANGE(0xa200, 0xa207) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xb000, 0xbfff) AM_ROM
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -508,9 +509,9 @@ uint32_t ambush_state::screen_update_bootleg(screen_device &screen, bitmap_ind16
return 0;
}
-WRITE8_MEMBER( ambush_state::flip_screen_w )
+WRITE_LINE_MEMBER(ambush_state::flip_screen_w)
{
- flip_screen_set(data);
+ flip_screen_set(state);
}
WRITE8_MEMBER( ambush_state::scroll_ram_w )
@@ -519,9 +520,14 @@ WRITE8_MEMBER( ambush_state::scroll_ram_w )
m_char_tilemap->set_scrolly(offset, data + 1);
}
-WRITE8_MEMBER( ambush_state::color_bank_w )
+WRITE_LINE_MEMBER(ambush_state::color_bank_1_w)
{
- m_color_bank = data & 0x03;
+ m_color_bank = (m_color_bank & 0x02) | (state ? 0x01 : 0x00);
+}
+
+WRITE_LINE_MEMBER(ambush_state::color_bank_2_w)
+{
+ m_color_bank = (m_color_bank & 0x01) | (state ? 0x02 : 0x00);
}
@@ -651,15 +657,20 @@ MACHINE_START_MEMBER( ambush_state, dkong3abl )
m_char_tilemap->set_transparent_pen(0);
}
-WRITE8_MEMBER( ambush_state::coin_counter_w )
+WRITE_LINE_MEMBER(ambush_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(ambush_state::coin_counter_2_w)
{
- machine().bookkeeping().coin_counter_w(0, data & 0x01);
- machine().bookkeeping().coin_counter_w(1, data & 0x02);
+ machine().bookkeeping().coin_counter_w(1, state);
}
-WRITE8_MEMBER( ambush_state::unk_w )
+WRITE8_MEMBER(ambush_state::output_latches_w)
{
- logerror("unk_w: %02x = %02x\n", offset, data);
+ m_outlatch[0]->write_bit(offset, BIT(data, 0));
+ m_outlatch[1]->write_bit(offset, BIT(data, 1));
}
@@ -673,6 +684,15 @@ static MACHINE_CONFIG_START( ambush )
MCFG_CPU_IO_MAP(main_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", ambush_state, irq0_line_hold)
+ // addressable latches at 8B and 8C
+ MCFG_DEVICE_ADD("outlatch1", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ambush_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ambush_state, color_bank_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ambush_state, coin_counter_1_w))
+ MCFG_DEVICE_ADD("outlatch2", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ambush_state, color_bank_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ambush_state, coin_counter_2_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_MACHINE_START_OVERRIDE(ambush_state, ambush)
@@ -703,6 +723,13 @@ static MACHINE_CONFIG_DERIVED( mariobl, ambush )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(bootleg_map)
+ // To be verified: do these bootlegs only have one LS259?
+ MCFG_DEVICE_REMOVE("outlatch1")
+ MCFG_DEVICE_REMOVE("outlatch2")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ambush_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ambush_state, color_bank_1_w))
+
MCFG_MACHINE_START_OVERRIDE(ambush_state, mariobl)
MCFG_SCREEN_MODIFY("screen")
diff --git a/src/mame/drivers/apple2.cpp b/src/mame/drivers/apple2.cpp
index cc75652792b..1e1bd38cea3 100644
--- a/src/mame/drivers/apple2.cpp
+++ b/src/mame/drivers/apple2.cpp
@@ -42,6 +42,7 @@ II Plus: RAM options reduced to 16/32/48 KB.
#include "includes/apple2.h"
#include "video/apple2.h"
+#include "machine/74259.h"
#include "machine/bankdev.h"
#include "imagedev/flopdrv.h"
@@ -112,7 +113,8 @@ public:
m_sysconfig(*this, "a2_config"),
m_speaker(*this, A2_SPEAKER_TAG),
m_cassette(*this, A2_CASSETTE_TAG),
- m_upperbank(*this, A2_UPPERBANK_TAG)
+ m_upperbank(*this, A2_UPPERBANK_TAG),
+ m_softlatch(*this, "softlatch")
{ }
required_device<cpu_device> m_maincpu;
@@ -128,6 +130,7 @@ public:
required_device<speaker_sound_device> m_speaker;
required_device<cassette_image_device> m_cassette;
required_device<address_map_bank_device> m_upperbank;
+ required_device<addressable_latch_device> m_softlatch;
TIMER_DEVICE_CALLBACK_MEMBER(apple2_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(ay3600_repeat);
@@ -143,6 +146,14 @@ public:
DECLARE_WRITE8_MEMBER(ram_w);
DECLARE_READ8_MEMBER(c000_r);
DECLARE_WRITE8_MEMBER(c000_w);
+ DECLARE_WRITE_LINE_MEMBER(txt_w);
+ DECLARE_WRITE_LINE_MEMBER(mix_w);
+ DECLARE_WRITE_LINE_MEMBER(scr_w);
+ DECLARE_WRITE_LINE_MEMBER(res_w);
+ DECLARE_WRITE_LINE_MEMBER(an0_w);
+ DECLARE_WRITE_LINE_MEMBER(an1_w);
+ DECLARE_WRITE_LINE_MEMBER(an2_w);
+ DECLARE_WRITE_LINE_MEMBER(an3_w);
DECLARE_READ8_MEMBER(c080_r);
DECLARE_WRITE8_MEMBER(c080_w);
DECLARE_READ8_MEMBER(c100_r);
@@ -489,70 +500,11 @@ void napple2_state::do_io(address_space &space, int offset)
m_speaker->level_w(m_speaker_state);
break;
- case 0x50: // graphics mode
- machine().first_screen()->update_now();
- m_video->m_graphics = true; break;
-
- case 0x51: // text mode
- machine().first_screen()->update_now();
- m_video->m_graphics = false; break;
-
- case 0x52: // no mix
- machine().first_screen()->update_now();
- m_video->m_mix = false; break;
-
- case 0x53: // mixed mode
- machine().first_screen()->update_now();
- m_video->m_mix = true; break;
-
- case 0x54: // set page 1
- machine().first_screen()->update_now();
- m_page2 = false;
- m_video->m_page2 = false;
- break;
-
- case 0x55: // set page 2
- machine().first_screen()->update_now();
- m_page2 = true;
- m_video->m_page2 = true;
- break;
-
- case 0x56: // select lo-res
- machine().first_screen()->update_now();
- m_video->m_hires = false; break;
-
- case 0x57: // select hi-res
- machine().first_screen()->update_now();
- m_video->m_hires = true; break;
-
- case 0x58: // AN0 off
- m_an0 = false; break;
-
- case 0x59: // AN0 on
- m_an0 = true; break;
-
- case 0x5a: // AN1 off
- m_an1 = false; break;
-
- case 0x5b: // AN1 on
- m_an1 = true; break;
-
- case 0x5c: // AN2 off
- m_an2 = false;
- m_video->m_an2 = false;
+ case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57:
+ case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c: case 0x5d: case 0x5e: case 0x5f:
+ m_softlatch->write_bit((offset & 0x0e) >> 1, offset & 0x01);
break;
- case 0x5d: // AN2 on
- m_an2 = true;
- m_video->m_an2 = true;
- break;
-
- case 0x5e: // AN3 off
- m_an3 = false; break;
-
- case 0x5f: // AN3 on
- m_an3 = true; break;
-
case 0x68: // IIgs STATE register, which ProDOS touches
break;
@@ -566,6 +518,56 @@ void napple2_state::do_io(address_space &space, int offset)
}
}
+WRITE_LINE_MEMBER(napple2_state::txt_w)
+{
+ // select graphics or text mode
+ machine().first_screen()->update_now();
+ m_video->m_graphics = !state;
+}
+
+WRITE_LINE_MEMBER(napple2_state::mix_w)
+{
+ // select mixed mode or nomix
+ machine().first_screen()->update_now();
+ m_video->m_mix = state;
+}
+
+WRITE_LINE_MEMBER(napple2_state::scr_w)
+{
+ // select primary or secondary page
+ machine().first_screen()->update_now();
+ m_page2 = state;
+ m_video->m_page2 = state;
+}
+
+WRITE_LINE_MEMBER(napple2_state::res_w)
+{
+ // select lo-res or hi-res
+ machine().first_screen()->update_now();
+ m_video->m_hires = state;
+}
+
+WRITE_LINE_MEMBER(napple2_state::an0_w)
+{
+ m_an0 = state;
+}
+
+WRITE_LINE_MEMBER(napple2_state::an1_w)
+{
+ m_an1 = state;
+}
+
+WRITE_LINE_MEMBER(napple2_state::an2_w)
+{
+ m_an2 = state;
+ m_video->m_an2 = state;
+}
+
+WRITE_LINE_MEMBER(napple2_state::an3_w)
+{
+ m_an3 = state;
+}
+
READ8_MEMBER(napple2_state::c000_r)
{
switch (offset)
@@ -1345,6 +1347,17 @@ static MACHINE_CONFIG_START( apple2_common )
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x3000)
+ /* soft switches */
+ MCFG_DEVICE_ADD("softlatch", F9334, 0) // F14 (labeled 74LS259 on some boards and in the Apple ][ Reference Manual)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(napple2_state, txt_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(napple2_state, mix_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(napple2_state, scr_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(napple2_state, res_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(napple2_state, an0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(napple2_state, an1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(napple2_state, an2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(napple2_state, an3_w))
+
/* keyboard controller */
MCFG_DEVICE_ADD(A2_KBDC_TAG, AY3600, 0)
MCFG_AY3600_MATRIX_X0(IOPORT("X0"))
diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp
index 27f846467f9..dc883abc49e 100644
--- a/src/mame/drivers/asteroid.cpp
+++ b/src/mame/drivers/asteroid.cpp
@@ -189,6 +189,7 @@ There is not a rev 03 known or dumped. An Asteroids rev 03 is not mentioned in a
#include "includes/asteroid.h"
#include "audio/llander.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "machine/atari_vg.h"
#include "machine/watchdog.h"
#include "sound/discrete.h"
@@ -209,9 +210,19 @@ There is not a rev 03 known or dumped. An Asteroids rev 03 is not mentioned in a
*
*************************************/
-WRITE8_MEMBER(asteroid_state::astdelux_coin_counter_w)
+WRITE_LINE_MEMBER(asteroid_state::coin_counter_left_w)
{
- machine().bookkeeping().coin_counter_w(offset,data);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(asteroid_state::coin_counter_center_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(asteroid_state::coin_counter_right_w)
+{
+ machine().bookkeeping().coin_counter_w(2, state);
}
@@ -253,7 +264,7 @@ static ADDRESS_MAP_START( asteroid_map, AS_PROGRAM, 8, asteroid_state )
AM_RANGE(0x3400, 0x3400) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x3600, 0x3600) AM_WRITE(asteroid_explode_w)
AM_RANGE(0x3a00, 0x3a00) AM_WRITE(asteroid_thump_w)
- AM_RANGE(0x3c00, 0x3c05) AM_WRITE(asteroid_sounds_w)
+ AM_RANGE(0x3c00, 0x3c07) AM_DEVWRITE("audiolatch", ls259_device, write_d7)
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(asteroid_noise_reset_w)
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("vectorram") AM_REGION("maincpu", 0x4000)
AM_RANGE(0x5000, 0x57ff) AM_ROM /* vector rom */
@@ -276,10 +287,7 @@ static ADDRESS_MAP_START( astdelux_map, AS_PROGRAM, 8, asteroid_state )
AM_RANGE(0x3400, 0x3400) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x3600, 0x3600) AM_WRITE(asteroid_explode_w)
AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
- AM_RANGE(0x3c00, 0x3c01) AM_WRITE(astdelux_led_w)
- AM_RANGE(0x3c03, 0x3c03) AM_WRITE(astdelux_sounds_w)
- AM_RANGE(0x3c04, 0x3c04) AM_WRITE(astdelux_bank_switch_w)
- AM_RANGE(0x3c05, 0x3c07) AM_WRITE(astdelux_coin_counter_w)
+ AM_RANGE(0x3c00, 0x3c07) AM_DEVWRITE("audiolatch", ls259_device, write_d7)
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(asteroid_noise_reset_w)
AM_RANGE(0x4000, 0x47ff) AM_RAM AM_SHARE("vectorram") AM_REGION("maincpu", 0x4000)
AM_RANGE(0x4800, 0x57ff) AM_ROM /* vector rom */
@@ -651,6 +659,14 @@ static MACHINE_CONFIG_START( asteroid )
MCFG_CPU_PROGRAM_MAP(asteroid_map)
MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, asteroid_interrupt, CLOCK_3KHZ/12)
+ MCFG_DEVICE_ADD("audiolatch", LS259, 0) // M10
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_SND_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_FIRE_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SAUCER_SEL>))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_THRUST_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_SHIP_FIRE_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ASTEROID_LIFE_EN>))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -686,6 +702,17 @@ static MACHINE_CONFIG_DERIVED( astdelux, asteroid )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(astdelux_map)
+ MCFG_DEVICE_MODIFY("audiolatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(asteroid_state, start1_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(asteroid_state, start2_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP)
+ // Q3 still activates the thrusters
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("ram1"))
+ MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("ram2"))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(asteroid_state, coin_counter_left_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(asteroid_state, coin_counter_center_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(asteroid_state, coin_counter_right_w))
+
MCFG_ATARIVGEAROM_ADD("earom")
/* sound hardware */
@@ -707,6 +734,8 @@ static MACHINE_CONFIG_DERIVED( llander, asteroid )
MCFG_CPU_PROGRAM_MAP(llander_map)
MCFG_CPU_PERIODIC_INT_DRIVER(asteroid_state, llander_interrupt, (double)MASTER_CLOCK/4096/12)
+ MCFG_DEVICE_REMOVE("audiolatch")
+
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_REFRESH_RATE(CLOCK_3KHZ/12/6)
MCFG_SCREEN_VISIBLE_AREA(522, 1566, 270, 1070)
diff --git a/src/mame/drivers/atarisy1.cpp b/src/mame/drivers/atarisy1.cpp
index 2776b61bd0a..675c0cdd6c7 100644
--- a/src/mame/drivers/atarisy1.cpp
+++ b/src/mame/drivers/atarisy1.cpp
@@ -197,7 +197,6 @@ RoadBlasters (aka Future Vette):005*
#include "machine/atarigen.h"
#include "machine/6522via.h"
#include "machine/watchdog.h"
-#include "sound/ym2151.h"
#include "sound/pokey.h"
#include "video/atarimo.h"
#include "speaker.h"
@@ -240,6 +239,13 @@ MACHINE_RESET_MEMBER(atarisy1_state,atarisy1)
}
+WRITE_LINE_MEMBER(atarisy1_state::music_reset_w)
+{
+ // reset the YM2151 and YM3012
+ if (!state)
+ m_ymsnd->reset();
+}
+
/*************************************
*
@@ -411,13 +417,31 @@ READ8_MEMBER(atarisy1_state::via_pb_r)
/*************************************
*
- * Sound LED handlers
+ * LED and coin counter handlers
*
*************************************/
-WRITE8_MEMBER(atarisy1_state::led_w)
+WRITE_LINE_MEMBER(atarisy1_state::led_1_w)
+{
+ machine().output().set_led_value(0, !state);
+}
+
+
+WRITE_LINE_MEMBER(atarisy1_state::led_2_w)
+{
+ machine().output().set_led_value(1, !state);
+}
+
+
+WRITE_LINE_MEMBER(atarisy1_state::coin_counter_right_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(atarisy1_state::coin_counter_left_w)
{
- output().set_led_value(offset, ~data & 1);
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -468,7 +492,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, atarisy1_state )
AM_RANGE(0x1800, 0x1801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x1810, 0x1810) AM_DEVREADWRITE("soundcomm", atari_sound_comm_device, sound_command_r, sound_response_w)
AM_RANGE(0x1820, 0x1820) AM_READ(switch_6502_r)
- AM_RANGE(0x1824, 0x1825) AM_WRITE(led_w)
+ AM_RANGE(0x1820, 0x1827) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0x1870, 0x187f) AM_DEVREADWRITE("pokey", pokey_device, read, write)
AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -723,6 +747,13 @@ static MACHINE_CONFIG_START( atarisy1 )
MCFG_ATARI_EEPROM_2804_ADD("eeprom")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // 15H (TTL) or 14F (LSI)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(atarisy1_state, music_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(atarisy1_state, led_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(atarisy1_state, led_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(atarisy1_state, coin_counter_right_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(atarisy1_state, coin_counter_left_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_TIMER_DRIVER_ADD("joystick_timer", atarisy1_state, delayed_joystick_int)
diff --git a/src/mame/drivers/avalnche.cpp b/src/mame/drivers/avalnche.cpp
index a4960480e4d..a91f4fa5ec4 100644
--- a/src/mame/drivers/avalnche.cpp
+++ b/src/mame/drivers/avalnche.cpp
@@ -33,6 +33,7 @@
#include "emu.h"
#include "includes/avalnche.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/discrete.h"
#include "screen.h"
@@ -87,9 +88,9 @@ uint32_t avalnche_state::screen_update_avalnche(screen_device &screen, bitmap_rg
*
*************************************/
-WRITE8_MEMBER(avalnche_state::avalance_video_invert_w)
+WRITE_LINE_MEMBER(avalnche_state::video_invert_w)
{
- m_avalance_video_inverted = data & 0x01;
+ m_avalance_video_inverted = state;
}
WRITE8_MEMBER(avalnche_state::catch_coin_counter_w)
@@ -98,19 +99,19 @@ WRITE8_MEMBER(avalnche_state::catch_coin_counter_w)
machine().bookkeeping().coin_counter_w(1, data & 2);
}
-WRITE8_MEMBER(avalnche_state::avalance_credit_1_lamp_w)
+WRITE_LINE_MEMBER(avalnche_state::credit_1_lamp_w)
{
- output().set_led_value(0, data & 1);
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(avalnche_state::avalance_credit_2_lamp_w)
+WRITE_LINE_MEMBER(avalnche_state::credit_2_lamp_w)
{
- output().set_led_value(1, data & 1);
+ output().set_led_value(1, state);
}
-WRITE8_MEMBER(avalnche_state::avalance_start_lamp_w)
+WRITE_LINE_MEMBER(avalnche_state::start_lamp_w)
{
- output().set_led_value(2, data & 1);
+ output().set_led_value(2, state);
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, avalnche_state )
@@ -121,12 +122,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, avalnche_state )
AM_RANGE(0x2002, 0x2002) AM_MIRROR(0x0ffc) AM_READ_PORT("PADDLE")
AM_RANGE(0x2003, 0x2003) AM_MIRROR(0x0ffc) AM_READNOP
AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_1_lamp_w)
- AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_attract_enable_w)
- AM_RANGE(0x4002, 0x4002) AM_MIRROR(0x0ff8) AM_WRITE(avalance_video_invert_w)
- AM_RANGE(0x4003, 0x4003) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_2_lamp_w)
- AM_RANGE(0x4004, 0x4006) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_audio_w)
- AM_RANGE(0x4007, 0x4007) AM_MIRROR(0x0ff8) AM_WRITE(avalance_start_lamp_w)
+ AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", f9334_device, write_d0)
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0x0fff) AM_WRITE(avalnche_noise_amplitude_w)
AM_RANGE(0x6000, 0x7fff) AM_ROM
ADDRESS_MAP_END
@@ -139,12 +135,7 @@ static ADDRESS_MAP_START( catch_map, AS_PROGRAM, 8, avalnche_state )
AM_RANGE(0x2002, 0x2002) AM_MIRROR(0x0ffc) AM_READ_PORT("PADDLE")
AM_RANGE(0x2003, 0x2003) AM_MIRROR(0x0ffc) AM_READNOP
AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x0fff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x4000, 0x4000) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_1_lamp_w)
-// AM_RANGE(0x4001, 0x4001) AM_MIRROR(0x0ff8) AM_WRITE(avalnche_attract_enable_w) /* It is attract_enable just like avalnche, but not hooked up yet. */
- AM_RANGE(0x4002, 0x4002) AM_MIRROR(0x0ff8) AM_WRITE(avalance_video_invert_w)
- AM_RANGE(0x4003, 0x4003) AM_MIRROR(0x0ff8) AM_WRITE(avalance_credit_2_lamp_w)
- AM_RANGE(0x4004, 0x4006) AM_MIRROR(0x0ff8) AM_WRITE(catch_audio_w)
- AM_RANGE(0x4007, 0x4007) AM_MIRROR(0x0ff8) AM_WRITE(avalance_start_lamp_w)
+ AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", f9334_device, write_d0)
AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x0fff) AM_WRITE(catch_coin_counter_w)
AM_RANGE(0x7000, 0x7fff) AM_ROM
ADDRESS_MAP_END
@@ -243,7 +234,6 @@ void avalnche_state::machine_start()
void avalnche_state::machine_reset()
{
- m_avalance_video_inverted = 0;
}
static MACHINE_CONFIG_START( avalnche )
@@ -269,6 +259,16 @@ static MACHINE_CONFIG_START( avalnche )
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
MCFG_DISCRETE_INTF(avalnche)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_DEVICE_ADD("latch", F9334, 0) // F8
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(avalnche_state, credit_1_lamp_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_ATTRACT_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(avalnche_state, video_invert_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(avalnche_state, credit_2_lamp_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD0_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD1_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<AVALNCHE_AUD2_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(avalnche_state, start_lamp_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( catch, avalnche )
@@ -281,6 +281,11 @@ static MACHINE_CONFIG_DERIVED( catch, avalnche )
MCFG_DEVICE_REMOVE("discrete")
MCFG_DEVICE_REMOVE("mono")
+ MCFG_DEVICE_MODIFY("latch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // It is attract_enable just like avalnche, but not hooked up yet.
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(avalnche_state, catch_aud0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(avalnche_state, catch_aud1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(avalnche_state, catch_aud2_w))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/bagman.cpp b/src/mame/drivers/bagman.cpp
index 872bd79cdde..de3d13f4cae 100644
--- a/src/mame/drivers/bagman.cpp
+++ b/src/mame/drivers/bagman.cpp
@@ -73,14 +73,11 @@ DIP locations verified for:
void bagman_state::machine_start()
{
+ m_video_enable = true;
+
save_item(NAME(m_irq_mask));
save_item(NAME(m_columnvalue));
-}
-
-MACHINE_START_MEMBER(bagman_state, bagman)
-{
- bagman_state::machine_start();
- save_item(NAME(m_ls259_buf));
+ save_item(NAME(m_video_enable));
}
MACHINE_START_MEMBER(bagman_state, squaitsa)
@@ -96,39 +93,34 @@ MACHINE_START_MEMBER(bagman_state, squaitsa)
WRITE8_MEMBER(bagman_state::ls259_w)
{
pal16r6_w(space, offset,data); /*this is just a simulation*/
+ m_tmslatch->write_bit(offset, data & 1);
+}
- if (m_ls259_buf[offset] != (data&1) )
- {
- m_ls259_buf[offset] = data&1;
-
- switch (offset)
- {
- case 0:
- case 1:
- case 2:
- m_tmsprom->bit_w(space, 0, 7 - ((m_ls259_buf[0]<<2) | (m_ls259_buf[1]<<1) | (m_ls259_buf[2]<<0)));
- break;
- case 3:
- m_tmsprom->enable_w(m_ls259_buf[offset]);
- break;
- case 4:
- m_tmsprom->rom_csq_w(space, 0, m_ls259_buf[offset]);
- break;
- case 5:
- m_tmsprom->rom_csq_w(space, 1, m_ls259_buf[offset]);
- break;
- }
- }
+WRITE_LINE_MEMBER(bagman_state::tmsprom_bit_w)
+{
+ m_tmsprom->bit_w(machine().dummy_space(), 0, 7 - ((m_tmslatch->q0_r()<<2) | (m_tmslatch->q1_r()<<1) | (m_tmslatch->q2_r()<<0)));
+}
+
+WRITE_LINE_MEMBER(bagman_state::tmsprom_csq0_w)
+{
+ m_tmsprom->rom_csq_w(machine().dummy_space(), 0, state);
}
-WRITE8_MEMBER(bagman_state::coincounter_w)
+WRITE_LINE_MEMBER(bagman_state::tmsprom_csq1_w)
{
- machine().bookkeeping().coin_counter_w(offset,data);
+ m_tmsprom->rom_csq_w(machine().dummy_space(), 1, state);
}
-WRITE8_MEMBER(bagman_state::irq_mask_w)
+WRITE_LINE_MEMBER(bagman_state::coin_counter_w)
{
- m_irq_mask = data & 1;
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(bagman_state::irq_mask_w)
+{
+ m_irq_mask = state;
+ if (!state)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bagman_state )
@@ -138,21 +130,16 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bagman_state )
AM_RANGE(0x9800, 0x9bff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */
AM_RANGE(0xa000, 0xa000) AM_READ(pal16r6_r)
- //AM_RANGE(0xa800, 0xa805) AM_READ(bagman_ls259_r) /*just for debugging purposes*/
- AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITE(flipscreen_w)
- AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("video_enable")
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xc000, 0xffff) AM_ROM /* Super Bagman only */
AM_RANGE(0x9800, 0x981f) AM_WRITEONLY AM_SHARE("spriteram") /* hidden portion of color RAM */
/* here only to initialize the pointer, */
/* writes are handled by colorram_w */
- AM_RANGE(0xa800, 0xa805) AM_WRITE(ls259_w) /* TMS5110 driving state machine */
- AM_RANGE(0xa004, 0xa004) AM_WRITE(coincounter_w)
+ AM_RANGE(0xa800, 0xa807) AM_WRITE(ls259_w) /* TMS5110 driving state machine */
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
AM_RANGE(0xb800, 0xb800) AM_READNOP /* looks like watchdog from schematics */
#if 0
- AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* ???? */
AM_RANGE(0xb000, 0xb000) AM_WRITENOP /* ???? */
AM_RANGE(0xb800, 0xb800) AM_WRITENOP /* ???? */
#endif
@@ -169,17 +156,9 @@ static ADDRESS_MAP_START( pickin_map, AS_PROGRAM, 8, bagman_state )
/* here only to initialize the pointer, */
/* writes are handled by colorram_w */
AM_RANGE(0x9c00, 0x9fff) AM_WRITENOP /* written to, but unused */
- AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITE(flipscreen_w)
- AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("video_enable")
- AM_RANGE(0xa004, 0xa004) AM_WRITE(coincounter_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("DSW")
-
- AM_RANGE(0xa005, 0xa005) AM_WRITENOP /* ???? */
- AM_RANGE(0xa006, 0xa006) AM_WRITENOP /* ???? */
- AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* ???? */
-
/* guess */
AM_RANGE(0xb000, 0xb000) AM_DEVWRITE("ay2", ay8910_device, address_w)
AM_RANGE(0xb800, 0xb800) AM_DEVREADWRITE("ay2", ay8910_device, data_r, data_w)
@@ -457,8 +436,8 @@ READ8_MEMBER(bagman_state::dial_input_p2_r)
INTERRUPT_GEN_MEMBER(bagman_state::vblank_irq)
{
- if(m_irq_mask)
- device.execute().set_input_line(0, HOLD_LINE);
+ if (m_irq_mask)
+ device.execute().set_input_line(0, ASSERT_LINE);
}
@@ -470,7 +449,14 @@ static MACHINE_CONFIG_START( bagman )
MCFG_CPU_IO_MAP(main_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq)
- MCFG_MACHINE_START_OVERRIDE(bagman_state, bagman)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 8H
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w))
+ // video enable register not available on earlier hardware revision(s)
+ // Bagman is supposed to have glitches during screen transitions
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ????
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -509,6 +495,19 @@ static MACHINE_CONFIG_START( bagman )
MCFG_TMS5110_M0_CB(DEVWRITELINE("tmsprom", tmsprom_device, m0_w))
MCFG_TMS5110_DATA_CB(DEVREADLINE("tmsprom", tmsprom_device, data_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_DEVICE_ADD("tmslatch", LS259, 0) // 7H
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, tmsprom_bit_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("tmsprom", tmsprom_device, enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, tmsprom_csq0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(bagman_state, tmsprom_csq1_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( sbagman, bagman )
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( pickin )
@@ -519,6 +518,16 @@ static MACHINE_CONFIG_START( pickin )
MCFG_CPU_IO_MAP(main_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ????
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // ????
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ????
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(BAGMAN_HCLK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
@@ -569,6 +578,16 @@ static MACHINE_CONFIG_START( botanic )
MCFG_CPU_IO_MAP(main_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", bagman_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(bagman_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(bagman_state, flipscreen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bagman_state, flipscreen_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bagman_state, video_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bagman_state, coin_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ????
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // ????
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ????
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(BAGMAN_HCLK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
@@ -1014,25 +1033,17 @@ ROM_START( squaitsa )
ROM_LOAD( "mmi6331.3r", 0x0020, 0x0020,CRC(86c1e7db) SHA1(5c974b51d770a555ddab5c23f03a666c6f286cbf) )
ROM_END
-DRIVER_INIT_MEMBER(bagman_state,bagman)
-{
- /* Unmap video enable register, not available on earlier hardware revision(s)
- Bagman is supposed to have glitches during screen transitions */
- m_maincpu->space(AS_PROGRAM).unmap_write(0xa003, 0xa003);
- *m_video_enable = 1;
-}
-
-GAME( 1982, bagman, 0, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Bagman", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bagnard, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Le Bagnard (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bagnarda, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation", "Le Bagnard (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bagnardi, bagman, bagman, bagman, bagman_state, bagman, ROT90, "Valadon Automation (Itisa license)", "Le Bagnard (Itisa, Spain)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bagmans, bagman, bagman, bagmans, bagman_state, bagman, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bagmans2, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, bagmanj, bagman, bagman, bagman, bagman_state, bagman, ROT270, "Valadon Automation (Taito license)", "Bagman (Taito)", MACHINE_SUPPORTS_SAVE ) // title screen actually doesn't mention Valadon, only Stern and Taito
+GAME( 1982, bagman, 0, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Bagman", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bagnard, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Le Bagnard (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bagnarda, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation", "Le Bagnard (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bagnardi, bagman, bagman, bagman, bagman_state, 0, ROT90, "Valadon Automation (Itisa license)", "Le Bagnard (Itisa, Spain)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bagmans, bagman, bagman, bagmans, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bagmans2, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Bagman (Stern Electronics, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bagmanj, bagman, bagman, bagman, bagman_state, 0, ROT270, "Valadon Automation (Taito license)", "Bagman (Taito)", MACHINE_SUPPORTS_SAVE ) // title screen actually doesn't mention Valadon, only Stern and Taito
-GAME( 1984, sbagman, 0, bagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation", "Super Bagman", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, sbagmans, sbagman, bagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Super Bagman (Stern Electronics)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, sbagman, 0, sbagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation", "Super Bagman", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, sbagmans, sbagman, sbagman, sbagman, bagman_state, 0, ROT270, "Valadon Automation (Stern Electronics license)", "Super Bagman (Stern Electronics)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, pickin, 0, pickin, pickin, bagman_state, 0, ROT270, "Valadon Automation", "Pickin'", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/bsktball.cpp b/src/mame/drivers/bsktball.cpp
index acd4c6a3776..a563d6000c2 100644
--- a/src/mame/drivers/bsktball.cpp
+++ b/src/mame/drivers/bsktball.cpp
@@ -28,6 +28,7 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
#include "includes/bsktball.h"
+#include "machine/74259.h"
#include "sound/discrete.h"
#include "screen.h"
#include "speaker.h"
@@ -83,13 +84,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bsktball_state )
AM_RANGE(0x0803, 0x0803) AM_READ_PORT("DSW")
AM_RANGE(0x1000, 0x1000) AM_WRITENOP /* Timer Reset */
AM_RANGE(0x1010, 0x1010) AM_WRITE(bsktball_bounce_w) /* Crowd Amp / Bounce */
- AM_RANGE(0x1022, 0x1023) AM_WRITENOP /* Coin Counter */
- AM_RANGE(0x1024, 0x1025) AM_WRITE(bsktball_led1_w) /* LED 1 */
- AM_RANGE(0x1026, 0x1027) AM_WRITE(bsktball_led2_w) /* LED 2 */
- AM_RANGE(0x1028, 0x1029) AM_WRITE(bsktball_ld1_w) /* LD 1 */
- AM_RANGE(0x102a, 0x102b) AM_WRITE(bsktball_ld2_w) /* LD 2 */
- AM_RANGE(0x102c, 0x102d) AM_WRITE(bsktball_noise_reset_w) /* Noise Reset */
- AM_RANGE(0x102e, 0x102f) AM_WRITE(bsktball_nmion_w) /* NMI On */
+ AM_RANGE(0x1020, 0x102f) AM_DEVWRITE("outlatch", f9334_device, write_a0)
AM_RANGE(0x1030, 0x1030) AM_WRITE(bsktball_note_w) /* Music Ckt Note Dvsr */
AM_RANGE(0x1800, 0x1bbf) AM_RAM_WRITE(bsktball_videoram_w) AM_SHARE("videoram") /* DISPLAY */
AM_RANGE(0x1bc0, 0x1bff) AM_RAM AM_SHARE("motion")
@@ -229,7 +224,6 @@ void bsktball_state::machine_start()
void bsktball_state::machine_reset()
{
- m_nmi_on = 0;
// m_i256v = 0;
m_ld1 = 0;
m_ld2 = 0;
@@ -251,6 +245,14 @@ static MACHINE_CONFIG_START( bsktball )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", bsktball_state, bsktball_scanline, "screen", 0, 1)
+ MCFG_DEVICE_ADD("outlatch", F9334, 0) // M6
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // Coin Counter
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(bsktball_state, led1_w)) // LED 1
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(bsktball_state, led2_w)) // LED 2
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(bsktball_state, ld1_w)) // LD 1
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(bsktball_state, ld2_w)) // LD 2
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<BSKTBALL_NOISE_EN>)) // Noise Reset
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(bsktball_state, nmion_w)) // NMI On
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/canyon.cpp b/src/mame/drivers/canyon.cpp
index ae1ba4e12da..dbef9201d42 100644
--- a/src/mame/drivers/canyon.cpp
+++ b/src/mame/drivers/canyon.cpp
@@ -95,9 +95,20 @@ READ8_MEMBER(canyon_state::canyon_options_r)
*
*************************************/
-WRITE8_MEMBER(canyon_state::canyon_led_w)
+WRITE8_MEMBER(canyon_state::output_latch_w)
{
- output().set_led_value(offset & 0x01, offset & 0x02);
+ // ADR1 = D, ADR8 = A2, ADR7 = A1, ADR0 = A0
+ m_outlatch->write_bit((offset & 0x180) >> 6 | BIT(offset, 0), BIT(offset, 1));
+}
+
+WRITE_LINE_MEMBER(canyon_state::led1_w)
+{
+ output().set_led_value(0, state);
+}
+
+WRITE_LINE_MEMBER(canyon_state::led2_w)
+{
+ output().set_led_value(1, state);
}
@@ -115,9 +126,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, canyon_state )
AM_RANGE(0x0400, 0x0401) AM_WRITE(canyon_motor_w)
AM_RANGE(0x0500, 0x0500) AM_WRITE(canyon_explode_w)
AM_RANGE(0x0501, 0x0501) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* watchdog, disabled in service mode */
- AM_RANGE(0x0600, 0x0603) AM_WRITE(canyon_whistle_w)
- AM_RANGE(0x0680, 0x0683) AM_WRITE(canyon_led_w)
- AM_RANGE(0x0700, 0x0703) AM_WRITE(canyon_attract_w)
+ AM_RANGE(0x0600, 0x0603) AM_SELECT(0x0180) AM_WRITE(output_latch_w)
AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(canyon_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x1000, 0x17ff) AM_READ(canyon_switches_r) AM_WRITENOP /* sloppy code writes here */
AM_RANGE(0x1800, 0x1fff) AM_READ(canyon_options_r)
@@ -245,6 +254,14 @@ static MACHINE_CONFIG_START( canyon )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", canyon_state, nmi_line_pulse)
+ MCFG_DEVICE_ADD("outlatch", F9334, 0) // C7
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_WHISTLE1_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_WHISTLE2_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(canyon_state, led1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(canyon_state, led2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_ATTRACT1_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<CANYON_ATTRACT2_EN>))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp
index f9327dce9ad..459e12f2299 100644
--- a/src/mame/drivers/cclimber.cpp
+++ b/src/mame/drivers/cclimber.cpp
@@ -285,10 +285,9 @@ READ8_MEMBER(cclimber_state::yamato_p1_r)
}
-WRITE8_MEMBER(cclimber_state::toprollr_rombank_w)
+WRITE_LINE_MEMBER(cclimber_state::toprollr_rombank_w)
{
- m_toprollr_rombank &= ~(1 << offset);
- m_toprollr_rombank |= (data & 1) << offset;
+ m_toprollr_rombank = m_mainlatch->q5_r() | (m_mainlatch->q6_r() << 1);
if (m_toprollr_rombank < 3) {
membank("bank1")->set_entry(m_toprollr_rombank);
@@ -296,6 +295,7 @@ WRITE8_MEMBER(cclimber_state::toprollr_rombank_w)
}
}
+#ifdef UNUSED_FUNCTION
MACHINE_RESET_MEMBER(cclimber_state,cclimber)
{
/* Disable interrupts, River Patrol / Silver Land needs this otherwise returns bad RAM on POST */
@@ -303,11 +303,11 @@ MACHINE_RESET_MEMBER(cclimber_state,cclimber)
m_toprollr_rombank = 0;
}
+#endif
-
-WRITE8_MEMBER(cclimber_state::nmi_mask_w)
+WRITE_LINE_MEMBER(cclimber_state::nmi_mask_w)
{
- m_nmi_mask = data & 1;
+ m_nmi_mask = state;
}
@@ -335,10 +335,8 @@ static ADDRESS_MAP_START( cclimber_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl")
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
- AM_RANGE(0xa003, 0xa003) AM_WRITE(nmi_mask_w) //used by Crazy Kong Bootleg with alt levels and speed up
- AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM")
@@ -363,9 +361,8 @@ static ADDRESS_MAP_START( cannonb_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl")
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITE(cannonb_flip_screen_w) AM_SHARE("flip_screen")
- AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM")
@@ -380,10 +377,8 @@ static ADDRESS_MAP_START( swimmer_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x9880, 0x989f) AM_WRITEONLY AM_SHARE("spriteram")
AM_RANGE(0x98fc, 0x98ff) AM_WRITEONLY AM_SHARE("bigspritectrl")
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
- AM_RANGE(0xa003, 0xa003) AM_WRITEONLY AM_SHARE("sidebg_enable")
- AM_RANGE(0xa004, 0xa004) AM_WRITEONLY AM_SHARE("palettebank")
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2")
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1") AM_WRITE(swimmer_sh_soundlatch_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW1")
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW2") AM_WRITEONLY AM_SHARE("bgcolor")
@@ -410,8 +405,8 @@ static ADDRESS_MAP_START( yamato_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl")
AM_RANGE(0x9800, 0x9bff) AM_RAM /* not used, but initialized */
AM_RANGE(0x9c00, 0x9fff) AM_RAM_WRITE(cclimber_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("COIN")
@@ -433,10 +428,8 @@ static ADDRESS_MAP_START( toprollr_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x9880, 0x995f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x99dc, 0x99df) AM_RAM AM_SHARE("bigspritectrl")
AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_SHARE("colorram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
- AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
- AM_RANGE(0xa005, 0xa006) AM_WRITE(toprollr_rombank_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P2") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM")
@@ -457,9 +450,8 @@ static ADDRESS_MAP_START( bagmanf_map, AS_PROGRAM, 8, cclimber_state )
AM_RANGE(0x98dc, 0x98df) AM_RAM AM_SHARE("bigspritectrl") // wrong
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("colorram")
AM_RANGE(0x9c00, 0x9fff) AM_RAM /* not used, but initialized */
- AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xa001, 0xa002) AM_WRITEONLY AM_SHARE("flip_screen")
- AM_RANGE(0xa004, 0xa004) AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_trigger_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ(bagmanf_a000_r)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xa800, 0xa800) AM_READNOP AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_rate_w)
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_DEVWRITE("cclimber_audio", cclimber_audio_device, sample_volume_w)
AM_RANGE(0xb800, 0xb800) AM_READNOP
@@ -1109,7 +1101,10 @@ static MACHINE_CONFIG_START( root )
MCFG_CPU_IO_MAP(cclimber_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq)
- MCFG_MACHINE_RESET_OVERRIDE(cclimber_state,cclimber)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -1129,6 +1124,8 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cclimber, root )
+ MCFG_DEVICE_MODIFY("mainlatch") // 7J on CCG-1
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("cclimber_audio", cclimber_audio_device, sample_trigger_w))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("speaker")
@@ -1141,6 +1138,11 @@ static MACHINE_CONFIG_DERIVED( cclimberx, cclimber )
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( ckongb, cclimber )
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w)) //used by Crazy Kong Bootleg with alt levels and speed up
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( cannonb, cclimber )
@@ -1148,6 +1150,11 @@ static MACHINE_CONFIG_DERIVED( cannonb, cclimber )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(cannonb_map)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(cclimber_state, flip_screen_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // not used
+
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", cannonb)
MACHINE_CONFIG_END
@@ -1204,6 +1211,9 @@ static MACHINE_CONFIG_DERIVED( toprollr, cclimber )
MCFG_SEGACRPT_SET_NUMBANKS(3)
MCFG_SEGACRPT_SET_BANKSIZE(0x6000)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cclimber_state, toprollr_rombank_w))
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", toprollr)
@@ -1224,6 +1234,13 @@ static MACHINE_CONFIG_START( swimmer )
MCFG_CPU_PROGRAM_MAP(swimmer_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cclimber_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cclimber_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cclimber_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cclimber_state, flip_screen_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cclimber_state, sidebg_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cclimber_state, palette_bank_w))
+
MCFG_CPU_ADD("audiocpu", Z80,XTAL_4MHz/2) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(swimmer_audio_map)
MCFG_CPU_IO_MAP(swimmer_audio_portmap)
@@ -2657,7 +2674,7 @@ GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, 0,
GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, 0, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ckongpt2b, ckongpt2, cclimber, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE )
// see bagman.cpp for parent
GAME( 1982, bagmanf, bagman, bagmanf, bagmanf, cclimber_state, 0, ROT270, "bootleg", "Le Bagnard (bootleg on Crazy Kong hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/centiped.cpp b/src/mame/drivers/centiped.cpp
index ef519422deb..bd54516c152 100644
--- a/src/mame/drivers/centiped.cpp
+++ b/src/mame/drivers/centiped.cpp
@@ -419,6 +419,7 @@ each direction to assign the boundries.
#include "cpu/m6502/m6502.h"
#include "cpu/s2650/s2650.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "machine/atari_vg.h"
#include "sound/sn76496.h"
@@ -568,15 +569,15 @@ READ8_MEMBER(centiped_state::milliped_IN2_r)
return data;
}
-WRITE8_MEMBER(centiped_state::input_select_w)
+WRITE_LINE_MEMBER(centiped_state::input_select_w)
{
- m_dsw_select = (~data >> 7) & 1;
+ m_dsw_select = !state;
}
/* used P2 controls if 1, P1 controls if 0 */
-WRITE8_MEMBER(centiped_state::control_select_w)
+WRITE_LINE_MEMBER(centiped_state::control_select_w)
{
- m_control_select = (data >> 7) & 1;
+ m_control_select = state;
}
@@ -616,9 +617,27 @@ READ8_MEMBER(centiped_state::bullsdrt_data_port_r)
*
*************************************/
-WRITE8_MEMBER(centiped_state::led_w)
+WRITE_LINE_MEMBER(centiped_state::led_1_w)
{
- output().set_led_value(offset, ~data & 0x80);
+ output().set_led_value(0, !state);
+}
+
+
+WRITE_LINE_MEMBER(centiped_state::led_2_w)
+{
+ output().set_led_value(1, !state);
+}
+
+
+WRITE_LINE_MEMBER(centiped_state::led_3_w)
+{
+ output().set_led_value(2, !state);
+}
+
+
+WRITE_LINE_MEMBER(centiped_state::led_4_w)
+{
+ output().set_led_value(3, !state);
}
@@ -628,15 +647,27 @@ READ8_MEMBER(centiped_state::caterplr_unknown_r)
}
-WRITE8_MEMBER(centiped_state::coin_count_w)
+WRITE_LINE_MEMBER(centiped_state::coin_counter_left_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(centiped_state::coin_counter_center_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+
+WRITE_LINE_MEMBER(centiped_state::coin_counter_right_w)
{
- machine().bookkeeping().coin_counter_w(offset, data);
+ machine().bookkeeping().coin_counter_w(2, state);
}
-WRITE8_MEMBER(centiped_state::bullsdrt_coin_count_w)
+WRITE_LINE_MEMBER(centiped_state::bullsdrt_coin_count_w)
{
- machine().bookkeeping().coin_counter_w(0, data);
+ machine().bookkeeping().coin_counter_w(0, state);
}
@@ -663,9 +694,7 @@ static ADDRESS_MAP_START( centiped_base_map, AS_PROGRAM, 8, centiped_state )
AM_RANGE(0x1680, 0x1680) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
AM_RANGE(0x1700, 0x173f) AM_DEVREAD("earom", atari_vg_earom_device, read)
AM_RANGE(0x1800, 0x1800) AM_WRITE(irq_ack_w)
- AM_RANGE(0x1c00, 0x1c02) AM_WRITE(coin_count_w)
- AM_RANGE(0x1c03, 0x1c04) AM_WRITE(led_w)
- AM_RANGE(0x1c07, 0x1c07) AM_WRITE(centiped_flip_screen_w)
+ AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x2000, 0x3fff) AM_ROM
ADDRESS_MAP_END
@@ -697,9 +726,7 @@ static ADDRESS_MAP_START( centipdb_map, AS_PROGRAM, 8, centiped_state )
AM_RANGE(0x1680, 0x1680) AM_MIRROR(0x4000) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
AM_RANGE(0x1700, 0x173f) AM_MIRROR(0x4000) AM_DEVREAD("earom", atari_vg_earom_device, read)
AM_RANGE(0x1800, 0x1800) AM_MIRROR(0x4000) AM_WRITE(irq_ack_w)
- AM_RANGE(0x1c00, 0x1c02) AM_MIRROR(0x4000) AM_WRITE(coin_count_w)
- AM_RANGE(0x1c03, 0x1c04) AM_MIRROR(0x4000) AM_WRITE(led_w)
- AM_RANGE(0x1c07, 0x1c07) AM_MIRROR(0x4000) AM_WRITE(centiped_flip_screen_w)
+ AM_RANGE(0x1c00, 0x1c07) AM_MIRROR(0x4000) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x2000, 0x27ff) AM_ROM
AM_RANGE(0x2800, 0x3fff) AM_MIRROR(0x4000) AM_ROM
AM_RANGE(0x6000, 0x67ff) AM_ROM
@@ -752,11 +779,7 @@ static ADDRESS_MAP_START( milliped_map, AS_PROGRAM, 8, centiped_state )
AM_RANGE(0x2011, 0x2011) AM_READ_PORT("IN3")
AM_RANGE(0x2030, 0x2030) AM_DEVREAD("earom", atari_vg_earom_device, read)
AM_RANGE(0x2480, 0x249f) AM_WRITE(milliped_paletteram_w) AM_SHARE("paletteram")
- AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w)
- AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w)
- AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w) /* TBEN */
- AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w)
- AM_RANGE(0x2507, 0x2507) AM_WRITE(control_select_w) /* CNTRLSEL */
+ AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w)
AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x2700, 0x2700) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
@@ -800,11 +823,7 @@ static ADDRESS_MAP_START( multiped_map, AS_PROGRAM, 8, centiped_state )
AM_RANGE(0x2011, 0x2011) AM_READ_PORT("IN3")
AM_RANGE(0x2030, 0x2030) AM_READNOP
AM_RANGE(0x2480, 0x249f) AM_WRITE(milliped_paletteram_w) AM_SHARE("paletteram")
- AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w)
- AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w)
- AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w)
- AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w)
- AM_RANGE(0x2507, 0x2507) AM_WRITE(control_select_w)
+ AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w)
AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x2700, 0x2700) AM_WRITENOP
@@ -875,8 +894,7 @@ static ADDRESS_MAP_START( warlords_map, AS_PROGRAM, 8, centiped_state )
AM_RANGE(0x0c01, 0x0c01) AM_READ_PORT("IN1")
AM_RANGE(0x1000, 0x100f) AM_DEVREADWRITE("pokey", pokey_device, read, write)
AM_RANGE(0x1800, 0x1800) AM_WRITE(irq_ack_w)
- AM_RANGE(0x1c00, 0x1c02) AM_WRITE(coin_count_w)
- AM_RANGE(0x1c03, 0x1c06) AM_WRITE(led_w)
+ AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x5000, 0x7fff) AM_ROM
ADDRESS_MAP_END
@@ -903,10 +921,7 @@ static ADDRESS_MAP_START( mazeinv_map, AS_PROGRAM, 8, centiped_state )
AM_RANGE(0x2020, 0x2020) AM_READ(mazeinv_input_r)
AM_RANGE(0x2030, 0x2030) AM_DEVREAD("earom", atari_vg_earom_device, read)
AM_RANGE(0x2480, 0x249f) AM_WRITE(mazeinv_paletteram_w) AM_SHARE("paletteram")
- AM_RANGE(0x2500, 0x2502) AM_WRITE(coin_count_w)
- AM_RANGE(0x2503, 0x2504) AM_WRITE(led_w)
- AM_RANGE(0x2505, 0x2505) AM_WRITE(input_select_w)
- AM_RANGE(0x2506, 0x2506) AM_WRITE(centiped_flip_screen_w)
+ AM_RANGE(0x2500, 0x2507) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x2580, 0x2583) AM_WRITE(mazeinv_input_select_w)
AM_RANGE(0x2600, 0x2600) AM_WRITE(irq_ack_w)
AM_RANGE(0x2680, 0x2680) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
@@ -933,9 +948,7 @@ static ADDRESS_MAP_START( bullsdrt_map, AS_PROGRAM, 8, centiped_state )
AM_RANGE(0x1280, 0x1280) AM_MIRROR(0x6000) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)
AM_RANGE(0x1300, 0x1300) AM_MIRROR(0x6000) AM_READ_PORT("DSW2")
AM_RANGE(0x1400, 0x140f) AM_MIRROR(0x6000) AM_WRITE(centiped_paletteram_w) AM_SHARE("paletteram")
- AM_RANGE(0x1481, 0x1481) AM_MIRROR(0x6000) AM_WRITE(bullsdrt_coin_count_w)
- AM_RANGE(0x1483, 0x1484) AM_MIRROR(0x6000) AM_WRITE(led_w)
- AM_RANGE(0x1487, 0x1487) AM_MIRROR(0x6000) AM_WRITE(centiped_flip_screen_w)
+ AM_RANGE(0x1480, 0x1487) AM_MIRROR(0x6000) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_NOP
AM_RANGE(0x1800, 0x1bbf) AM_MIRROR(0x6000) AM_WRITE(centiped_videoram_w) AM_SHARE("videoram")
@@ -1692,6 +1705,13 @@ static MACHINE_CONFIG_START( centiped_base )
MCFG_ATARIVGEAROM_ADD("earom")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(centiped_state, coin_counter_left_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(centiped_state, coin_counter_center_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(centiped_state, coin_counter_right_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(centiped_state, led_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(centiped_state, led_2_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* timer */
@@ -1716,6 +1736,9 @@ static MACHINE_CONFIG_DERIVED( centiped, centiped_base )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(centiped_map)
+ MCFG_DEVICE_MODIFY("outlatch") // M10
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1732,6 +1755,9 @@ static MACHINE_CONFIG_DERIVED( caterplr, centiped_base )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(caterplr_map)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1747,6 +1773,9 @@ static MACHINE_CONFIG_DERIVED( centipdb, centiped_base )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(centipdb_map)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1763,6 +1792,9 @@ static MACHINE_CONFIG_DERIVED( magworm, centiped_base )
MCFG_CPU_PROGRAM_MAP(magworm_map)
MCFG_MACHINE_RESET_OVERRIDE(centiped_state,magworm)
+ MCFG_DEVICE_MODIFY("outlatch") // 12A
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -1772,12 +1804,17 @@ static MACHINE_CONFIG_DERIVED( magworm, centiped_base )
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( milliped, centiped )
+static MACHINE_CONFIG_DERIVED( milliped, centiped_base )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(milliped_map)
+ MCFG_DEVICE_MODIFY("outlatch") // 12E
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(centiped_state, input_select_w)) // TBEN
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, control_select_w)) // CNTRLSEL
+
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", milliped)
MCFG_PALETTE_MODIFY("palette")
@@ -1788,7 +1825,9 @@ static MACHINE_CONFIG_DERIVED( milliped, centiped )
MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_milliped)
/* sound hardware */
- MCFG_SOUND_REPLACE("pokey", POKEY, 12096000/8)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_DEVICE_ADD("pokey", POKEY, 12096000/8)
MCFG_POKEY_ALLPOT_R_CB(IOPORT("DSW1"))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
@@ -1809,12 +1848,17 @@ static MACHINE_CONFIG_DERIVED( multiped, milliped )
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( warlords, centiped )
+static MACHINE_CONFIG_DERIVED( warlords, centiped_base )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(warlords_map)
+ // these extra LEDs also appear on Centipede schematics
+ MCFG_DEVICE_MODIFY("outlatch") // P9
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(centiped_state, led_3_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(centiped_state, led_4_w))
+
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", warlords)
MCFG_PALETTE_MODIFY("palette")
@@ -1826,7 +1870,9 @@ static MACHINE_CONFIG_DERIVED( warlords, centiped )
MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_warlords)
/* sound hardware */
- MCFG_SOUND_REPLACE("pokey", POKEY, 12096000/8)
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_DEVICE_ADD("pokey", POKEY, 12096000/8)
MCFG_POKEY_POT0_R_CB(IOPORT("PADDLE0"))
MCFG_POKEY_POT1_R_CB(IOPORT("PADDLE1"))
MCFG_POKEY_POT2_R_CB(IOPORT("PADDLE2"))
@@ -1840,6 +1886,10 @@ static MACHINE_CONFIG_DERIVED( mazeinv, milliped )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(mazeinv_map)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP)
+
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(centiped_state, screen_update_centiped)
MACHINE_CONFIG_END
@@ -1855,6 +1905,12 @@ static MACHINE_CONFIG_START( bullsdrt )
MCFG_ATARIVGEAROM_ADD("earom")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(centiped_state, bullsdrt_coin_count_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(centiped_state, led_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(centiped_state, led_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(centiped_state, flip_screen_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/champbas.cpp b/src/mame/drivers/champbas.cpp
index c30c85745c4..112356e9e6c 100644
--- a/src/mame/drivers/champbas.cpp
+++ b/src/mame/drivers/champbas.cpp
@@ -81,6 +81,7 @@ TODO:
#include "emu.h"
#include "includes/champbas.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -102,9 +103,9 @@ CUSTOM_INPUT_MEMBER(champbas_state::watchdog_bit2)
return (0x10 - m_watchdog->get_vblank_counter()) >> 2 & 1;
}
-WRITE8_MEMBER(champbas_state::irq_enable_w)
+WRITE_LINE_MEMBER(champbas_state::irq_enable_w)
{
- m_irq_mask = data & 1;
+ m_irq_mask = state;
if (!m_irq_mask)
m_maincpu->set_input_line(0, CLEAR_LINE);
@@ -123,15 +124,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(champbas_state::exctsccr_sound_irq)
*
*************************************/
-WRITE8_MEMBER(champbas_state::mcu_switch_w)
+WRITE_LINE_MEMBER(champbas_state::mcu_switch_w)
{
// switch shared RAM between CPU and MCU bus
- m_alpha_8201->bus_dir_w(data & 1);
+ m_alpha_8201->bus_dir_w(state);
}
-WRITE8_MEMBER(champbas_state::mcu_start_w)
+WRITE_LINE_MEMBER(champbas_state::mcu_start_w)
{
- m_alpha_8201->mcu_start_w(data & 1);
+ m_alpha_8201->mcu_start_w(state);
}
/* champbja another protection */
@@ -190,14 +191,7 @@ static ADDRESS_MAP_START( champbas_map, AS_PROGRAM, 8, champbas_state )
AM_RANGE(0xa080, 0xa080) AM_MIRROR(0x0020) AM_READ_PORT("DSW")
AM_RANGE(0xa0c0, 0xa0c0) AM_READ_PORT("SYSTEM")
- AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w)
- AM_RANGE(0xa001, 0xa001) AM_WRITENOP // !WORK board output (no use?)
- AM_RANGE(0xa002, 0xa002) AM_WRITE(gfxbank_w)
- AM_RANGE(0xa003, 0xa003) AM_WRITE(flipscreen_w)
- AM_RANGE(0xa004, 0xa004) AM_WRITE(palette_bank_w)
- AM_RANGE(0xa005, 0xa005) AM_WRITENOP // n.c.
- AM_RANGE(0xa006, 0xa006) AM_WRITENOP // no MCU
- AM_RANGE(0xa007, 0xa007) AM_WRITENOP // no MCU
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xa060, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram")
AM_RANGE(0xa080, 0xa080) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
@@ -207,8 +201,6 @@ ADDRESS_MAP_END
// base map + ALPHA-8x0x protection
static ADDRESS_MAP_START( champbasj_map, AS_PROGRAM, 8, champbas_state )
AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("alpha_8201", alpha_8201_device, ext_ram_r, ext_ram_w)
- AM_RANGE(0xa006, 0xa006) AM_WRITE(mcu_start_w)
- AM_RANGE(0xa007, 0xa007) AM_WRITE(mcu_switch_w)
AM_IMPORT_FROM( champbas_map )
ADDRESS_MAP_END
@@ -231,25 +223,16 @@ static ADDRESS_MAP_START( champbb2_map, AS_PROGRAM, 8, champbas_state )
AM_IMPORT_FROM( champbasj_map )
ADDRESS_MAP_END
-// talbot
-static ADDRESS_MAP_START( talbot_map, AS_PROGRAM, 8, champbas_state )
- AM_RANGE(0xa002, 0xa002) AM_WRITENOP // no gfxbank
- AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank
- AM_IMPORT_FROM( champbasj_map )
-ADDRESS_MAP_END
-
// more sprites in exctsccr
static ADDRESS_MAP_START( exctsccr_map, AS_PROGRAM, 8, champbas_state )
AM_RANGE(0x7000, 0x7001) AM_UNMAP // aysnd is controlled by audiocpu
AM_RANGE(0x7c00, 0x7fff) AM_RAM
- AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank
AM_RANGE(0xa040, 0xa04f) AM_WRITEONLY AM_SHARE("spriteram2")
AM_IMPORT_FROM( champbasj_map )
ADDRESS_MAP_END
// exctsccrb
static ADDRESS_MAP_START( exctsccrb_map, AS_PROGRAM, 8, champbas_state )
- AM_RANGE(0xa004, 0xa004) AM_WRITENOP // no palettebank
AM_RANGE(0xa040, 0xa04f) AM_WRITEONLY AM_SHARE("spriteram2")
AM_IMPORT_FROM( champbasj_map )
ADDRESS_MAP_END
@@ -524,9 +507,19 @@ static MACHINE_CONFIG_START( talbot )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6)
- MCFG_CPU_PROGRAM_MAP(talbot_map)
+ MCFG_CPU_PROGRAM_MAP(champbasj_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // no gfxbank
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
+
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_18_432MHz/6/8)
MCFG_QUANTUM_PERFECT_CPU("alpha_8201:mcu")
@@ -564,6 +557,16 @@ static MACHINE_CONFIG_START( champbas )
MCFG_CPU_PROGRAM_MAP(champbas_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 9D; 8G on Champion Baseball II Double Board Configuration
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(champbas_state, palette_bank_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // no MCU
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // no MCU
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6)
MCFG_CPU_PROGRAM_MAP(champbas_sound_map)
@@ -603,6 +606,10 @@ static MACHINE_CONFIG_DERIVED( champbasj, champbas )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(champbasj_map)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
+
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_18_432MHz/6/8) // note: 8302 rom on champbb2 (same device!)
MCFG_QUANTUM_PERFECT_CPU("alpha_8201:mcu")
MACHINE_CONFIG_END
@@ -636,6 +643,16 @@ static MACHINE_CONFIG_START( exctsccr )
MCFG_CPU_PROGRAM_MAP(exctsccr_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_14_31818MHz/4 )
MCFG_CPU_PROGRAM_MAP(exctsccr_sound_map)
MCFG_CPU_IO_MAP(exctsccr_sound_io_map)
@@ -697,6 +714,16 @@ static MACHINE_CONFIG_START( exctsccrb )
MCFG_CPU_PROGRAM_MAP(exctsccrb_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(champbas_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // !WORK board output (no use?)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(champbas_state, gfxbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(champbas_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // no palettebank
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // n.c.
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(champbas_state, mcu_start_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(champbas_state, mcu_switch_w))
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_18_432MHz/6)
MCFG_CPU_PROGRAM_MAP(champbas_sound_map)
diff --git a/src/mame/drivers/changela.cpp b/src/mame/drivers/changela.cpp
index 3d34527dea0..8f156361f56 100644
--- a/src/mame/drivers/changela.cpp
+++ b/src/mame/drivers/changela.cpp
@@ -14,6 +14,7 @@ Tomasz Slanina
#include "includes/changela.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "speaker.h"
@@ -132,24 +133,29 @@ READ8_MEMBER(changela_state::changela_2d_r)
return (ioport("IN1")->read() & 0x20) | gas | (v8 << 4);
}
-WRITE8_MEMBER(changela_state::mcu_pc_0_w)
+WRITE_LINE_MEMBER(changela_state::mcu_pc_0_w)
{
- m_mcu->pc_w(space, 0, 0xfe | (data & 0x01));
+ m_mcu->pc_w(machine().dummy_space(), 0, 0xfe | state);
}
-WRITE8_MEMBER(changela_state::changela_collision_reset_0)
+WRITE_LINE_MEMBER(changela_state::collision_reset_0_w)
{
- m_collision_reset = data & 0x01;
+ m_collision_reset = state;
}
-WRITE8_MEMBER(changela_state::changela_collision_reset_1)
+WRITE_LINE_MEMBER(changela_state::collision_reset_1_w)
{
- m_tree_collision_reset = data & 0x01;
+ m_tree_collision_reset = state;
}
-WRITE8_MEMBER(changela_state::changela_coin_counter_w)
+WRITE_LINE_MEMBER(changela_state::coin_counter_1_w)
{
- machine().bookkeeping().coin_counter_w(offset, data);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(changela_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -172,14 +178,11 @@ static ADDRESS_MAP_START( changela_map, AS_PROGRAM, 8, changela_state )
AM_RANGE(0xd010, 0xd011) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w)
/* LS259 - U44 */
- AM_RANGE(0xd020, 0xd020) AM_WRITE(changela_collision_reset_0)
- AM_RANGE(0xd021, 0xd022) AM_WRITE(changela_coin_counter_w)
-//AM_RANGE(0xd023, 0xd023) AM_WRITENOP
+ AM_RANGE(0xd020, 0xd027) AM_DEVWRITE("outlatch", ls259_device, write_d0)
/* LS139 - U24 */
- AM_RANGE(0xd024, 0xd024) AM_READWRITE(changela_24_r, mcu_pc_0_w)
- AM_RANGE(0xd025, 0xd025) AM_READWRITE(changela_25_r, changela_collision_reset_1)
- AM_RANGE(0xd026, 0xd026) AM_WRITENOP
+ AM_RANGE(0xd024, 0xd024) AM_READ(changela_24_r)
+ AM_RANGE(0xd025, 0xd025) AM_READ(changela_25_r)
AM_RANGE(0xd028, 0xd028) AM_READ(mcu_r)
AM_RANGE(0xd02c, 0xd02c) AM_READ(changela_2c_r)
AM_RANGE(0xd02d, 0xd02d) AM_READ(changela_2d_r)
@@ -419,6 +422,13 @@ static MACHINE_CONFIG_START( changela )
MCFG_M68705_PORTC_W_CB(WRITE8(changela_state, changela_68705_port_c_w))
MCFG_CPU_VBLANK_INT_DRIVER("screen", changela_state, chl_mcu_irq)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // U44 on Sound I/O Board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(changela_state, collision_reset_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(changela_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(changela_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(changela_state, mcu_pc_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(changela_state, collision_reset_1_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/cinemat.cpp b/src/mame/drivers/cinemat.cpp
index 0915588d3db..bfe709854a6 100644
--- a/src/mame/drivers/cinemat.cpp
+++ b/src/mame/drivers/cinemat.cpp
@@ -120,19 +120,17 @@ READ8_MEMBER(cinemat_state::coin_input_r)
*
*************************************/
-WRITE8_MEMBER(cinemat_state::coin_reset_w)
+WRITE_LINE_MEMBER(cinemat_state::coin_reset_w)
{
/* on the rising edge of a coin reset, clear the coin_detected flag */
- if (m_coin_last_reset != data && data != 0)
+ if (state)
m_coin_detected = 0;
- m_coin_last_reset = data;
}
-WRITE8_MEMBER(cinemat_state::mux_select_w)
+WRITE_LINE_MEMBER(cinemat_state::mux_select_w)
{
- m_mux_select = data;
- cinemat_sound_control_w(space, 0x07, data);
+ m_mux_select = state;
}
@@ -272,7 +270,7 @@ READ8_MEMBER(cinemat_state::qb3_frame_r)
}
-WRITE8_MEMBER(cinemat_state::qb3_ram_bank_w)
+WRITE_LINE_MEMBER(cinemat_state::qb3_ram_bank_w)
{
membank("bank1")->set_entry(m_maincpu->state_int(ccpu_cpu_device::CCPU_P) & 3);
}
@@ -321,9 +319,7 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8, cinemat_state )
AM_RANGE(0x10, 0x16) AM_READ(switches_r)
AM_RANGE(0x17, 0x17) AM_READ(coin_input_r)
- AM_RANGE(0x05, 0x05) AM_WRITE(coin_reset_w)
- AM_RANGE(0x06, 0x06) AM_WRITE(cinemat_vector_control_w)
- AM_RANGE(0x00, 0x07) AM_WRITE(cinemat_sound_control_w)
+ AM_RANGE(0x00, 0x07) AM_DEVWRITE("outlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -968,6 +964,10 @@ static MACHINE_CONFIG_START( cinemat_nojmi_4k )
MCFG_CPU_DATA_MAP(data_map)
MCFG_CPU_IO_MAP(io_map)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // 7J on CCG-1
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cinemat_state, coin_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cinemat_state, vector_control_w))
+
/* video hardware */
MCFG_VECTOR_ADD("vector")
MCFG_SCREEN_ADD("screen", VECTOR)
@@ -1048,6 +1048,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tailg, cinemat_nojmi_8k )
MCFG_FRAGMENT_ADD(tailg_sound)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, mux_select_w))
MACHINE_CONFIG_END
@@ -1082,6 +1085,9 @@ static MACHINE_CONFIG_DERIVED( boxingb, cinemat_jmi_32k )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA(0, 1024, 0, 788)
MCFG_VIDEO_START_OVERRIDE(cinemat_state,cinemat_color)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cinemat_state, mux_select_w))
MACHINE_CONFIG_END
@@ -1112,6 +1118,9 @@ static MACHINE_CONFIG_DERIVED( qb3, cinemat_jmi_32k )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA(0, 1120, 0, 780)
MCFG_VIDEO_START_OVERRIDE(cinemat_state,cinemat_qb3color)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cinemat_state, qb3_ram_bank_w))
MACHINE_CONFIG_END
@@ -1434,23 +1443,15 @@ DRIVER_INIT_MEMBER(cinemat_state,sundance)
}
-DRIVER_INIT_MEMBER(cinemat_state,tailg)
-{
- m_maincpu->space(AS_IO).install_write_handler(0x07, 0x07, write8_delegate(FUNC(cinemat_state::mux_select_w),this));
-}
-
-
DRIVER_INIT_MEMBER(cinemat_state,boxingb)
{
m_maincpu->space(AS_IO).install_read_handler(0x0c, 0x0f, read8_delegate(FUNC(cinemat_state::boxingb_dial_r),this));
- m_maincpu->space(AS_IO).install_write_handler(0x07, 0x07, write8_delegate(FUNC(cinemat_state::mux_select_w),this));
}
DRIVER_INIT_MEMBER(cinemat_state,qb3)
{
m_maincpu->space(AS_IO).install_read_handler(0x0f, 0x0f, read8_delegate(FUNC(cinemat_state::qb3_frame_r),this));
- m_maincpu->space(AS_IO).install_write_handler(0x00, 0x00, write8_delegate(FUNC(cinemat_state::qb3_ram_bank_w),this));
membank("bank1")->configure_entries(0, 4, m_rambase, 0x100*2);
}
@@ -1469,7 +1470,7 @@ GAMEL(1979, barrier, 0, barrier, barrier, cinemat_state, 0, ORIE
GAME( 1979, speedfrk, 0, speedfrk, speedfrk, cinemat_state, speedfrk, ORIENTATION_FLIP_Y, "Vectorbeam", "Speed Freak", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1979, starhawk, 0, starhawk, starhawk, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Star Hawk", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAMEL(1979, sundance, 0, sundance, sundance, cinemat_state, sundance, ORIENTATION_FLIP_X ^ ROT270, "Cinematronics", "Sundance", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_sundance )
-GAMEL(1979, tailg, 0, tailg, tailg, cinemat_state, tailg, ORIENTATION_FLIP_Y, "Cinematronics", "Tailgunner", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_tailg )
+GAMEL(1979, tailg, 0, tailg, tailg, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Tailgunner", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_tailg )
GAME( 1979, warrior, 0, warrior, warrior, cinemat_state, 0, ORIENTATION_FLIP_Y, "Vectorbeam", "Warrior", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAMEL(1980, armora, 0, armora, armora, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_armora )
GAMEL(1980, armorap, armora, armora, armora, cinemat_state, 0, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack (prototype)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_armora )
diff --git a/src/mame/drivers/cloak.cpp b/src/mame/drivers/cloak.cpp
index ecaba50da9f..71ead7ea5dc 100644
--- a/src/mame/drivers/cloak.cpp
+++ b/src/mame/drivers/cloak.cpp
@@ -43,7 +43,7 @@
3200-327F: (W) Color RAM, Address bit 6 becomes the 9th bit of color RAM
3800: (W) Right Coin Counter
- 3801: (W) Left Coint Counter
+ 3801: (W) Left Coin Counter
3803: (W) Cocktail Output
3806: (W) Start 2 LED
3807: (W) Start 1 LED
@@ -121,6 +121,7 @@
#include "cpu/m6502/m6502.h"
#include "sound/pokey.h"
+#include "machine/74259.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "speaker.h"
@@ -132,14 +133,24 @@
*
*************************************/
-WRITE8_MEMBER(cloak_state::cloak_led_w)
+WRITE_LINE_MEMBER(cloak_state::start_led_1_w)
{
- output().set_led_value(1 - offset, ~data & 0x80);
+ output().set_led_value(0, !state);
}
-WRITE8_MEMBER(cloak_state::cloak_coin_counter_w)
+WRITE_LINE_MEMBER(cloak_state::start_led_2_w)
{
- machine().bookkeeping().coin_counter_w(1 - offset, data & 0x80);
+ output().set_led_value(1, !state);
+}
+
+WRITE_LINE_MEMBER(cloak_state::coin_counter_l_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(cloak_state::coin_counter_r_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
WRITE8_MEMBER(cloak_state::cloak_custom_w)
@@ -183,10 +194,7 @@ static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, cloak_state )
AM_RANGE(0x2f00, 0x2fff) AM_NOP
AM_RANGE(0x3000, 0x30ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x3200, 0x327f) AM_WRITE(cloak_paletteram_w)
- AM_RANGE(0x3800, 0x3801) AM_WRITE(cloak_coin_counter_w)
- AM_RANGE(0x3803, 0x3803) AM_WRITE(cloak_flipscreen_w)
- AM_RANGE(0x3805, 0x3805) AM_WRITENOP // ???
- AM_RANGE(0x3806, 0x3807) AM_WRITE(cloak_led_w)
+ AM_RANGE(0x3800, 0x3807) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x3c00, 0x3c00) AM_WRITE(cloak_irq_reset_0_w)
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(cloak_nvram_enable_w)
@@ -328,6 +336,14 @@ static MACHINE_CONFIG_START( cloak )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // 10B
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cloak_state, coin_counter_r_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cloak_state, coin_counter_l_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cloak_state, cocktail_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cloak_state, start_led_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(cloak_state, start_led_1_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/cloud9.cpp b/src/mame/drivers/cloud9.cpp
index 3137af7189d..b0dff16b242 100644
--- a/src/mame/drivers/cloud9.cpp
+++ b/src/mame/drivers/cloud9.cpp
@@ -216,15 +216,27 @@ WRITE8_MEMBER(cloud9_state::irq_ack_w)
}
-WRITE8_MEMBER(cloud9_state::cloud9_led_w)
+WRITE_LINE_MEMBER(cloud9_state::led1_w)
{
- output().set_led_value(offset, ~data & 0x80);
+ output().set_led_value(0, !state);
}
-WRITE8_MEMBER(cloud9_state::cloud9_coin_counter_w)
+WRITE_LINE_MEMBER(cloud9_state::led2_w)
{
- machine().bookkeeping().coin_counter_w(offset, data & 0x80);
+ output().set_led_value(1, !state);
+}
+
+
+WRITE_LINE_MEMBER(cloud9_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(cloud9_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -272,9 +284,8 @@ static ADDRESS_MAP_START( cloud9_map, AS_PROGRAM, 8, cloud9_state )
AM_RANGE(0x5400, 0x547f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x5480, 0x54ff) AM_WRITE(irq_ack_w)
AM_RANGE(0x5500, 0x557f) AM_RAM_WRITE(cloud9_paletteram_w) AM_SHARE("paletteram")
- AM_RANGE(0x5580, 0x5587) AM_MIRROR(0x0078) AM_WRITE(cloud9_video_control_w)
- AM_RANGE(0x5600, 0x5601) AM_MIRROR(0x0078) AM_WRITE(cloud9_coin_counter_w)
- AM_RANGE(0x5602, 0x5603) AM_MIRROR(0x0078) AM_WRITE(cloud9_led_w)
+ AM_RANGE(0x5580, 0x5587) AM_MIRROR(0x0078) AM_DEVWRITE("videolatch", ls259_device, write_d7) // video control registers
+ AM_RANGE(0x5600, 0x5607) AM_MIRROR(0x0078) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x5680, 0x56ff) AM_WRITE(nvram_store_w)
AM_RANGE(0x5700, 0x577f) AM_WRITE(nvram_recall_w)
AM_RANGE(0x5800, 0x5800) AM_MIRROR(0x007e) AM_READ_PORT("IN0")
@@ -410,6 +421,12 @@ static MACHINE_CONFIG_START( cloud9 )
MCFG_CPU_ADD("maincpu", M6502, MASTER_CLOCK/8)
MCFG_CPU_PROGRAM_MAP(cloud9_map)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cloud9_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cloud9_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cloud9_state, led1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cloud9_state, led2_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
@@ -427,6 +444,8 @@ static MACHINE_CONFIG_START( cloud9 )
MCFG_SCREEN_UPDATE_DRIVER(cloud9_state, screen_update_cloud9)
MCFG_SCREEN_PALETTE("palette")
+ MCFG_DEVICE_ADD("videolatch", LS259, 0)
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/clshroad.cpp b/src/mame/drivers/clshroad.cpp
index 211921ebc71..5eb316ab9f2 100644
--- a/src/mame/drivers/clshroad.cpp
+++ b/src/mame/drivers/clshroad.cpp
@@ -31,6 +31,7 @@ TODO:
#include "audio/wiping.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "screen.h"
#include "speaker.h"
@@ -58,19 +59,14 @@ READ8_MEMBER(clshroad_state::input_r)
// irq/reset controls like in wiping.cpp
-WRITE8_MEMBER(clshroad_state::subcpu_reset_w)
+WRITE_LINE_MEMBER(clshroad_state::main_irq_mask_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
+ m_main_irq_mask = state;
}
-WRITE8_MEMBER(clshroad_state::main_irq_mask_w)
+WRITE_LINE_MEMBER(clshroad_state::sound_irq_mask_w)
{
- m_main_irq_mask = data & 1;
-}
-
-WRITE8_MEMBER(clshroad_state::sound_irq_mask_w)
-{
- m_sound_irq_mask = data & 1;
+ m_sound_irq_mask = state;
}
@@ -80,9 +76,7 @@ static ADDRESS_MAP_START( clshroad_map, AS_PROGRAM, 8, clshroad_state )
AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x9800, 0x9dff) AM_RAM
AM_RANGE(0x9e00, 0x9fff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xa000, 0xa000) AM_WRITE(subcpu_reset_w)
- AM_RANGE(0xa001, 0xa001) AM_WRITE(main_irq_mask_w)
- AM_RANGE(0xa004, 0xa004) AM_WRITE(flipscreen_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xa100, 0xa107) AM_READ(input_r)
AM_RANGE(0xa800, 0xafff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1
AM_RANGE(0xb000, 0xb003) AM_WRITEONLY AM_SHARE("vregs") // Scroll
@@ -93,7 +87,7 @@ static ADDRESS_MAP_START( clshroad_sound_map, AS_PROGRAM, 8, clshroad_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x4000, 0x7fff) AM_DEVWRITE("custom", wiping_sound_device, sound_w)
AM_RANGE(0x9600, 0x97ff) AM_RAM AM_SHARE("share1")
- AM_RANGE(0xa003, 0xa003) AM_WRITE(sound_irq_mask_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -287,6 +281,12 @@ static MACHINE_CONFIG_START( firebatl )
MCFG_CPU_PROGRAM_MAP(clshroad_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(clshroad_state, main_irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(clshroad_state, sound_irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(clshroad_state, flipscreen_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -322,6 +322,12 @@ static MACHINE_CONFIG_START( clshroad )
//MCFG_CPU_VBLANK_INT_DRIVER("screen", clshroad_state, irq0_line_hold) /* IRQ, no NMI */
MCFG_CPU_PERIODIC_INT_DRIVER(clshroad_state, sound_timer_irq, 60) /* periodic interrupt, don't know about the frequency */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // never writes here?
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(clshroad_state, main_irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(clshroad_state, sound_irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(clshroad_state, flipscreen_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/copsnrob.cpp b/src/mame/drivers/copsnrob.cpp
index 8d6fab5b159..fb9be71f90f 100644
--- a/src/mame/drivers/copsnrob.cpp
+++ b/src/mame/drivers/copsnrob.cpp
@@ -60,7 +60,6 @@ Added Dip locations according to manual.
#include "includes/copsnrob.h"
#include "cpu/m6502/m6502.h"
-#include "speaker.h"
#include "copsnrob.lh"
@@ -94,7 +93,7 @@ WRITE8_MEMBER(copsnrob_state::copsnrob_misc2_w)
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, copsnrob_state )
ADDRESS_MAP_GLOBAL_MASK(0x1fff)
AM_RANGE(0x0000, 0x01ff) AM_RAM
- AM_RANGE(0x0500, 0x0507) AM_WRITE(copsnrob_misc_w)
+ AM_RANGE(0x0500, 0x0507) AM_DEVWRITE("latch", f9334_device, write_d0)
AM_RANGE(0x0600, 0x0600) AM_WRITEONLY AM_SHARE("trucky")
AM_RANGE(0x0700, 0x07ff) AM_WRITEONLY AM_SHARE("truckram")
AM_RANGE(0x0800, 0x08ff) AM_RAM AM_SHARE("bulletsram")
@@ -265,13 +264,7 @@ static MACHINE_CONFIG_START( copsnrob )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", copsnrob)
MCFG_PALETTE_ADD_MONOCHROME("palette")
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
-
- MCFG_SOUND_ADD("discrete", DISCRETE, 0)
- MCFG_DISCRETE_INTF(copsnrob)
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+ MCFG_FRAGMENT_ADD(copsnrob_audio)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/cortex.cpp b/src/mame/drivers/cortex.cpp
index 628f58b0307..a92bb5ddf7b 100644
--- a/src/mame/drivers/cortex.cpp
+++ b/src/mame/drivers/cortex.cpp
@@ -25,6 +25,7 @@
#include "emu.h"
#include "cpu/tms9900/tms9995.h"
+#include "machine/74259.h"
#include "video/tms9928a.h"
class cortex_state : public driver_device
@@ -51,8 +52,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( cortex_io, AS_IO, 8, cortex_state )
ADDRESS_MAP_UNMAP_HIGH
- //AM_RANGE(0x0000, 0x000f) AM_READWRITE(pio_r,pio_w)
- //AM_RANGE(0x0010, 0x001f) AM_READ(keyboard_r)
+ AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0030) AM_DEVWRITE("control", ls259_device, write_a0)
+ //AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x0020) AM_READ(pio_r)
+ //AM_RANGE(0x0010, 0x001f) AM_MIRROR(0x0020) AM_READ(keyboard_r)
//AM_RANGE(0x0080, 0x00bf) AM_READWRITE(rs232_r,rs232_w)
//AM_RANGE(0x0180, 0x01bf) AM_READWRITE(cass_r,cass_w)
//AM_RANGE(0x0800, 0x080f) AM_WRITE(cent_data_w)
@@ -81,6 +83,15 @@ static MACHINE_CONFIG_START( cortex )
// No lines connected yet
MCFG_TMS99xx_ADD("maincpu", TMS9995, 12000000, cortex_mem, cortex_io)
+ MCFG_DEVICE_ADD("control", LS259, 0) // IC64
+ //MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(cortex_state, basic_led_w))
+ //MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(cortex_state, keyboard_ack_w))
+ //MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(cortex_state, ebus_int_ack_w))
+ //MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(cortex_state, ebus_to_en_w))
+ //MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(cortex_state, disk_size_w))
+ //MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(cortex_state, eprom_on_off_w))
+ //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(cortex_state, bell_en_w))
+
/* video hardware */
MCFG_DEVICE_ADD( "tms9928a", TMS9929A, XTAL_10_738635MHz / 2 )
MCFG_TMS9928A_VRAM_SIZE(0x4000)
diff --git a/src/mame/drivers/crgolf.cpp b/src/mame/drivers/crgolf.cpp
index cbfc7c691a4..8396adabafc 100644
--- a/src/mame/drivers/crgolf.cpp
+++ b/src/mame/drivers/crgolf.cpp
@@ -93,6 +93,7 @@ protected or a snippet should do the aforementioned string copy.
#include "includes/crgolf.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
#include "screen.h"
@@ -128,6 +129,10 @@ void crgolf_state::machine_start()
save_item(NAME(m_sound_to_main_data));
save_item(NAME(m_sample_offset));
save_item(NAME(m_sample_count));
+ save_item(NAME(m_color_select));
+ save_item(NAME(m_screen_flip));
+ save_item(NAME(m_screena_enable));
+ save_item(NAME(m_screenb_enable));
}
@@ -290,10 +295,34 @@ WRITE8_MEMBER(crgolf_state::crgolfhi_sample_w)
}
}
-WRITE8_MEMBER(crgolf_state::screen_select_w)
+
+WRITE_LINE_MEMBER(crgolf_state::color_select_w)
+{
+ m_color_select = state;
+}
+
+
+WRITE_LINE_MEMBER(crgolf_state::screen_flip_w)
+{
+ m_screen_flip = state;
+}
+
+
+WRITE_LINE_MEMBER(crgolf_state::screen_select_w)
+{
+ m_vrambank->set_bank(state);
+}
+
+
+WRITE_LINE_MEMBER(crgolf_state::screena_enable_w)
+{
+ m_screena_enable = state;
+}
+
+
+WRITE_LINE_MEMBER(crgolf_state::screenb_enable_w)
{
-// if (data & 0xfe) printf("vram_page_select_w %02x\n", data);
- m_vrambank->set_bank(data & 0x1);
+ m_screenb_enable = state;
}
@@ -308,11 +337,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, crgolf_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x5fff) AM_RAM
AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1")
- AM_RANGE(0x8003, 0x8003) AM_WRITEONLY AM_SHARE("color_select")
- AM_RANGE(0x8004, 0x8004) AM_WRITEONLY AM_SHARE("screen_flip")
- AM_RANGE(0x8005, 0x8005) AM_WRITE( screen_select_w )
- AM_RANGE(0x8006, 0x8006) AM_WRITEONLY AM_SHARE("screenb_enable")
- AM_RANGE(0x8007, 0x8007) AM_WRITEONLY AM_SHARE("screena_enable")
+ AM_RANGE(0x8000, 0x8007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x8800, 0x8800) AM_READWRITE(sound_to_main_r, main_to_sound_w)
AM_RANGE(0x9000, 0x9000) AM_WRITE(rom_bank_select_w)
AM_RANGE(0xa000, 0xffff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
@@ -357,13 +382,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( mastrglf_io, AS_IO, 8, crgolf_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
-
- AM_RANGE(0x03, 0x03) AM_WRITEONLY AM_SHARE("color_select")
- AM_RANGE(0x04, 0x04) AM_WRITEONLY AM_SHARE("screen_flip")
- AM_RANGE(0x05, 0x05) AM_WRITE( screen_select_w )
- AM_RANGE(0x06, 0x06) AM_WRITEONLY AM_SHARE("screenb_enable")
- AM_RANGE(0x07, 0x07) AM_WRITEONLY AM_SHARE("screena_enable")
-
+ AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
// AM_RANGE(0x20, 0x20) AM_WRITE( main_to_sound_w )
AM_RANGE(0x40, 0x40) AM_WRITE( main_to_sound_w )
AM_RANGE(0xa0, 0xa0) AM_READ( sound_to_main_r )
@@ -505,6 +524,13 @@ static MACHINE_CONFIG_START( crgolf )
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 1H
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(crgolf_state, color_select_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(crgolf_state, screen_flip_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(crgolf_state, screen_select_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(crgolf_state, screenb_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(crgolf_state, screena_enable_w))
+
MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(vrambank_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp
index 551e2e4f2ef..00c703222d6 100644
--- a/src/mame/drivers/ddenlovr.cpp
+++ b/src/mame/drivers/ddenlovr.cpp
@@ -4264,10 +4264,7 @@ static ADDRESS_MAP_START( htengoku_io_map, AS_IO, 8, ddenlovr_state )
AM_RANGE( 0xc4, 0xc4 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
AM_RANGE( 0xc5, 0xc5 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer
AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(htengoku_blit_romregion_w) // Blitter ROM bank
- AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(yarunara_flipscreen_w)
- AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(yarunara_layer_half2_w) //
- AM_RANGE( 0xe5, 0xe5 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
+ AM_RANGE( 0xe0, 0xe7 ) AM_WRITE(yarunara_mainlatch_w)
ADDRESS_MAP_END
/***************************************************************************
@@ -4296,6 +4293,12 @@ static MACHINE_CONFIG_START( htengoku )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w)) // half of the interleaved layer to write to
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w)) //
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) // Blitter IRQ Ack
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/destroyr.cpp b/src/mame/drivers/destroyr.cpp
index 16b073f793e..2536265cba0 100644
--- a/src/mame/drivers/destroyr.cpp
+++ b/src/mame/drivers/destroyr.cpp
@@ -14,6 +14,7 @@ TODO:
#include "emu.h"
#include "cpu/m6800/m6800.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "screen.h"
@@ -68,7 +69,8 @@ public:
DECLARE_WRITE8_MEMBER(misc_w);
DECLARE_WRITE8_MEMBER(cursor_load_w);
DECLARE_WRITE8_MEMBER(interrupt_ack_w);
- DECLARE_WRITE8_MEMBER(output_w);
+ DECLARE_WRITE_LINE_MEMBER(led0_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
DECLARE_READ8_MEMBER(input_r);
DECLARE_READ8_MEMBER(scanline_r);
@@ -244,37 +246,15 @@ WRITE8_MEMBER(destroyr_state::interrupt_ack_w)
}
-WRITE8_MEMBER(destroyr_state::output_w)
+WRITE_LINE_MEMBER(destroyr_state::led0_w)
{
- if (offset & 8) misc_w(space, 8, data);
+ output().set_led_value(0, state);
+}
- else switch (offset & 7)
- {
- case 0:
- output().set_led_value(0, data & 1);
- break;
- case 1:
- output().set_led_value(1, data & 1); /* no second LED present on cab */
- break;
- case 2:
- /* bit 0 => songate */
- break;
- case 3:
- /* bit 0 => launch */
- break;
- case 4:
- /* bit 0 => explosion */
- break;
- case 5:
- /* bit 0 => sonar */
- break;
- case 6:
- /* bit 0 => high explosion */
- break;
- case 7:
- /* bit 0 => low explosion */
- break;
- }
+
+WRITE_LINE_MEMBER(destroyr_state::led1_w)
+{
+ output().set_led_value(1, state); /* no second LED present on cab */
}
@@ -308,7 +288,9 @@ READ8_MEMBER(destroyr_state::scanline_r)
static ADDRESS_MAP_START( destroyr_map, AS_PROGRAM, 8, destroyr_state )
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0xf00) AM_RAM
- AM_RANGE(0x1000, 0x1fff) AM_READWRITE(input_r, output_w)
+ AM_RANGE(0x1000, 0x1000) AM_MIRROR(0xffe) AM_READ(input_r)
+ AM_RANGE(0x1000, 0x1007) AM_MIRROR(0xff0) AM_DEVWRITE("outlatch", f9334_device, write_d0)
+ AM_RANGE(0x1008, 0x1008) AM_MIRROR(0xff7) AM_WRITE(misc_w)
AM_RANGE(0x2000, 0x2fff) AM_READ_PORT("IN2")
AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0xf00) AM_WRITEONLY AM_SHARE("alpha_nuram")
AM_RANGE(0x4000, 0x401f) AM_MIRROR(0xfe0) AM_WRITEONLY AM_SHARE("major_obj_ram")
@@ -497,6 +479,16 @@ static MACHINE_CONFIG_START( destroyr )
MCFG_CPU_PROGRAM_MAP(destroyr_map)
MCFG_CPU_PERIODIC_INT_DRIVER(destroyr_state, irq0_line_assert, 4*60)
+ MCFG_DEVICE_ADD("outlatch", F9334, 0) // F8
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(destroyr_state, led0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(destroyr_state, led1_w))
+ // Q2 => songate
+ // Q3 => launch
+ // Q4 => explosion
+ // Q5 => sonar
+ // Q6 => high explosion
+ // Q7 => low explosion
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/dragrace.cpp b/src/mame/drivers/dragrace.cpp
index 663c2687ebc..376589d611e 100644
--- a/src/mame/drivers/dragrace.cpp
+++ b/src/mame/drivers/dragrace.cpp
@@ -9,6 +9,7 @@
#include "emu.h"
#include "includes/dragrace.h"
#include "cpu/m6800/m6800.h"
+#include "machine/74259.h"
#include "sound/discrete.h"
#include "speaker.h"
@@ -38,82 +39,34 @@ TIMER_DEVICE_CALLBACK_MEMBER(dragrace_state::dragrace_frame_callback)
}
-void dragrace_state::dragrace_update_misc_flags( address_space &space )
+WRITE8_MEMBER(dragrace_state::speed1_w)
{
- /* 0x0900 = set 3SPEED1 0x00000001
- * 0x0901 = set 4SPEED1 0x00000002
- * 0x0902 = set 5SPEED1 0x00000004
- * 0x0903 = set 6SPEED1 0x00000008
- * 0x0904 = set 7SPEED1 0x00000010
- * 0x0905 = set EXPLOSION1 0x00000020
- * 0x0906 = set SCREECH1 0x00000040
- * 0x0920 - 0x0927 = clear 0x0900 - 0x0907
-
- * 0x0909 = set KLEXPL1 0x00000200
- * 0x090b = set MOTOR1 0x00000800
- * 0x090c = set ATTRACT 0x00001000
- * 0x090d = set LOTONE 0x00002000
- * 0x090f = set Player 1 Start Lamp 0x00008000
- * 0x0928 - 0x092f = clear 0x0908 - 0x090f
-
- * 0x0910 = set 3SPEED2 0x00010000
- * 0x0911 = set 4SPEED2 0x00020000
- * 0x0912 = set 5SPEED2 0x00040000
- * 0x0913 = set 6SPEED2 0x00080000
- * 0x0914 = set 7SPEED2 0x00100000
- * 0x0915 = set EXPLOSION2 0x00200000
- * 0x0916 = set SCREECH2 0x00400000
- * 0x0930 = clear 0x0910 - 0x0917
-
- * 0x0919 = set KLEXPL2 0x02000000
- * 0x091b = set MOTOR2 0x08000000
- * 0x091d = set HITONE 0x20000000
- * 0x091f = set Player 2 Start Lamp 0x80000000
- * 0x0938 = clear 0x0918 - 0x091f
- */
- output().set_led_value(0, m_misc_flags & 0x00008000);
- output().set_led_value(1, m_misc_flags & 0x80000000);
-
- m_discrete->write(space, DRAGRACE_MOTOR1_DATA, ~m_misc_flags & 0x0000001f); // Speed1 data*
- m_discrete->write(space, DRAGRACE_EXPLODE1_EN, (m_misc_flags & 0x00000020) ? 1: 0); // Explosion1 enable
- m_discrete->write(space, DRAGRACE_SCREECH1_EN, (m_misc_flags & 0x00000040) ? 1: 0); // Screech1 enable
- m_discrete->write(space, DRAGRACE_KLEXPL1_EN, (m_misc_flags & 0x00000200) ? 1: 0); // KLEXPL1 enable
- m_discrete->write(space, DRAGRACE_MOTOR1_EN, (m_misc_flags & 0x00000800) ? 1: 0); // Motor1 enable
-
- m_discrete->write(space, DRAGRACE_MOTOR2_DATA, (~m_misc_flags & 0x001f0000) >> 0x10); // Speed2 data*
- m_discrete->write(space, DRAGRACE_EXPLODE2_EN, (m_misc_flags & 0x00200000) ? 1: 0); // Explosion2 enable
- m_discrete->write(space, DRAGRACE_SCREECH2_EN, (m_misc_flags & 0x00400000) ? 1: 0); // Screech2 enable
- m_discrete->write(space, DRAGRACE_KLEXPL2_EN, (m_misc_flags & 0x02000000) ? 1: 0); // KLEXPL2 enable
- m_discrete->write(space, DRAGRACE_MOTOR2_EN, (m_misc_flags & 0x08000000) ? 1: 0); // Motor2 enable
-
- m_discrete->write(space, DRAGRACE_ATTRACT_EN, (m_misc_flags & 0x00001000) ? 1: 0); // Attract enable
- m_discrete->write(space, DRAGRACE_LOTONE_EN, (m_misc_flags & 0x00002000) ? 1: 0); // LoTone enable
- m_discrete->write(space, DRAGRACE_HITONE_EN, (m_misc_flags & 0x20000000) ? 1: 0); // HiTone enable
+ unsigned freq = ~data & 0x1f;
+ m_discrete->write(machine().dummy_space(), DRAGRACE_MOTOR1_DATA, freq);
// the tachometers are driven from the same frequency generator that creates the engine sound
- output().set_value("tachometer", ~m_misc_flags & 0x0000001f);
- output().set_value("tachometer2", (~m_misc_flags & 0x001f0000) >> 0x10);
+ output().set_value("tachometer", freq);
}
-WRITE8_MEMBER(dragrace_state::dragrace_misc_w)
+WRITE8_MEMBER(dragrace_state::speed2_w)
{
- /* Set/clear individual bit */
- uint32_t mask = 1 << offset;
- if (data & 0x01)
- m_misc_flags |= mask;
- else
- m_misc_flags &= (~mask);
- logerror("Set %#6x, Mask=%#10x, Flag=%#10x, Data=%x\n", 0x0900 + offset, mask, m_misc_flags, data & 0x01);
- dragrace_update_misc_flags(space);
+ unsigned freq = ~data & 0x1f;
+ m_discrete->write(machine().dummy_space(), DRAGRACE_MOTOR2_DATA, freq);
+
+ // the tachometers are driven from the same frequency generator that creates the engine sound
+ output().set_value("tachometer2", freq);
+}
+
+WRITE_LINE_MEMBER(dragrace_state::p1_start_w)
+{
+ // set Player 1 Start Lamp
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(dragrace_state::dragrace_misc_clear_w)
+WRITE_LINE_MEMBER(dragrace_state::p2_start_w)
{
- /* Clear 8 bits */
- uint32_t mask = 0xff << (((offset >> 3) & 0x03) * 8);
- m_misc_flags &= (~mask);
- logerror("Clear %#6x, Mask=%#10x, Flag=%#10x, Data=%x\n", 0x0920 + offset, mask, m_misc_flags, data & 0x01);
- dragrace_update_misc_flags(space);
+ // set Player 2 Start Lamp
+ output().set_led_value(1, state);
}
READ8_MEMBER(dragrace_state::dragrace_input_r)
@@ -168,8 +121,14 @@ READ8_MEMBER(dragrace_state::dragrace_scanline_r)
static ADDRESS_MAP_START( dragrace_map, AS_PROGRAM, 8, dragrace_state )
AM_RANGE(0x0080, 0x00ff) AM_RAM
AM_RANGE(0x0800, 0x083f) AM_READ(dragrace_input_r)
- AM_RANGE(0x0900, 0x091f) AM_WRITE(dragrace_misc_w)
- AM_RANGE(0x0920, 0x093f) AM_WRITE(dragrace_misc_clear_w)
+ AM_RANGE(0x0900, 0x0907) AM_DEVWRITE("latch_f5", addressable_latch_device, write_d0)
+ AM_RANGE(0x0908, 0x090f) AM_DEVWRITE("latch_a5", addressable_latch_device, write_d0)
+ AM_RANGE(0x0910, 0x0917) AM_DEVWRITE("latch_h5", addressable_latch_device, write_d0)
+ AM_RANGE(0x0918, 0x091f) AM_DEVWRITE("latch_e5", addressable_latch_device, write_d0)
+ AM_RANGE(0x0920, 0x0927) AM_DEVWRITE("latch_f5", addressable_latch_device, clear)
+ AM_RANGE(0x0928, 0x092f) AM_DEVWRITE("latch_a5", addressable_latch_device, clear)
+ AM_RANGE(0x0930, 0x0937) AM_DEVWRITE("latch_h5", addressable_latch_device, clear)
+ AM_RANGE(0x0938, 0x093f) AM_DEVWRITE("latch_e5", addressable_latch_device, clear)
AM_RANGE(0x0a00, 0x0aff) AM_WRITEONLY AM_SHARE("playfield_ram")
AM_RANGE(0x0b00, 0x0bff) AM_WRITEONLY AM_SHARE("position_ram")
AM_RANGE(0x0c00, 0x0c00) AM_READ(dragrace_steering_r)
@@ -314,13 +273,11 @@ PALETTE_INIT_MEMBER(dragrace_state, dragrace)
void dragrace_state::machine_start()
{
- save_item(NAME(m_misc_flags));
save_item(NAME(m_gear));
}
void dragrace_state::machine_reset()
{
- m_misc_flags = 0;
m_gear[0] = 0;
m_gear[1] = 0;
}
@@ -356,6 +313,29 @@ static MACHINE_CONFIG_START( dragrace )
MCFG_DISCRETE_INTF(dragrace)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DEVICE_ADD("latch_f5", F9334, 0) // F5
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(dragrace_state, speed1_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED1-7SPEED1
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_EXPLODE1_EN>)) // Explosion1 enable
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_SCREECH1_EN>)) // Screech1 enable
+
+ MCFG_DEVICE_ADD("latch_a5", F9334, 0) // A5
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_KLEXPL1_EN>)) // KLEXPL1 enable
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_MOTOR1_EN>)) // Motor1 enable
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_ATTRACT_EN>)) // Attract enable
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_LOTONE_EN>)) // LoTone enable
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dragrace_state, p1_start_w))
+
+ MCFG_DEVICE_ADD("latch_h5", F9334, 0) // H5
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(dragrace_state, speed2_w)) MCFG_DEVCB_MASK(0x1f) // set 3SPEED2-7SPEED2
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_EXPLODE2_EN>)) // Explosion2 enable
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_SCREECH2_EN>)) // Screech2 enable
+
+ MCFG_DEVICE_ADD("latch_e5", F9334, 0) // E5
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_KLEXPL2_EN>)) // KLEXPL2 enable
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_MOTOR2_EN>)) // Motor2 enable
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<DRAGRACE_HITONE_EN>)) // HiTone enable
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dragrace_state, p2_start_w))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/dynax.cpp b/src/mame/drivers/dynax.cpp
index cce92ef04ba..ea69eb4b402 100644
--- a/src/mame/drivers/dynax.cpp
+++ b/src/mame/drivers/dynax.cpp
@@ -116,8 +116,9 @@ WRITE8_MEMBER(dynax_state::dynax_vblank_ack_w)
sprtmtch_update_irq();
}
-WRITE8_MEMBER(dynax_state::dynax_blitter_ack_w)
+WRITE_LINE_MEMBER(dynax_state::blitter_ack_w)
{
+ // probably not exactly how this works
m_blitter_irq = 0;
sprtmtch_update_irq();
}
@@ -152,15 +153,15 @@ WRITE8_MEMBER(dynax_state::jantouki_vblank_ack_w)
jantouki_update_irq();
}
-WRITE8_MEMBER(dynax_state::jantouki_blitter_ack_w)
+WRITE_LINE_MEMBER(dynax_state::jantouki_blitter_ack_w)
{
- m_blitter_irq = data;
+ m_blitter_irq = state;
jantouki_update_irq();
}
-WRITE8_MEMBER(dynax_state::jantouki_blitter2_ack_w)
+WRITE_LINE_MEMBER(dynax_state::jantouki_blitter2_ack_w)
{
- m_blitter2_irq = data;
+ m_blitter2_irq = state;
jantouki_update_irq();
}
@@ -212,14 +213,14 @@ WRITE_LINE_MEMBER(dynax_state::jantouki_sound_callback)
Sports Match
***************************************************************************/
-WRITE8_MEMBER(dynax_state::dynax_coincounter_0_w)
+WRITE_LINE_MEMBER(dynax_state::coincounter_0_w)
{
- machine().bookkeeping().coin_counter_w(0, data);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(dynax_state::dynax_coincounter_1_w)
+WRITE_LINE_MEMBER(dynax_state::coincounter_1_w)
{
- machine().bookkeeping().coin_counter_w(1, data);
+ machine().bookkeeping().coin_counter_w(1, state);
}
READ8_MEMBER(dynax_state::ret_ff)
@@ -286,12 +287,6 @@ WRITE8_MEMBER(dynax_state::hnoridur_rombank_w)
}
-WRITE8_MEMBER(dynax_state::hnoridur_palbank_w)
-{
- m_palbank = data & 0x0f;
- dynax_blit_palbank_w(space, 0, data);
-}
-
WRITE8_MEMBER(dynax_state::hnoridur_palette_w)
{
switch (m_hnoridur_bank)
@@ -428,6 +423,11 @@ WRITE8_MEMBER(dynax_state::adpcm_reset_w)
m_msm->reset_w(~data & 1);
}
+WRITE_LINE_MEMBER(dynax_state::adpcm_reset_kludge_w)
+{
+ m_resetkludge = state;
+}
+
MACHINE_RESET_MEMBER(dynax_state,adpcm)
{
/* start with the MSM5205 reset */
@@ -435,16 +435,6 @@ MACHINE_RESET_MEMBER(dynax_state,adpcm)
m_msm->reset_w(1);
}
-WRITE8_MEMBER(dynax_state::yarunara_layer_half_w)
-{
- hanamai_layer_half_w(space, 0, data >> 1);
-}
-
-WRITE8_MEMBER(dynax_state::yarunara_layer_half2_w)
-{
- hnoridur_layer_half2_w(space, 0, data >> 1);
-}
-
static ADDRESS_MAP_START( cdracula_mem_map, AS_PROGRAM, 8, dynax_state )
AM_RANGE( 0x0000, 0xbfff ) AM_ROM
AM_RANGE( 0xc000, 0xffff ) AM_RAM
@@ -537,13 +527,7 @@ static ADDRESS_MAP_START( hanamai_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x6c, 0x6c ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes (Low Bits)
AM_RANGE( 0x6d, 0x6d ) AM_WRITE(dynax_blit_palette23_w) //
AM_RANGE( 0x6e, 0x6e ) AM_WRITE(dynax_blit_backpen_w) // Background Color
- AM_RANGE( 0x70, 0x70 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
- AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x72, 0x72 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x73, 0x73 ) AM_WRITE(dynax_coincounter_1_w) //
- AM_RANGE( 0x74, 0x74 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
- AM_RANGE( 0x76, 0x76 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
- AM_RANGE( 0x77, 0x77 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
+ AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE( 0x78, 0x79 ) AM_DEVREADWRITE("ym2203", ym2203_device, read, write) // 2 x DSW
AM_RANGE( 0x7a, 0x7b ) AM_DEVWRITE("aysnd", ay8912_device, address_data_w) // AY8912
// AM_RANGE( 0x7c, 0x7c ) AM_WRITENOP // CRT Controller
@@ -584,12 +568,8 @@ static ADDRESS_MAP_START( hnoridur_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x55, 0x55 ) AM_WRITENOP // ? VBlank IRQ Ack
AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // ?
- AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) //
- AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
- AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) //
+ AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
+ AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0)
ADDRESS_MAP_END
/***************************************************************************
@@ -601,14 +581,14 @@ WRITE8_MEMBER(dynax_state::hjingi_bank_w)
m_hnoridur_bank = data;
}
-WRITE8_MEMBER(dynax_state::hjingi_lockout_w)
+WRITE_LINE_MEMBER(dynax_state::hjingi_lockout_w)
{
- machine().bookkeeping().coin_lockout_w(0, (~data) & 0x01);
+ machine().bookkeeping().coin_lockout_w(0, !state);
}
-WRITE8_MEMBER(dynax_state::hjingi_hopper_w)
+WRITE_LINE_MEMBER(dynax_state::hjingi_hopper_w)
{
- m_hopper = data & 0x01;
+ m_hopper = state;
}
uint8_t dynax_state::hjingi_hopper_bit()
@@ -672,16 +652,10 @@ static ADDRESS_MAP_START( hjingi_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // Blitter Busy
- AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
- AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) //
+ AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // Flip screen, layer half select, etc.
- AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) //
- AM_RANGE( 0x72, 0x72 ) AM_WRITE(hjingi_hopper_w) // Hopper
- AM_RANGE( 0x73, 0x73 ) AM_WRITE(hjingi_lockout_w) // Coin Lockout
+ AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) // Coin Counters, Hopper, Coin Lockout
AM_RANGE( 0x80, 0x80 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
ADDRESS_MAP_END
@@ -760,14 +734,9 @@ WRITE8_MEMBER(dynax_state::yarunara_rombank_w)
m_hnoridur_bank = data;
}
-WRITE8_MEMBER(dynax_state::yarunara_flipscreen_w)
+WRITE8_MEMBER(dynax_state::yarunara_mainlatch_w)
{
- dynax_flipscreen_w(space, 0, BIT(data, 1));
-}
-
-WRITE8_MEMBER(dynax_state::yarunara_flipscreen_inv_w)
-{
- dynax_flipscreen_w(space, 0, !BIT(data, 1));
+ m_mainlatch->write_bit(offset, BIT(data, 1));
}
WRITE8_MEMBER(dynax_state::yarunara_blit_romregion_w)
@@ -799,12 +768,7 @@ static ADDRESS_MAP_START( yarunara_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x4b, 0x4b ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
AM_RANGE( 0x4c, 0x4c ) AM_READ_PORT("DSW0") // DSW 1
AM_RANGE( 0x4f, 0x4f ) AM_READ_PORT("DSW1") // DSW 2
- AM_RANGE( 0x50, 0x50 ) AM_WRITE(yarunara_flipscreen_w)
- AM_RANGE( 0x51, 0x51 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0x52, 0x52 ) AM_WRITE(yarunara_layer_half2_w) //
- // 53 ?
- // 54 ?
- AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
+ AM_RANGE( 0x50, 0x57 ) AM_WRITE(yarunara_mainlatch_w)
AM_RANGE( 0x68, 0x68 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
AM_RANGE( 0x69, 0x69 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer
AM_RANGE( 0x6a, 0x6a ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes
@@ -845,12 +809,8 @@ static ADDRESS_MAP_START( mcnpshnt_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x54, 0x54 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
AM_RANGE( 0x56, 0x56 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
AM_RANGE( 0x57, 0x57 ) AM_READ(ret_ff) // ?
- AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x61, 0x61 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0x62, 0x62 ) AM_WRITE(hnoridur_layer_half2_w) //
- AM_RANGE( 0x67, 0x67 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
- AM_RANGE( 0x70, 0x70 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x71, 0x71 ) AM_WRITE(dynax_coincounter_1_w) //
+ AM_RANGE( 0x60, 0x67 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
+ AM_RANGE( 0x70, 0x77 ) AM_DEVWRITE("outlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -872,12 +832,7 @@ static ADDRESS_MAP_START( sprtmtch_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x35, 0x35 ) AM_WRITE(dynax_blit_palette23_w) //
AM_RANGE( 0x36, 0x36 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
AM_RANGE( 0x37, 0x37 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
-// AM_RANGE( 0x40, 0x40 ) AM_WRITE(adpcm_reset_w) // MSM5205 reset
- AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x42, 0x42 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x43, 0x43 ) AM_WRITE(dynax_coincounter_1_w) //
- AM_RANGE( 0x44, 0x44 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
- AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
+ AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -888,12 +843,7 @@ static ADDRESS_MAP_START( mjfriday_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x01, 0x01 ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes (Low Bits)
AM_RANGE( 0x02, 0x02 ) AM_WRITE(dynax_rombank_w) // BANK ROM Select
AM_RANGE( 0x03, 0x03 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
- AM_RANGE( 0x10, 0x11 ) AM_WRITE(mjdialq2_blit_dest_w) // Destination Layer
- AM_RANGE( 0x12, 0x12 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
- AM_RANGE( 0x13, 0x13 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x14, 0x14 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x15, 0x15 ) AM_WRITE(dynax_coincounter_1_w) //
- AM_RANGE( 0x16, 0x17 ) AM_WRITE(mjdialq2_layer_enable_w) // Layers Enable
+ AM_RANGE( 0x10, 0x17 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE( 0x41, 0x47 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
// AM_RANGE( 0x50, 0x50 ) AM_WRITENOP // CRT Controller
// AM_RANGE( 0x51, 0x51 ) AM_WRITENOP // CRT Controller
@@ -924,11 +874,8 @@ static ADDRESS_MAP_START( nanajign_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x16, 0x16 ) AM_READ_PORT("DSW2") // DSW3
// AM_RANGE( 0x20, 0x21 ) AM_WRITENOP // CRT Controller
AM_RANGE( 0x31, 0x37 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
- AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counter
- AM_RANGE( 0x50, 0x50 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x51, 0x51 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0x52, 0x52 ) AM_WRITE(hnoridur_layer_half2_w) //
- AM_RANGE( 0x57, 0x57 ) AM_WRITE(dynax_blitter_ack_w) // Blitter IRQ Ack
+ AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("outlatch", ls259_device, write_d0) // Coin Counter
+ AM_RANGE( 0x50, 0x57 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w) // screen scroll Y
AM_RANGE( 0x6a, 0x6a ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
@@ -988,11 +935,7 @@ static ADDRESS_MAP_START( jantouki_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x54, 0x54 ) AM_READ_PORT("COINS") // Coins
AM_RANGE( 0x55, 0x55 ) AM_READ_PORT("DSW0") // DSW1
AM_RANGE( 0x56, 0x56 ) AM_READ_PORT("DSW1") // DSW2
- AM_RANGE( 0x58, 0x58 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counter
- AM_RANGE( 0x5b, 0x5b ) AM_WRITE(dynax_blit2_palbank_w) // Layers Palettes (High Bit)
- AM_RANGE( 0x5d, 0x5d ) AM_WRITE(dynax_blit_palbank_w) //
- AM_RANGE( 0x5e, 0x5e ) AM_WRITE(jantouki_blitter_ack_w) // Blitter IRQ Ack
- AM_RANGE( 0x5f, 0x5f ) AM_WRITE(jantouki_blitter2_ack_w) // Blitter 2 IRQ Ack
+ AM_RANGE( 0x58, 0x5f ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_blit_palette67_w) // Layers Palettes (Low Bits)
AM_RANGE( 0x61, 0x61 ) AM_WRITE(dynax_blit_palette45_w) //
AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_blit_palette23_w) //
@@ -1076,8 +1019,7 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x11, 0x12 ) AM_WRITE(mjelctrn_blitter_ack_w) //?
// AM_RANGE( 0x20, 0x20 ) AM_WRITENOP // CRT Controller
// AM_RANGE( 0x21, 0x21 ) AM_WRITENOP // CRT Controller
- AM_RANGE( 0x40, 0x40 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_coincounter_1_w) //
+ AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE( 0x60, 0x60 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
AM_RANGE( 0x62, 0x62 ) AM_WRITE(dynax_extra_scrolly_w) // screen scroll Y
// AM_RANGE( 0x64, 0x64 ) AM_WRITE(dynax_extra_scrollx_w) // screen scroll X
@@ -1090,10 +1032,7 @@ static ADDRESS_MAP_START( mjelctrn_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x84, 0x84 ) AM_READ(mjelctrn_dsw_r) // DSW8 x 4
AM_RANGE( 0x85, 0x85 ) AM_READ_PORT("SW1") // DSW2
AM_RANGE( 0xa1, 0xa7 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
- AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0xc2, 0xc2 ) AM_WRITE(hnoridur_layer_half2_w) //
-// c3,c4 seem to be related to wrap around enable
+ AM_RANGE( 0xc0, 0xc7 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE( 0xe0, 0xe0 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
AM_RANGE( 0xe1, 0xe1 ) AM_WRITE(dynax_blit_dest_w) // Destination Layer
AM_RANGE( 0xe2, 0xe2 ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes
@@ -1121,11 +1060,7 @@ static ADDRESS_MAP_START( mjembase_io_map, AS_IO, 8, dynax_state )
// AM_RANGE( 0x40, 0x40 ) AM_WRITENOP // CRT Controller
// AM_RANGE( 0x41, 0x41 ) AM_WRITENOP // CRT Controller
AM_RANGE( 0x61, 0x67 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
- AM_RANGE( 0x80, 0x80 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x81, 0x81 ) AM_WRITE(hanamai_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0x82, 0x82 ) AM_WRITE(hnoridur_layer_half2_w) //
- AM_RANGE( 0x83, 0x83 ) AM_WRITE(dynax_coincounter_0_w) // Coin Counters
- AM_RANGE( 0x84, 0x84 ) AM_WRITE(dynax_coincounter_1_w) //
+ AM_RANGE( 0x80, 0x87 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE( 0xa0, 0xa0 ) AM_WRITE(hnoridur_rombank_w) // BANK ROM Select
AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(dynax_blit_pen_w) // Destination Pen
AM_RANGE( 0xc1, 0xc1 ) AM_WRITE(mjembase_blit_dest_w) // Destination Layer
@@ -1351,15 +1286,15 @@ void dynax_state::tenkai_show_6c()
// popmessage("%02x %02x", m_tenkai_6c, m_tenkai_70);
}
-WRITE8_MEMBER(dynax_state::tenkai_6c_w)
+WRITE_LINE_MEMBER(dynax_state::tenkai_6c_w)
{
- m_tenkai_6c = data;
+ m_tenkai_6c = state;
tenkai_show_6c();
}
-WRITE8_MEMBER(dynax_state::tenkai_70_w)
+WRITE_LINE_MEMBER(dynax_state::tenkai_70_w)
{
- m_tenkai_70 = data;
+ m_tenkai_70 = state;
tenkai_show_6c();
}
@@ -1374,6 +1309,11 @@ WRITE8_MEMBER(dynax_state::tenkai_blit_romregion_w)
logerror("%04x: unmapped romregion=%02X\n", space.device().safe_pc(), data);
}
+WRITE8_MEMBER(dynax_state::tenkai_mainlatch_w)
+{
+ m_mainlatch->write_bit(offset >> 2, BIT(data, 1));
+}
+
static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state )
AM_RANGE( 0x0000, 0x5fff ) AM_ROM
AM_RANGE( 0x6000, 0x6fff ) AM_RAM
@@ -1390,12 +1330,7 @@ static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state )
AM_RANGE( 0x10050, 0x10050 ) AM_WRITE(tenkai_priority_w) // layer priority and enable
AM_RANGE( 0x10054, 0x10054 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
AM_RANGE( 0x10058, 0x10058 ) AM_WRITE(tenkai_blit_romregion_w) // Blitter ROM bank
- AM_RANGE( 0x10060, 0x10060 ) AM_WRITE(yarunara_flipscreen_inv_w) // Flip Screen
- AM_RANGE( 0x10064, 0x10064 ) AM_WRITE(yarunara_layer_half_w) // half of the interleaved layer to write to
- AM_RANGE( 0x10068, 0x10068 ) AM_WRITE(yarunara_layer_half2_w) //
- AM_RANGE( 0x1006c, 0x1006c ) AM_WRITE(tenkai_6c_w) // ?
- AM_RANGE( 0x10070, 0x10070 ) AM_WRITE(tenkai_70_w) // ?
- AM_RANGE( 0x1007c, 0x1007c ) AM_WRITENOP // IRQ Ack? (0,2)
+ AM_RANGE( 0x10060, 0x1007f ) AM_WRITE(tenkai_mainlatch_w)
AM_RANGE( 0x100c0, 0x100c0 ) AM_WRITE(tenkai_ipsel_w)
AM_RANGE( 0x100c1, 0x100c1 ) AM_WRITE(tenkai_ip_w)
AM_RANGE( 0x100c2, 0x100c3 ) AM_READ(tenkai_ip_r)
@@ -1488,18 +1423,9 @@ WRITE8_MEMBER(dynax_state::gekisha_8000_w)
case 0x8003: dynax_blit_backpen_w(space, offset - 0x03, data); return;
- case 0x8010:
- case 0x8011: mjdialq2_blit_dest_w(space, offset - 0x10, data); return;
-
- case 0x8012: dynax_blit_palbank_w(space, offset - 0x12, data); return;
-
- case 0x8013: dynax_flipscreen_w(space, offset - 0x13, data); return;
-
- case 0x8014: dynax_coincounter_0_w(space, offset - 0x14, data); return;
- case 0x8015: dynax_coincounter_1_w(space, offset - 0x15, data); return;
-
- case 0x8016:
- case 0x8017: mjdialq2_layer_enable_w(space, offset - 0x16, data); return;
+ case 0x8010: case 0x8011: case 0x8012: case 0x8013:
+ case 0x8014: case 0x8015: case 0x8016: case 0x8017:
+ m_mainlatch->write_bit(offset & 7, BIT(data, 0)); return;
case 0x8020:
case 0x8021: gekisha_hopper_w(space, offset - 0x20, data); return;
@@ -1569,9 +1495,7 @@ static ADDRESS_MAP_START( cdracula_io_map, AS_IO, 8, dynax_state )
AM_RANGE( 0x35, 0x35 ) AM_WRITE(dynax_blit_palette23_w) //
AM_RANGE( 0x36, 0x36 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
AM_RANGE( 0x37, 0x37 ) AM_WRITE(dynax_vblank_ack_w) // VBlank IRQ Ack
- AM_RANGE( 0x41, 0x41 ) AM_WRITE(dynax_flipscreen_w) // Flip Screen
- AM_RANGE( 0x44, 0x44 ) AM_WRITE(jantouki_blitter_ack_w) // Blitter IRQ Ack
- AM_RANGE( 0x45, 0x45 ) AM_WRITE(dynax_blit_palbank_w) // Layers Palettes (High Bit)
+ AM_RANGE( 0x40, 0x47 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE( 0x60, 0x60 ) AM_READ_PORT("DSW2")
AM_RANGE( 0x61, 0x61 ) AM_READ_PORT("DSW1")
AM_RANGE( 0x6b, 0x6b ) AM_WRITE(cdracula_sound_rombank_w) // OKI Bank
@@ -4381,6 +4305,11 @@ static MACHINE_CONFIG_START( cdracula )
// MCFG_NVRAM_ADD_0FILL("nvram") // no battery
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // Flip Screen
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, jantouki_blitter_ack_w)) // Blitter IRQ Ack
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) // Layers Palettes (High Bit)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(58.56)
@@ -4420,6 +4349,16 @@ static MACHINE_CONFIG_START( hanamai )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT // MSM5205 reset
+ MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(dynax_state, adpcm_reset_kludge_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // Flip Screen
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) // Coin Counters
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_1_w)) //
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, blitter_ack_w)) // Blitter IRQ Ack
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, blit_palbank_w)) // Layers Palettes (High Bit)
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, layer_half_w)) // half of the interleaved layer to write to
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -4474,6 +4413,16 @@ static MACHINE_CONFIG_START( hnoridur )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC25
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, blitter_ack_w))
+
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC61
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -4521,6 +4470,18 @@ static MACHINE_CONFIG_START( hjingi )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, blitter_ack_w))
+
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, hjingi_hopper_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, hjingi_lockout_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -4568,6 +4529,13 @@ static MACHINE_CONFIG_START( sprtmtch )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // UF12 on Intergirl
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, blitter_ack_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -4613,6 +4581,16 @@ static MACHINE_CONFIG_START( mjfriday )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC15
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest0_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer1_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer0_enable_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -4677,6 +4655,8 @@ static MACHINE_CONFIG_DERIVED( yarunara, hnoridur )
MCFG_NVRAM_REPLACE_0FILL("nvram")
+ MCFG_DEVICE_REMOVE("outlatch") // ???
+
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 8, 256-1-8-1)
@@ -4752,6 +4732,13 @@ static MACHINE_CONFIG_START( jantouki )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, coincounter_0_w)) // Coin Counter
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, blit2_palbank_w)) // Layers Palettes (High Bit)
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, jantouki_blitter_ack_w)) // Blitter IRQ Ack
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, jantouki_blitter2_ack_w)) // Blitter 2 IRQ Ack
+
/* video hardware */
MCFG_PALETTE_ADD("palette", 512)
MCFG_PALETTE_INIT_OWNER(dynax_state,sprtmtch) // static palette
@@ -4830,6 +4817,12 @@ static MACHINE_CONFIG_DERIVED( mjelctrn, hnoridur )
MCFG_CPU_IO_MAP(mjelctrn_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynax_state, mjelctrn_vblank_interrupt) /* IM 2 needs a vector on the data bus */
+ MCFG_DEVICE_REPLACE("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
+ // Q3, Q4 seem to be related to wrap around enable
+
MCFG_VIDEO_START_OVERRIDE(dynax_state,mjelctrn)
MACHINE_CONFIG_END
@@ -4839,6 +4832,13 @@ static MACHINE_CONFIG_DERIVED( mjembase, hnoridur )
MCFG_CPU_IO_MAP(mjembase_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynax_state, mjelctrn_vblank_interrupt) /* IM 2 needs a vector on the data bus */
+ MCFG_DEVICE_REPLACE("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
+
MCFG_VIDEO_START_OVERRIDE(dynax_state,mjembase)
MACHINE_CONFIG_END
@@ -4954,6 +4954,14 @@ static MACHINE_CONFIG_START( tenkai )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 10C on Ougon no Pai
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, layer_half_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, layer_half2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, tenkai_6c_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, tenkai_70_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // IRQ Ack?
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -4989,6 +4997,11 @@ static MACHINE_CONFIG_DERIVED( majrjhdx, tenkai )
MCFG_PALETTE_INIT_OWNER(dynax_state,sprtmtch) // static palette
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( mjreach, tenkai )
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, flipscreen_w)) // not inverted
+MACHINE_CONFIG_END
+
/***************************************************************************
Mahjong Gekisha
***************************************************************************/
@@ -5025,6 +5038,16 @@ static MACHINE_CONFIG_START( gekisha )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(dynax_state, mjdialq2_blit_dest0_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(dynax_state, blit_palbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(dynax_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(dynax_state, coincounter_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(dynax_state, coincounter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer1_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(dynax_state, mjdialq2_layer0_enable_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -6834,11 +6857,6 @@ ROM_START( mjreach )
ROM_RELOAD( 0x80000, 0x80000 )
ROM_END
-DRIVER_INIT_MEMBER(dynax_state,mjreach)
-{
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x10060, 0x10060, write8_delegate(FUNC(dynax_state::yarunara_flipscreen_w),this));
-}
-
/***************************************************************************
Mahjong Tenkaigen
@@ -7512,7 +7530,7 @@ GAME( 1991, tenkaicb, tenkai, tenkai, tenkai, dynax_state, 0, ROT0,
GAME( 1991, tenkaie, tenkai, tenkai, tenkai, dynax_state, 0, ROT0, "Dynax", "Mahjong Tenkaigen (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1991, ougonpai, 0, tenkai, tenkai, dynax_state, 0, ROT0, "Dynax", "Mahjong Ougon No Pai", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 1991, ougonpaib,ougonpai, tenkai, tenkai, dynax_state, 0, ROT0, "bootleg", "Mahjong Ougon No Pai (bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 1994, mjreach, 0, tenkai, mjreach, dynax_state, mjreach, ROT0, "bootleg / Dynax", "Mahjong Reach (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, mjreach, 0, mjreach, mjreach, dynax_state, 0, ROT0, "bootleg / Dynax", "Mahjong Reach (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, cdracula, 0, cdracula, cdracula, dynax_state, 0, ROT0, "Yun Sung (Escape license)","Castle Of Dracula", MACHINE_SUPPORTS_SAVE ) // not a dynax board
GAME( 1995, shpeng, 0, sprtmtch, drgpunch, dynax_state, 0, ROT0, "WSAC Systems?", "Sea Hunter Penguin", MACHINE_NO_COCKTAIL | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // not a dynax board. proms?
GAME( 1995, intrgirl, 0, sprtmtch, drgpunch, dynax_state, 0, ROT0, "Barko", "Intergirl", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // not a dynax board.
diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp
index 60f52720f88..822e809ae85 100644
--- a/src/mame/drivers/equites.cpp
+++ b/src/mame/drivers/equites.cpp
@@ -592,7 +592,7 @@ CUSTOM_INPUT_MEMBER(equites_state::gekisou_unknown_bit_r)
WRITE16_MEMBER(equites_state::gekisou_unknown_bit_w)
{
- // data bit is A16 (offset)
+ // data bit is A17 (offset)
m_gekisou_unknown_bit = (offset == 0) ? 0 : 1;;
}
@@ -605,6 +605,12 @@ READ16_MEMBER(equites_state::equites_spriteram_kludge_r)
return m_spriteram[0];
}
+WRITE8_MEMBER(equites_state::mainlatch_w)
+{
+ // data bit is A17; address bits are A16(?)-A14 (offset is shifted by 1 here)
+ m_mainlatch->write_bit((offset & 0xe000) >> 13, BIT(offset, 16));
+}
+
READ8_MEMBER(equites_state::mcu_ram_r)
{
if (m_fakemcu == nullptr)
@@ -621,20 +627,18 @@ WRITE8_MEMBER(equites_state::mcu_ram_w)
m_mcuram[offset] = data;
}
-WRITE16_MEMBER(equites_state::mcu_start_w)
+WRITE_LINE_MEMBER(equites_state::mcu_start_w)
{
- // data bit is A16 (offset)
if (m_fakemcu == nullptr)
- m_alpha_8201->mcu_start_w(offset != 0);
+ m_alpha_8201->mcu_start_w(state != 0);
else
- m_fakemcu->set_input_line(INPUT_LINE_HALT, (offset != 0) ? ASSERT_LINE : CLEAR_LINE);
+ m_fakemcu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
}
-WRITE16_MEMBER(equites_state::mcu_switch_w)
+WRITE_LINE_MEMBER(equites_state::mcu_switch_w)
{
- // data bit is A16 (offset)
if (m_fakemcu == nullptr)
- m_alpha_8201->bus_dir_w(offset == 0);
+ m_alpha_8201->bus_dir_w(state == 0);
}
@@ -653,9 +657,7 @@ static ADDRESS_MAP_START( equites_map, AS_PROGRAM, 16, equites_state )
AM_RANGE(0x100000, 0x1001ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x140000, 0x1407ff) AM_READWRITE8(mcu_ram_r, mcu_ram_w, 0x00ff)
AM_RANGE(0x180000, 0x180001) AM_READ_PORT("IN1") AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
- AM_RANGE(0x184000, 0x184001) AM_SELECT(0x020000) AM_WRITE(equites_flipw_w)
- AM_RANGE(0x188000, 0x188001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w)
- AM_RANGE(0x18c000, 0x18c001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w)
+ AM_RANGE(0x180000, 0x180001) AM_SELECT(0x03c000) AM_WRITE8(mainlatch_w, 0xff00)
AM_RANGE(0x1c0000, 0x1c0001) AM_READ_PORT("IN0") AM_WRITE(equites_scrollreg_w)
AM_RANGE(0x380000, 0x380001) AM_WRITE8(equites_bgcolor_w, 0xff00)
AM_RANGE(0x780000, 0x780001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
@@ -675,10 +677,7 @@ static ADDRESS_MAP_START( splndrbt_map, AS_PROGRAM, 16, equites_state )
AM_RANGE(0x080000, 0x080001) AM_READ_PORT("IN0")
AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("IN1")
AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_bgcolor_w, 0xff00) // note: addressmask does not apply here
- AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x020000) AM_WRITE8(equites_flipb_w, 0x00ff)
- AM_RANGE(0x0c4000, 0x0c4001) AM_SELECT(0x020000) AM_WRITE(mcu_start_w)
- AM_RANGE(0x0c8000, 0x0c8001) AM_SELECT(0x020000) AM_WRITE(mcu_switch_w)
- AM_RANGE(0x0cc000, 0x0cc001) AM_SELECT(0x020000) AM_WRITE(splndrbt_selchar_w)
+ AM_RANGE(0x0c0000, 0x0c0001) AM_SELECT(0x03c000) AM_WRITE8(mainlatch_w, 0x00ff)
AM_RANGE(0x100000, 0x100001) AM_WRITE(splndrbt_bg_scrollx_w)
AM_RANGE(0x140000, 0x140001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff)
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(splndrbt_bg_scrolly_w)
@@ -1130,7 +1129,6 @@ void equites_state::machine_start()
void equites_state::machine_reset()
{
- flip_screen_set(0);
}
@@ -1141,6 +1139,11 @@ static MACHINE_CONFIG_START( equites )
MCFG_CPU_PROGRAM_MAP(equites_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", equites_state, equites_scanline, "screen", 0, 1)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(equites_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(equites_state, mcu_start_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(equites_state, mcu_switch_w))
+
MCFG_FRAGMENT_ADD(common_sound)
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, 4000000/8) // 8303 or 8304 (same device!)
@@ -1186,6 +1189,12 @@ static MACHINE_CONFIG_START( splndrbt )
MCFG_CPU_PROGRAM_MAP(splndrbt_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", equites_state, splndrbt_scanline, "screen", 0, 1)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(equites_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(equites_state, mcu_start_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(equites_state, mcu_switch_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(equites_state, splndrbt_selchar_w))
+
MCFG_FRAGMENT_ADD(common_sound)
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, 4000000/8) // 8303 or 8304 (same device!)
diff --git a/src/mame/drivers/fastfred.cpp b/src/mame/drivers/fastfred.cpp
index 07b2bf5e9ca..23060bee542 100644
--- a/src/mame/drivers/fastfred.cpp
+++ b/src/mame/drivers/fastfred.cpp
@@ -14,6 +14,7 @@
#include "includes/fastfred.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -143,9 +144,9 @@ MACHINE_START_MEMBER(fastfred_state,imago)
m_gfxdecode->gfx(1)->set_source(m_imago_sprites);
}
-WRITE8_MEMBER(fastfred_state::imago_dma_irq_w)
+WRITE_LINE_MEMBER(fastfred_state::imago_dma_irq_w)
{
- m_maincpu->set_input_line(0, data & 1 ? ASSERT_LINE : CLEAR_LINE);
+ m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
}
WRITE8_MEMBER(fastfred_state::imago_sprites_bank_w)
@@ -176,9 +177,9 @@ READ8_MEMBER(fastfred_state::imago_sprites_offset_r)
return 0xff; //not really used
}
-WRITE8_MEMBER(fastfred_state::nmi_mask_w)
+WRITE_LINE_MEMBER(fastfred_state::nmi_mask_w)
{
- m_nmi_mask = data & 1;
+ m_nmi_mask = state;
}
WRITE8_MEMBER(fastfred_state::sound_nmi_mask_w)
@@ -196,15 +197,7 @@ static ADDRESS_MAP_START( fastfred_map, AS_PROGRAM, 8, fastfred_state )
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS") AM_WRITEONLY AM_SHARE("bgcolor")
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS")
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP
- AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
- AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
- AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w)
- AM_RANGE(0xf005, 0xf005) AM_WRITE(fastfred_charbank2_w)
- AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w)
- AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
- AM_RANGE(0xf116, 0xf116) AM_WRITE(fastfred_flip_screen_x_w)
- AM_RANGE(0xf117, 0xf117) AM_WRITE(fastfred_flip_screen_y_w)
+ AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
ADDRESS_MAP_END
@@ -221,16 +214,7 @@ static ADDRESS_MAP_START( jumpcoas_map, AS_PROGRAM, 8, fastfred_state )
AM_RANGE(0xe801, 0xe801) AM_READ_PORT("DSW2")
AM_RANGE(0xe802, 0xe802) AM_READ_PORT("BUTTONS")
AM_RANGE(0xe803, 0xe803) AM_READ_PORT("JOYS")
- AM_RANGE(0xf000, 0xf000) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
- AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
- AM_RANGE(0xf004, 0xf004) AM_WRITE(fastfred_charbank1_w)
- AM_RANGE(0xf005, 0xf005) AM_WRITE(fastfred_charbank2_w)
- AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w)
- AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
- AM_RANGE(0xf116, 0xf116) AM_WRITE(fastfred_flip_screen_x_w)
- AM_RANGE(0xf117, 0xf117) AM_WRITE(fastfred_flip_screen_y_w)
+ AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0)
//AM_RANGE(0xf800, 0xf800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) // Why doesn't this work???
AM_RANGE(0xf800, 0xf801) AM_READNOP AM_DEVWRITE("ay8910.1", ay8910_device, address_data_w)
ADDRESS_MAP_END
@@ -250,14 +234,8 @@ static ADDRESS_MAP_START( imago_map, AS_PROGRAM, 8, fastfred_state )
AM_RANGE(0xd860, 0xd8ff) AM_RAM // Unused, but initialized
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("BUTTONS")
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("JOYS")
- AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW") AM_WRITENOP // writes 1 when level starts, 0 when game over
- AM_RANGE(0xf001, 0xf001) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xf002, 0xf002) AM_WRITE(fastfred_colorbank1_w)
- AM_RANGE(0xf003, 0xf003) AM_WRITE(fastfred_colorbank2_w)
- AM_RANGE(0xf004, 0xf004) AM_WRITE(imago_dma_irq_w)
- AM_RANGE(0xf005, 0xf005) AM_WRITE(imago_charbank_w)
- AM_RANGE(0xf006, 0xf006) AM_WRITE(fastfred_flip_screen_x_w)
- AM_RANGE(0xf007, 0xf007) AM_WRITE(fastfred_flip_screen_y_w)
+ AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW")
+ AM_RANGE(0xf000, 0xf007) AM_MIRROR(0x07f8) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xf400, 0xf400) AM_WRITENOP // writes 0 or 2
AM_RANGE(0xf401, 0xf401) AM_WRITE(imago_sprites_bank_w)
AM_RANGE(0xf800, 0xf800) AM_READNOP AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
@@ -659,6 +637,15 @@ static MACHINE_CONFIG_START( fastfred )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(fastfred_state, sound_timer_irq, 4*60)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // "Control Signal Latch" at D10
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(fastfred_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(fastfred_state, colorbank1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(fastfred_state, colorbank2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(fastfred_state, charbank1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(fastfred_state, charbank2_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(fastfred_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(fastfred_state, flip_screen_y_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -711,6 +698,11 @@ static MACHINE_CONFIG_DERIVED( imago, fastfred )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(imago_map)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // writes 1 when level starts, 0 when game over
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(fastfred_state, imago_dma_irq_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(fastfred_state, imago_charbank_w))
+
MCFG_MACHINE_START_OVERRIDE(fastfred_state,imago)
/* video hardware */
diff --git a/src/mame/drivers/firefox.cpp b/src/mame/drivers/firefox.cpp
index c53c0be9c8f..35ac97cee5a 100644
--- a/src/mame/drivers/firefox.cpp
+++ b/src/mame/drivers/firefox.cpp
@@ -33,6 +33,7 @@ but requires a special level III player for proper control. Video: CAV. Audio: A
#include "cpu/m6502/m6502.h"
#include "sound/pokey.h"
#include "sound/tms5220.h"
+#include "machine/74259.h"
#include "machine/ldvp931.h"
#include "machine/6532riot.h"
#include "machine/gen_latch.h"
@@ -77,10 +78,11 @@ public:
DECLARE_READ8_MEMBER(firefox_disc_status_r);
DECLARE_READ8_MEMBER(firefox_disc_data_r);
DECLARE_WRITE8_MEMBER(firefox_disc_read_w);
- DECLARE_WRITE8_MEMBER(firefox_disc_lock_w);
- DECLARE_WRITE8_MEMBER(audio_enable_w);
- DECLARE_WRITE8_MEMBER(firefox_disc_reset_w);
- DECLARE_WRITE8_MEMBER(firefox_disc_write_w);
+ DECLARE_WRITE_LINE_MEMBER(firefox_disc_lock_w);
+ DECLARE_WRITE_LINE_MEMBER(audio_enable_left_w);
+ DECLARE_WRITE_LINE_MEMBER(audio_enable_right_w);
+ DECLARE_WRITE_LINE_MEMBER(firefox_disc_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(firefox_disc_write_w);
DECLARE_WRITE8_MEMBER(firefox_disc_data_w);
DECLARE_WRITE8_MEMBER(tileram_w);
DECLARE_WRITE8_MEMBER(tile_palette_w);
@@ -88,21 +90,23 @@ public:
DECLARE_WRITE8_MEMBER(firefox_objram_bank_w);
DECLARE_READ8_MEMBER(sound_to_main_r);
DECLARE_WRITE8_MEMBER(main_to_sound_w);
- DECLARE_WRITE8_MEMBER(sound_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_reset_w);
DECLARE_READ8_MEMBER(main_to_sound_r);
DECLARE_WRITE8_MEMBER(sound_to_main_w);
DECLARE_READ8_MEMBER(adc_r);
DECLARE_WRITE8_MEMBER(adc_select_w);
DECLARE_WRITE8_MEMBER(nvram_w);
DECLARE_READ8_MEMBER(nvram_r);
- DECLARE_WRITE8_MEMBER(novram_recall_w);
- DECLARE_WRITE8_MEMBER(novram_store_w);
DECLARE_WRITE8_MEMBER(rom_bank_w);
DECLARE_WRITE8_MEMBER(main_irq_clear_w);
DECLARE_WRITE8_MEMBER(main_firq_clear_w);
DECLARE_WRITE8_MEMBER(self_reset_w);
- DECLARE_WRITE8_MEMBER(led_w);
- DECLARE_WRITE8_MEMBER(firefox_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(led0_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
+ DECLARE_WRITE_LINE_MEMBER(led3_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
DECLARE_CUSTOM_INPUT_MEMBER(mainflag_r);
DECLARE_CUSTOM_INPUT_MEMBER(soundflag_r);
DECLARE_READ8_MEMBER(riot_porta_r);
@@ -180,25 +184,30 @@ WRITE8_MEMBER(firefox_state::firefox_disc_read_w)
m_n_disc_read_data = m_laserdisc->data_r();
}
-WRITE8_MEMBER(firefox_state::firefox_disc_lock_w)
+WRITE_LINE_MEMBER(firefox_state::firefox_disc_lock_w)
{
- m_n_disc_lock = data & 0x80;
+ m_n_disc_lock = state;
}
-WRITE8_MEMBER(firefox_state::audio_enable_w)
+WRITE_LINE_MEMBER(firefox_state::audio_enable_left_w)
{
- m_laserdisc->set_output_gain(~offset & 1, (data & 0x80) ? 1.0 : 0.0);
+ m_laserdisc->set_output_gain(0, state ? 1.0 : 0.0);
}
-WRITE8_MEMBER(firefox_state::firefox_disc_reset_w)
+WRITE_LINE_MEMBER(firefox_state::audio_enable_right_w)
{
- m_laserdisc->reset_w((data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
+ m_laserdisc->set_output_gain(1, state ? 1.0 : 0.0);
+}
+
+WRITE_LINE_MEMBER(firefox_state::firefox_disc_reset_w)
+{
+ m_laserdisc->reset_w(state ? CLEAR_LINE : ASSERT_LINE);
}
/* active low on dbb7 */
-WRITE8_MEMBER(firefox_state::firefox_disc_write_w)
+WRITE_LINE_MEMBER(firefox_state::firefox_disc_write_w)
{
- if ( ( data & 0x80 ) == 0 )
+ if (state == 0)
m_laserdisc->data_w(m_n_disc_data);
}
@@ -339,10 +348,10 @@ WRITE8_MEMBER(firefox_state::main_to_sound_w)
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
-WRITE8_MEMBER(firefox_state::sound_reset_w)
+WRITE_LINE_MEMBER(firefox_state::sound_reset_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
- if ((data & 0x80) != 0)
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
+ if (state != 0)
m_sound_to_main_flag = m_main_to_sound_flag = 0;
}
@@ -440,18 +449,6 @@ READ8_MEMBER(firefox_state::nvram_r)
return (m_nvram_1c->read(space, offset) << 4) | (m_nvram_1d->read(space, offset) & 0x0f);
}
-WRITE8_MEMBER(firefox_state::novram_recall_w)
-{
- m_nvram_1c->recall(data & 0x80);
- m_nvram_1d->recall(data & 0x80);
-}
-
-WRITE8_MEMBER(firefox_state::novram_store_w)
-{
- m_nvram_1c->store(data & 0x80);
- m_nvram_1d->store(data & 0x80);
-}
-
/*************************************
@@ -488,14 +485,34 @@ WRITE8_MEMBER(firefox_state::self_reset_w)
*
*************************************/
-WRITE8_MEMBER(firefox_state::led_w)
+WRITE_LINE_MEMBER(firefox_state::led0_w)
+{
+ output().set_led_value(0, !state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::led1_w)
{
- output().set_led_value(offset, ( data & 0x80 ) == 0 );
+ output().set_led_value(1, !state);
}
-WRITE8_MEMBER(firefox_state::firefox_coin_counter_w)
+WRITE_LINE_MEMBER(firefox_state::led2_w)
{
- machine().bookkeeping().coin_counter_w(offset, data & 0x80 );
+ output().set_led_value(2, !state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::led3_w)
+{
+ output().set_led_value(3, !state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::coin_counter_right_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(firefox_state::coin_counter_left_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -549,15 +566,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, firefox_state )
AM_RANGE(0x4218, 0x4218) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_read_w) /* DSKREAD */
AM_RANGE(0x4220, 0x4223) AM_MIRROR(0x0044) AM_WRITE(adc_select_w) /* ADCSTART */
AM_RANGE(0x4230, 0x4230) AM_MIRROR(0x0047) AM_WRITE(self_reset_w) /* AMUCK */
- AM_RANGE(0x4280, 0x4280) AM_MIRROR(0x0040) AM_WRITE(novram_recall_w) /* LATCH0 -> NVRECALL */
- AM_RANGE(0x4281, 0x4281) AM_MIRROR(0x0040) AM_WRITE(sound_reset_w) /* LATCH0 -> RSTSOUND */
- AM_RANGE(0x4282, 0x4282) AM_MIRROR(0x0040) AM_WRITE(novram_store_w) /* LATCH0 -> NVRSTORE */
- AM_RANGE(0x4283, 0x4283) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_lock_w) /* LATCH0 -> LOCK */
- AM_RANGE(0x4284, 0x4285) AM_MIRROR(0x0040) AM_WRITE(audio_enable_w) /* LATCH0 -> SWDSKR, SWDSKL */
- AM_RANGE(0x4286, 0x4286) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_reset_w) /* LATCH0 -> RSTDSK */
- AM_RANGE(0x4287, 0x4287) AM_MIRROR(0x0040) AM_WRITE(firefox_disc_write_w) /* LATCH0 -> WRDSK */
- AM_RANGE(0x4288, 0x4289) AM_MIRROR(0x0040) AM_WRITE(firefox_coin_counter_w) /* LATCH1 -> COIN COUNTERR, COUNTERL */
- AM_RANGE(0x428c, 0x428f) AM_MIRROR(0x0040) AM_WRITE(led_w) /* LATCH1 -> LEDs */
+ AM_RANGE(0x4280, 0x4287) AM_MIRROR(0x0040) AM_DEVWRITE("latch0", ls259_device, write_d7)
+ AM_RANGE(0x4288, 0x428f) AM_MIRROR(0x0040) AM_DEVWRITE("latch1", ls259_device, write_d7)
AM_RANGE(0x4290, 0x4290) AM_MIRROR(0x0047) AM_WRITE(rom_bank_w) /* WRTREG */
AM_RANGE(0x4298, 0x4298) AM_MIRROR(0x0047) AM_WRITE(main_to_sound_w) /* WRSOUND */
AM_RANGE(0x42a0, 0x42a0) AM_MIRROR(0x0047) AM_WRITE(firefox_disc_data_w) /* DSKLATCH */
@@ -723,6 +733,26 @@ static MACHINE_CONFIG_START( firefox )
MCFG_QUANTUM_TIME(attotime::from_hz(60000))
+ MCFG_DEVICE_ADD("latch0", LS259, 0) // 7F
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, recall)) // NVRECALL
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, recall))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, sound_reset_w)) // RSTSOUND
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("nvram_1c", x2212_device, store)) // NVRSTORE
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("nvram_1d", x2212_device, store))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(firefox_state, firefox_disc_lock_w)) // LOCK
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, audio_enable_right_w)) // SWDSKR
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, audio_enable_left_w)) // SWDSKL
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, firefox_disc_reset_w)) // RSTDSK
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, firefox_disc_write_w)) // WRDSK
+
+ MCFG_DEVICE_ADD("latch1", LS259, 0) // 1F
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(firefox_state, coin_counter_right_w)) // COIN COUNTERR
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(firefox_state, coin_counter_left_w)) // COIN COUNTERL
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(firefox_state, led0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(firefox_state, led1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(firefox_state, led2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(firefox_state, led3_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_TIME_INIT(attotime::from_hz((double)MASTER_XTAL/8/16/16/16/16))
diff --git a/src/mame/drivers/flyball.cpp b/src/mame/drivers/flyball.cpp
index 2947cf7eee8..d04bec5c1b5 100644
--- a/src/mame/drivers/flyball.cpp
+++ b/src/mame/drivers/flyball.cpp
@@ -20,6 +20,7 @@ TODO:
#include "emu.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "screen.h"
#define MASTER_CLOCK XTAL_12_096MHz
@@ -42,6 +43,7 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
+ m_outlatch(*this, "outlatch"),
m_playfield_ram(*this, "playfield_ram") { }
/* devices */
@@ -49,6 +51,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ required_device<f9334_device> m_outlatch;
/* memory pointers */
required_shared_ptr<uint8_t> m_playfield_ram;
@@ -79,6 +82,7 @@ public:
DECLARE_WRITE8_MEMBER(pitcher_vert_w);
DECLARE_WRITE8_MEMBER(pitcher_horz_w);
DECLARE_WRITE8_MEMBER(misc_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_w);
TILEMAP_MAPPER_MEMBER(get_memory_offset);
TILE_GET_INFO_MEMBER(get_tile_info);
@@ -273,29 +277,13 @@ WRITE8_MEMBER(flyball_state::pitcher_horz_w)
WRITE8_MEMBER(flyball_state::misc_w)
{
- int bit = ~data & 1;
+ // address and data lines passed through inverting buffers
+ m_outlatch->write_d0(space, ~offset, ~data);
+}
- switch (offset)
- {
- case 0:
- output().set_led_value(0, bit);
- break;
- case 1:
- /* crowd very loud */
- break;
- case 2:
- /* footstep off-on */
- break;
- case 3:
- /* crowd off-on */
- break;
- case 4:
- /* crowd soft-loud */
- break;
- case 5:
- /* bat hit */
- break;
- }
+WRITE_LINE_MEMBER(flyball_state::lamp_w)
+{
+ output().set_led_value(0, state);
}
@@ -468,6 +456,14 @@ static MACHINE_CONFIG_START( flyball )
MCFG_CPU_PROGRAM_MAP(flyball_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", flyball_state, nmi_line_pulse)
+ MCFG_DEVICE_ADD("outlatch", F9334, 0) // F7
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(flyball_state, lamp_w)) // 1 player lamp
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // crowd very loud
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // footstep off-on
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // crowd off-on
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // crowd soft-loud
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // bat hit
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/freekick.cpp b/src/mame/drivers/freekick.cpp
index d07c7ce2dac..70fe32113ff 100644
--- a/src/mame/drivers/freekick.cpp
+++ b/src/mame/drivers/freekick.cpp
@@ -45,6 +45,7 @@ TODO:
#include "includes/freekick.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/i8255.h"
#include "machine/mc8123.h"
#include "sound/sn76496.h"
@@ -58,27 +59,38 @@ TODO:
*
*************************************/
-WRITE8_MEMBER(freekick_state::flipscreen_xy_w)
+WRITE_LINE_MEMBER(freekick_state::flipscreen_x_w)
{
- /* flip Y/X could be the other way round... */
- if (offset)
- flip_screen_y_set(~data & 1);
- else
- flip_screen_x_set(~data & 1);
+ flip_screen_x_set(!state);
+}
+
+WRITE_LINE_MEMBER(freekick_state::flipscreen_y_w)
+{
+ flip_screen_y_set(!state);
+}
+
+WRITE_LINE_MEMBER(freekick_state::flipscreen_w)
+{
+ flip_screen_set(!state);
}
-WRITE8_MEMBER(freekick_state::flipscreen_w)
+
+WRITE_LINE_MEMBER(freekick_state::coin1_w)
{
- flip_screen_set(~data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
+WRITE_LINE_MEMBER(freekick_state::coin2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
-WRITE8_MEMBER(freekick_state::coin_w)
+WRITE_LINE_MEMBER(freekick_state::spinner_select_w)
{
- machine().bookkeeping().coin_counter_w(offset, data & 1);
+ m_spinner = state;
}
-WRITE8_MEMBER(freekick_state::spinner_select_w)
+WRITE8_MEMBER(freekick_state::gigas_spinner_select_w)
{
m_spinner = data & 1;
}
@@ -95,9 +107,9 @@ WRITE8_MEMBER(freekick_state::pbillrd_bankswitch_w)
m_bank1d->set_entry(data & 1);
}
-WRITE8_MEMBER(freekick_state::nmi_enable_w)
+WRITE_LINE_MEMBER(freekick_state::nmi_enable_w)
{
- m_nmi_en = data & 1;
+ m_nmi_en = state;
}
INTERRUPT_GEN_MEMBER(freekick_state::freekick_irqgen)
@@ -184,10 +196,8 @@ static ADDRESS_MAP_START( omega_map, AS_PROGRAM, 8, freekick_state )
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(freek_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xd900, 0xdfff) AM_RAM
- AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w)
- AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w)
- AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w)
- AM_RANGE(0xe005, 0xe005) AM_WRITENOP
+ AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0")
+ AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1")
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITENOP //bankswitch ?
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2")
@@ -205,9 +215,7 @@ static ADDRESS_MAP_START( pbillrd_map, AS_PROGRAM, 8, freekick_state )
AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xd900, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0")
- AM_RANGE(0xe000, 0xe001) AM_WRITE(flipscreen_xy_w)
- AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w)
- AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w)
+ AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1")
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITE(pbillrd_bankswitch_w)
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2")
@@ -229,13 +237,11 @@ static ADDRESS_MAP_START( freekick_map, AS_PROGRAM, 8, freekick_state )
AM_RANGE(0xe800, 0xe8ff) AM_RAM AM_SHARE("spriteram") // sprites
AM_RANGE(0xec00, 0xec03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write)
AM_RANGE(0xf000, 0xf003) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
- AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w)
+ AM_RANGE(0xf800, 0xf800) AM_READ_PORT("IN0")
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1")
AM_RANGE(0xf802, 0xf802) AM_READNOP //MUST return bit 0 = 0, otherwise game resets
AM_RANGE(0xf803, 0xf803) AM_READ(spinner_r)
- AM_RANGE(0xf802, 0xf803) AM_WRITE(coin_w)
- AM_RANGE(0xf804, 0xf804) AM_WRITE(nmi_enable_w)
- AM_RANGE(0xf806, 0xf806) AM_WRITE(spinner_select_w)
+ AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xfc00, 0xfc00) AM_DEVWRITE("sn1", sn76489a_device, write)
AM_RANGE(0xfc01, 0xfc01) AM_DEVWRITE("sn2", sn76489a_device, write)
AM_RANGE(0xfc02, 0xfc02) AM_DEVWRITE("sn3", sn76489a_device, write)
@@ -248,10 +254,8 @@ static ADDRESS_MAP_START( gigas_map, AS_PROGRAM, 8, freekick_state )
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(freek_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xd900, 0xdfff) AM_RAM
- AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0") AM_WRITE(flipscreen_w)
- AM_RANGE(0xe002, 0xe003) AM_WRITE(coin_w)
- AM_RANGE(0xe004, 0xe004) AM_WRITE(nmi_enable_w)
- AM_RANGE(0xe005, 0xe005) AM_WRITENOP
+ AM_RANGE(0xe000, 0xe000) AM_READ_PORT("IN0")
+ AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xe800, 0xe800) AM_READ_PORT("IN1")
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("DSW1") AM_WRITENOP //bankswitch ?
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW2")
@@ -263,19 +267,19 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( omega_io_map, AS_IO, 8, freekick_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w)
+ AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w)
AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW3")
ADDRESS_MAP_END
static ADDRESS_MAP_START( gigas_io_map, AS_IO, 8, freekick_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w)
+ AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w)
AM_RANGE(0x01, 0x01) AM_READNOP //unused dip 3
ADDRESS_MAP_END
static ADDRESS_MAP_START( oigas_io_map, AS_IO, 8, freekick_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, spinner_select_w)
+ AM_RANGE(0x00, 0x00) AM_READWRITE(spinner_r, gigas_spinner_select_w)
AM_RANGE(0x01, 0x01) AM_READNOP //unused dip 3
AM_RANGE(0x02, 0x02) AM_READ(oigas_2_r)
AM_RANGE(0x03, 0x03) AM_READ(oigas_3_r)
@@ -682,7 +686,6 @@ MACHINE_RESET_MEMBER(freekick_state,freekick)
{
m_romaddr = 0;
m_spinner = 0;
- m_nmi_en = 0;
m_ff_data = 0;
machine().bookkeeping().coin_counter_w(0, 0);
@@ -722,6 +725,13 @@ static MACHINE_CONFIG_START( omega )
MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB
MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // 3M
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(freekick_state, coin1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(freekick_state, coin2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(freekick_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
+
// video hardware
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_18_432MHz/3, 768/2, 0, 512/2, 263, 0+16, 224+16) // unknown divisor
@@ -755,6 +765,11 @@ static MACHINE_CONFIG_START( base )
MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB
MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(freekick_state, coin1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(freekick_state, coin2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(freekick_state, nmi_enable_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_12MHz/2, 768/2, 0, 512/2, 263, 0+16, 224+16)
@@ -781,8 +796,11 @@ static MACHINE_CONFIG_START( base )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pbillrd, base )
+ MCFG_DEVICE_MODIFY("outlatch") // 10K
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(freekick_state, flipscreen_y_w))
+ /* flip Y/X could be the other way round... */
- /* basic machine hardware */
MCFG_MACHINE_START_OVERRIDE(freekick_state,pbillrd)
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
MACHINE_CONFIG_END
@@ -802,6 +820,10 @@ static MACHINE_CONFIG_DERIVED( freekick, base )
MCFG_CPU_PROGRAM_MAP(freekick_map)
MCFG_CPU_IO_MAP(freekick_io_map)
+ MCFG_DEVICE_MODIFY("outlatch") // 5C
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(freekick_state, spinner_select_w))
+
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
@@ -828,6 +850,10 @@ static MACHINE_CONFIG_DERIVED( gigas, base )
MCFG_CPU_IO_MAP(gigas_io_map)
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
+
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
@@ -846,6 +872,10 @@ static MACHINE_CONFIG_DERIVED( gigasm, base )
MCFG_CPU_PERIODIC_INT_DRIVER(freekick_state, irq0_line_hold, 120) // measured on PCB
MCFG_CPU_VBLANK_INT_DRIVER("screen", freekick_state, freekick_irqgen)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(freekick_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // ???
+
MCFG_MACHINE_START_OVERRIDE(freekick_state,freekick)
MCFG_MACHINE_RESET_OVERRIDE(freekick_state,freekick)
diff --git a/src/mame/drivers/funkybee.cpp b/src/mame/drivers/funkybee.cpp
index 797346192a7..5ac5f5bf1dd 100644
--- a/src/mame/drivers/funkybee.cpp
+++ b/src/mame/drivers/funkybee.cpp
@@ -77,6 +77,7 @@ Stephh's notes (based on the games Z80 code and some tests) :
#include "includes/funkybee.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
@@ -88,9 +89,14 @@ READ8_MEMBER(funkybee_state::funkybee_input_port_0_r)
return ioport("IN0")->read();
}
-WRITE8_MEMBER(funkybee_state::funkybee_coin_counter_w)
+WRITE_LINE_MEMBER(funkybee_state::coin_counter_1_w)
{
- machine().bookkeeping().coin_counter_w(offset, data);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(funkybee_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
static ADDRESS_MAP_START( funkybee_map, AS_PROGRAM, 8, funkybee_state )
@@ -99,9 +105,7 @@ static ADDRESS_MAP_START( funkybee_map, AS_PROGRAM, 8, funkybee_state )
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(funkybee_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE(funkybee_colorram_w) AM_SHARE("colorram")
AM_RANGE(0xe000, 0xe000) AM_WRITE(funkybee_scroll_w)
- AM_RANGE(0xe800, 0xe800) AM_WRITE(funkybee_flipscreen_w)
- AM_RANGE(0xe802, 0xe803) AM_WRITE(funkybee_coin_counter_w)
- AM_RANGE(0xe805, 0xe805) AM_WRITE(funkybee_gfx_bank_w)
+ AM_RANGE(0xe800, 0xe807) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xf000, 0xf000) AM_READNOP /* IRQ Ack */
AM_RANGE(0xf800, 0xf800) AM_READ(funkybee_input_port_0_r) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("IN1")
@@ -275,10 +279,7 @@ GFXDECODE_END
void funkybee_state::machine_start()
{
save_item(NAME(m_gfx_bank));
-}
-void funkybee_state::machine_reset()
-{
m_gfx_bank = 0;
}
@@ -290,6 +291,12 @@ static MACHINE_CONFIG_START( funkybee )
MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", funkybee_state, irq0_line_hold)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(funkybee_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(funkybee_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(funkybee_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(funkybee_state, gfx_bank_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/gaelco.cpp b/src/mame/drivers/gaelco.cpp
index b316ed27026..71c59008556 100644
--- a/src/mame/drivers/gaelco.cpp
+++ b/src/mame/drivers/gaelco.cpp
@@ -44,19 +44,29 @@ WRITE8_MEMBER(gaelco_state::bigkarnk_sound_command_w)
m_audiocpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
}
-WRITE8_MEMBER(gaelco_state::bigkarnk_coin_w)
+WRITE8_MEMBER(gaelco_state::output_latch_w)
{
- switch ((offset >> 3))
- {
- case 0x00: /* Coin Lockouts */
- case 0x01:
- machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01);
- break;
- case 0x02: /* Coin Counters */
- case 0x03:
- machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
- break;
- }
+ m_outlatch->write_bit(offset >> 3, BIT(data, 0));
+}
+
+WRITE_LINE_MEMBER(gaelco_state::coin1_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, state);
+}
+
+WRITE_LINE_MEMBER(gaelco_state::coin2_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(1, state);
+}
+
+WRITE_LINE_MEMBER(gaelco_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(gaelco_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
WRITE8_MEMBER(gaelco_state::OKIM6295_bankswitch_w)
@@ -120,8 +130,8 @@ static ADDRESS_MAP_START( bigkarnk_map, AS_PROGRAM, 16, gaelco_state )
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SERVICE")
+ AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff) /* Coin Counters + Coin Lockout */
AM_RANGE(0x70000e, 0x70000f) AM_WRITE8(bigkarnk_sound_command_w, 0x00ff) /* Triggers a FIRQ on the sound CPU */
- AM_RANGE(0x70000a, 0x70003b) AM_WRITE8(bigkarnk_coin_w, 0x00ff) /* Coin Counters + Coin Lockout */
AM_RANGE(0xff8000, 0xffffff) AM_RAM /* Work RAM */
ADDRESS_MAP_END
@@ -163,6 +173,7 @@ static ADDRESS_MAP_START( squash_map, AS_PROGRAM, 16, gaelco_state )
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1")
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
+ AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff)
AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff)
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */
AM_RANGE(0xff0000, 0xffffff) AM_RAM /* Work RAM */
@@ -180,6 +191,7 @@ static ADDRESS_MAP_START( thoop_map, AS_PROGRAM, 16, gaelco_state )
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1")
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
+ AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(output_latch_w, 0x00ff)
AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff)
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */
AM_RANGE(0xff0000, 0xffffff) AM_RAM /* Work RAM */
@@ -510,6 +522,11 @@ static MACHINE_CONFIG_START( bigkarnk )
MCFG_QUANTUM_TIME(attotime::from_hz(600))
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -578,6 +595,12 @@ static MACHINE_CONFIG_START( squash )
MCFG_QUANTUM_TIME(attotime::from_hz(600))
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -611,6 +634,12 @@ static MACHINE_CONFIG_START( thoop )
MCFG_QUANTUM_TIME(attotime::from_hz(600))
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // B8
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco_state, coin1_lockout_w)) // not inverted
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco_state, coin2_lockout_w)) // not inverted
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // used
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/gaelco2.cpp b/src/mame/drivers/gaelco2.cpp
index d236f395108..be85ce0b6f4 100644
--- a/src/mame/drivers/gaelco2.cpp
+++ b/src/mame/drivers/gaelco2.cpp
@@ -90,7 +90,7 @@ static ADDRESS_MAP_START( maniacsq_map, AS_PROGRAM, 16, gaelco2_state )
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */
AM_RANGE(0x30004a, 0x30004b) AM_WRITENOP /* Sound muting? */
AM_RANGE(0x320000, 0x320001) AM_READ_PORT("COIN") /* COINSW + SERVICESW */
- AM_RANGE(0x500000, 0x500001) AM_WRITE(gaelco2_coin_w) /* Coin lockout + counters */
+ AM_RANGE(0x500000, 0x500001) AM_WRITE(alighunt_coin_w) /* Coin lockout + counters */
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM */
ADDRESS_MAP_END
@@ -272,10 +272,7 @@ static ADDRESS_MAP_START( bang_map, AS_PROGRAM, 16, bang_state )
AM_RANGE(0x218008, 0x218009) AM_WRITENOP /* CLR INT Video */
AM_RANGE(0x300000, 0x300001) AM_READ_PORT("P1")
AM_RANGE(0x300002, 0x300003) AM_READNOP /* Random number generator? */
- AM_RANGE(0x300000, 0x300003) AM_WRITE(gaelco2_coin2_w) /* Coin Counters */
- AM_RANGE(0x300008, 0x300009) AM_WRITE(gaelco2_eeprom_data_w) /* EEPROM data */
- AM_RANGE(0x30000a, 0x30000b) AM_WRITE(gaelco2_eeprom_sk_w) /* EEPROM serial clock */
- AM_RANGE(0x30000c, 0x30000d) AM_WRITE(gaelco2_eeprom_cs_w) /* EEPROM chip select */
+ AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff) /* Coin Counters & serial EEPROM */
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("P2")
AM_RANGE(0x300020, 0x300021) AM_READ_PORT("COIN")
AM_RANGE(0x310000, 0x310001) AM_READ(p1_gun_x) AM_WRITE(bang_clr_gun_int_w) /* Gun 1P X */ /* CLR INT Gun */
@@ -324,6 +321,13 @@ static MACHINE_CONFIG_START( bang )
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) /* EEPROM data */
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) /* EEPROM serial clock */
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) /* EEPROM chip select */
+
/* video hardware */
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
@@ -472,7 +476,7 @@ static ADDRESS_MAP_START( alighunt_map, AS_PROGRAM, 16, gaelco2_state )
AM_RANGE(0x300000, 0x300001) AM_READ_PORT("IN0") /* DSW #1 + Input 1P */
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */
AM_RANGE(0x320000, 0x320001) AM_READ_PORT("COIN") /* COINSW + SERVICESW */
- AM_RANGE(0x500000, 0x500001) AM_WRITE(gaelco2_coin_w) /* Coin lockout + counters */
+ AM_RANGE(0x500000, 0x500001) AM_WRITE(alighunt_coin_w) /* Coin lockout + counters */
AM_RANGE(0x500006, 0x500007) AM_WRITENOP /* ??? */
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
@@ -689,7 +693,7 @@ static ADDRESS_MAP_START( touchgo_map, AS_PROGRAM, 16, gaelco2_state )
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DSW #2 + Input 2P */
AM_RANGE(0x300004, 0x300005) AM_READ_PORT("IN2") /* COINSW + Input 3P */
AM_RANGE(0x300006, 0x300007) AM_READ_PORT("IN3") /* SERVICESW + Input 4P */
- AM_RANGE(0x500000, 0x50001f) AM_WRITE(touchgo_coin_w) /* Coin counters */
+ AM_RANGE(0x500000, 0x500001) AM_SELECT(0x0038) AM_WRITE(wrally2_latch_w) /* Coin counters */
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
ADDRESS_MAP_END
@@ -809,6 +813,12 @@ static MACHINE_CONFIG_START( touchgo )
MCFG_CPU_PROGRAM_MAP(touchgo_map)
MCFG_CPU_VBLANK_INT_DRIVER("lscreen", gaelco2_state, irq6_line_hold)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC6
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco2_state, coin3_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco2_state, coin4_counter_w))
+
/* video hardware */
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", 0x0400000)
@@ -1003,10 +1013,7 @@ static ADDRESS_MAP_START( snowboar_map, AS_PROGRAM, 16, gaelco2_state )
AM_RANGE(0x212000, 0x213fff) AM_RAM /* Extra RAM */
AM_RANGE(0x218004, 0x218009) AM_RAM AM_SHARE("vregs") /* Video Registers */
AM_RANGE(0x300000, 0x300001) AM_READ_PORT("P1")
- AM_RANGE(0x300000, 0x300003) AM_WRITE(gaelco2_coin2_w) /* Coin Counters */
- AM_RANGE(0x300008, 0x300009) AM_WRITE(gaelco2_eeprom_data_w) /* EEPROM data */
- AM_RANGE(0x30000a, 0x30000b) AM_WRITE(gaelco2_eeprom_sk_w) /* EEPROM serial clock */
- AM_RANGE(0x30000c, 0x30000d) AM_WRITE(gaelco2_eeprom_cs_w) /* EEPROM chip select */
+ AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff) /* Coin Counters & serial EEPROM */
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("P2")
AM_RANGE(0x300020, 0x300021) AM_READ_PORT("COIN")
AM_RANGE(0x310000, 0x31ffff) AM_READWRITE(snowboar_protection_r,snowboar_protection_w) AM_SHARE("snowboar_prot") /* Protection */
@@ -1054,6 +1061,13 @@ static MACHINE_CONFIG_START( snowboar )
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) /* EEPROM data */
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) /* EEPROM serial clock */
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) /* EEPROM chip select */
+
/* video hardware */
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
@@ -1187,9 +1201,7 @@ static ADDRESS_MAP_START( wrally2_map, AS_PROGRAM, 16, wrally2_state )
AM_RANGE(0x300002, 0x300003) AM_READ_PORT("IN1") /* DIPSW #1 */
AM_RANGE(0x300004, 0x300005) AM_READ_PORT("IN2") /* Inputs 2P + COINSW */
AM_RANGE(0x300006, 0x300007) AM_READ_PORT("IN3") /* SERVICESW */
- AM_RANGE(0x400000, 0x400011) AM_WRITE(wrally2_coin_w) /* Coin Counters */
- AM_RANGE(0x400028, 0x400029) AM_WRITE(wrally2_adc_clk) /* ADCs clock-in line */
- AM_RANGE(0x400030, 0x400031) AM_WRITE(wrally2_adc_cs) /* ADCs chip select line */
+ AM_RANGE(0x400000, 0x400001) AM_SELECT(0x0038) AM_WRITE(wrally2_latch_w) /* Coin counters, etc. */
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
ADDRESS_MAP_END
@@ -1293,6 +1305,12 @@ static MACHINE_CONFIG_START( wrally2 )
MCFG_DEVICE_ADD("gaelco_ds5002fp", GAELCO_DS5002FP, XTAL_24MHz / 2)
MCFG_DEVICE_ADDRESS_MAP(0, mcu_hostmem_map)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gaelco2_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco2_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(wrally2_state, wrally2_adc_clk)) /* ADCs clock-in line */
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(wrally2_state, wrally2_adc_cs)) /* ADCs chip select line */
+
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
/* video hardware */
diff --git a/src/mame/drivers/gaelco3d.cpp b/src/mame/drivers/gaelco3d.cpp
index b76431df0d3..09cd7b6922e 100644
--- a/src/mame/drivers/gaelco3d.cpp
+++ b/src/mame/drivers/gaelco3d.cpp
@@ -253,16 +253,6 @@ WRITE16_MEMBER(gaelco3d_state::irq_ack_w)
m_maincpu->set_input_line(2, CLEAR_LINE);
}
-WRITE32_MEMBER(gaelco3d_state::irq_ack32_w)
-{
- if (mem_mask == 0xffff0000)
- irq_ack_w(space, offset, data, mem_mask >> 16);
- else if (ACCESSING_BITS_0_7)
- m_serial->tr_w(space, 0, data & 0x01);
- else
- logerror("%06X:irq_ack_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
-}
-
/*************************************
*
@@ -290,52 +280,6 @@ READ16_MEMBER(gaelco3d_state::eeprom_data_r)
return result;
}
-READ32_MEMBER(gaelco3d_state::eeprom_data32_r)
-{
- if (ACCESSING_BITS_16_31)
- return (eeprom_data_r(space, 0, mem_mask >> 16) << 16) | 0xffff;
- else if (ACCESSING_BITS_0_7)
- {
- uint8_t data = m_serial->data_r(space,0);
- if (LOG)
- logerror("%06X:read(%02X) = %08X & %08X\n", m_maincpu->pc(), offset, data, mem_mask);
- return data | 0xffffff00;
- }
- else
- logerror("%06X:read(%02X) = mask %08X\n", m_maincpu->pc(), offset, mem_mask);
-
- return 0xffffffff;
-}
-
-
-WRITE16_MEMBER(gaelco3d_state::eeprom_data_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_eeprom->di_write(data & 0x01);
- }
- else if (mem_mask != 0xffff)
- logerror("write mask: %08x data %08x\n", mem_mask, data);
-}
-
-
-WRITE16_MEMBER(gaelco3d_state::eeprom_clock_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
- }
-}
-
-
-WRITE16_MEMBER(gaelco3d_state::eeprom_cs_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
- }
-}
-
/*************************************
@@ -403,46 +347,29 @@ CUSTOM_INPUT_MEMBER(gaelco3d_state::analog_bit_r)
}
-WRITE16_MEMBER(gaelco3d_state::analog_port_clock_w)
+WRITE_LINE_MEMBER(gaelco3d_state::analog_port_clock_w)
{
/* a zero/one combo is written here to clock the next analog port bit */
- if (ACCESSING_BITS_0_7)
+ if (!state)
{
- if (!(data & 0xff))
- {
- m_analog_ports[0] <<= 1;
- m_analog_ports[1] <<= 1;
- m_analog_ports[2] <<= 1;
- m_analog_ports[3] <<= 1;
- }
- }
- else
- {
- if (LOG)
- logerror("%06X:analog_port_clock_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
+ m_analog_ports[0] <<= 1;
+ m_analog_ports[1] <<= 1;
+ m_analog_ports[2] <<= 1;
+ m_analog_ports[3] <<= 1;
}
}
-WRITE16_MEMBER(gaelco3d_state::analog_port_latch_w)
+WRITE_LINE_MEMBER(gaelco3d_state::analog_port_latch_w)
{
/* a zero is written here to read the analog ports, and a one is written when finished */
- if (ACCESSING_BITS_0_7)
- {
- if (!(data & 0xff))
- {
- m_analog_ports[0] = m_analog[0].read_safe(0);
- m_analog_ports[1] = m_analog[1].read_safe(0);
- m_analog_ports[2] = m_analog[2].read_safe(0);
- m_analog_ports[3] = m_analog[3].read_safe(0);
- }
- }
- else
+ if (!state)
{
- if (LOG)
- logerror("%06X:analog_port_latch_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
+ m_analog_ports[0] = m_analog[0].read_safe(0);
+ m_analog_ports[1] = m_analog[1].read_safe(0);
+ m_analog_ports[2] = m_analog[2].read_safe(0);
+ m_analog_ports[3] = m_analog[3].read_safe(0);
}
-
}
@@ -481,31 +408,30 @@ WRITE8_MEMBER(gaelco3d_state::tms_iack_w)
*
*************************************/
-WRITE16_MEMBER(gaelco3d_state::tms_reset_w)
+WRITE_LINE_MEMBER(gaelco3d_state::tms_reset_w)
{
/* this is set to 0 while data is uploaded, then set to $ffff after it is done */
/* it does not ever appear to be touched after that */
if (LOG)
- logerror("%06X:tms_reset_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
- m_tms->set_input_line(INPUT_LINE_RESET, (data == 0xffff) ? CLEAR_LINE : ASSERT_LINE);
+ logerror("%06X:tms_reset_w = %d\n", m_maincpu->pc(), state);
+ m_tms->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
}
-WRITE16_MEMBER(gaelco3d_state::tms_irq_w)
+WRITE_LINE_MEMBER(gaelco3d_state::tms_irq_w)
{
/* this is written twice, 0,1, in quick succession */
/* done after uploading, and after modifying the comm area */
if (LOG)
- logerror("%06X:tms_irq_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
- if (ACCESSING_BITS_0_7)
- m_tms->set_input_line(0, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE);
+ logerror("%06X:tms_irq_w = %d\n", m_maincpu->pc(), state);
+ m_tms->set_input_line(0, state ? CLEAR_LINE : ASSERT_LINE);
}
-WRITE16_MEMBER(gaelco3d_state::tms_control3_w)
+WRITE_LINE_MEMBER(gaelco3d_state::tms_control3_w)
{
if (LOG)
- logerror("%06X:tms_control3_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
+ logerror("%06X:tms_control3_w = %d\n", m_maincpu->pc(), state);
}
@@ -708,31 +634,22 @@ WRITE32_MEMBER(gaelco3d_state::adsp_tx_callback)
*************************************/
-WRITE32_MEMBER(gaelco3d_state::radikalb_lamp_w)
+WRITE_LINE_MEMBER(gaelco3d_state::radikalb_lamp_w)
{
/* arbitrary data written */
- if (ACCESSING_BITS_0_7)
- logerror("%06X:unknown_127_w = %02X\n", space.device().safe_pc(), data & 0xff);
- else
- logerror("%06X:unknown_127_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
+ logerror("%06X:unknown_127_w = %d\n", m_maincpu->pc(), state);
}
-WRITE32_MEMBER(gaelco3d_state::unknown_137_w)
+WRITE_LINE_MEMBER(gaelco3d_state::unknown_137_w)
{
/* only written $00 or $ff */
- if (ACCESSING_BITS_0_7)
- logerror("%06X:unknown_137_w = %02X\n", space.device().safe_pc(), data & 0xff);
- else
- logerror("%06X:unknown_137_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
+ logerror("%06X:unknown_137_w = %d\n", m_maincpu->pc(), state);
}
-WRITE32_MEMBER(gaelco3d_state::unknown_13a_w)
+WRITE_LINE_MEMBER(gaelco3d_state::unknown_13a_w)
{
/* only written $0000 or $0001 */
- if (ACCESSING_BITS_0_15)
- logerror("%06X:unknown_13a_w = %04X\n", space.device().safe_pc(), data & 0xffff);
- else
- logerror("%06X:unknown_13a_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
+ logerror("%06X:unknown_13a_w = %04X\n", m_maincpu->pc(), state);
}
@@ -743,6 +660,16 @@ WRITE32_MEMBER(gaelco3d_state::unknown_13a_w)
*
*************************************/
+WRITE8_MEMBER(gaelco3d_state::mainlatch_68000_w)
+{
+ m_mainlatch->write_bit(offset >> 2, BIT(data, 0));
+}
+
+WRITE8_MEMBER(gaelco3d_state::outlatch_68000_w)
+{
+ m_outlatch->write_bit(offset >> 3, BIT(data, 0));
+}
+
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, gaelco3d_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x1fffff) AM_ROM
@@ -753,27 +680,26 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, gaelco3d_state )
AM_RANGE(0x51003c, 0x51003d) AM_READ_PORT("IN3")
AM_RANGE(0x510040, 0x510041) AM_WRITE(sound_data_w)
AM_RANGE(0x510042, 0x510043) AM_READ(sound_status_r)
- AM_RANGE(0x510100, 0x510101) AM_READ(eeprom_data_r)
- AM_RANGE(0x510100, 0x510101) AM_WRITE(irq_ack_w)
- AM_RANGE(0x510102, 0x510103) AM_DEVWRITE8("serial", gaelco_serial_device, tr_w, 0x00ff)
+ AM_RANGE(0x510100, 0x510101) AM_READWRITE(eeprom_data_r, irq_ack_w)
AM_RANGE(0x510102, 0x510103) AM_DEVREAD8("serial", gaelco_serial_device, data_r, 0x00ff)
+ AM_RANGE(0x510102, 0x510103) AM_SELECT(0x000038) AM_WRITE8(mainlatch_68000_w, 0x00ff)
AM_RANGE(0x510104, 0x510105) AM_DEVWRITE8("serial", gaelco_serial_device, data_w, 0x00ff)
- AM_RANGE(0x51010a, 0x51010b) AM_DEVWRITE8("serial", gaelco_serial_device, rts_w, 0x00ff)
- AM_RANGE(0x510110, 0x510113) AM_WRITE(eeprom_data_w)
- AM_RANGE(0x510116, 0x510117) AM_WRITE(tms_control3_w)
- AM_RANGE(0x510118, 0x51011b) AM_WRITE(eeprom_clock_w)
- AM_RANGE(0x510120, 0x510123) AM_WRITE(eeprom_cs_w)
- AM_RANGE(0x51012a, 0x51012b) AM_WRITE(tms_reset_w)
- AM_RANGE(0x510132, 0x510133) AM_WRITE(tms_irq_w)
- AM_RANGE(0x510146, 0x510147) AM_DEVWRITE8("serial", gaelco_serial_device, irq_enable, 0x00ff)
- AM_RANGE(0x510156, 0x510157) AM_WRITE(analog_port_clock_w)
- AM_RANGE(0x510166, 0x510167) AM_WRITE(analog_port_latch_w)
- AM_RANGE(0x510176, 0x510177) AM_DEVWRITE8("serial", gaelco_serial_device, unknown_w, 0x00ff)
+ AM_RANGE(0x510106, 0x510107) AM_SELECT(0x000070) AM_WRITE8(outlatch_68000_w, 0x00ff)
AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE(tms_comm_w) AM_SHARE("tms_comm_base")
AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_SHARE("m68k_ram_base")
ADDRESS_MAP_END
+WRITE8_MEMBER(gaelco3d_state::mainlatch_68020_w)
+{
+ m_mainlatch->write_bit(offset >> 1, BIT(data, 0));
+}
+
+WRITE8_MEMBER(gaelco3d_state::outlatch_68020_w)
+{
+ m_outlatch->write_bit(offset >> 2, BIT(data, 0));
+}
+
static ADDRESS_MAP_START( main020_map, AS_PROGRAM, 32, gaelco3d_state )
AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE(gaelco3d_paletteram_020_w) AM_SHARE("paletteram")
@@ -783,23 +709,11 @@ static ADDRESS_MAP_START( main020_map, AS_PROGRAM, 32, gaelco3d_state )
AM_RANGE(0x51003c, 0x51003f) AM_READ_PORT("IN3")
AM_RANGE(0x510040, 0x510043) AM_READ16(sound_status_r, 0x0000ffff)
AM_RANGE(0x510040, 0x510043) AM_WRITE16(sound_data_w, 0xffff0000)
- AM_RANGE(0x510100, 0x510103) AM_READ(eeprom_data32_r)
- AM_RANGE(0x510100, 0x510103) AM_WRITE(irq_ack32_w)
+ AM_RANGE(0x510100, 0x510103) AM_READWRITE16(eeprom_data_r, irq_ack_w, 0xffff0000)
+ AM_RANGE(0x510100, 0x510103) AM_DEVREAD8("serial", gaelco_serial_device, data_r, 0x000000ff)
+ AM_RANGE(0x510100, 0x510103) AM_SELECT(0x000038) AM_WRITE8(mainlatch_68020_w, 0x000000ff)
AM_RANGE(0x510104, 0x510107) AM_DEVWRITE8("serial", gaelco_serial_device, data_w, 0x00ff0000)
- AM_RANGE(0x510108, 0x51010b) AM_DEVWRITE8("serial", gaelco_serial_device, rts_w, 0x000000ff)
- AM_RANGE(0x510110, 0x510113) AM_WRITE16(eeprom_data_w, 0x0000ffff)
- AM_RANGE(0x510114, 0x510117) AM_WRITE16(tms_control3_w, 0x0000ffff)
- AM_RANGE(0x510118, 0x51011b) AM_WRITE16(eeprom_clock_w, 0x0000ffff)
- AM_RANGE(0x510120, 0x510123) AM_WRITE16(eeprom_cs_w, 0x0000ffff)
- AM_RANGE(0x510124, 0x510127) AM_WRITE(radikalb_lamp_w)
- AM_RANGE(0x510128, 0x51012b) AM_WRITE16(tms_reset_w, 0x0000ffff)
- AM_RANGE(0x510130, 0x510133) AM_WRITE16(tms_irq_w, 0x0000ffff)
- AM_RANGE(0x510134, 0x510137) AM_WRITE(unknown_137_w)
- AM_RANGE(0x510138, 0x51013b) AM_WRITE(unknown_13a_w)
- AM_RANGE(0x510144, 0x510147) AM_DEVWRITE8("serial", gaelco_serial_device, irq_enable, 0x000000ff)
- AM_RANGE(0x510154, 0x510157) AM_WRITE16(analog_port_clock_w, 0x0000ffff)
- AM_RANGE(0x510164, 0x510167) AM_WRITE16(analog_port_latch_w, 0x0000ffff)
- AM_RANGE(0x510174, 0x510177) AM_DEVWRITE8("serial", gaelco_serial_device, unknown_w, 0x000000ff)
+ AM_RANGE(0x510104, 0x510107) AM_SELECT(0x000070) AM_WRITE8(outlatch_68020_w, 0x000000ff)
AM_RANGE(0xfe7f80, 0xfe7fff) AM_WRITE16(tms_comm_w, 0xffffffff) AM_SHARE("tms_comm_base")
AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_SHARE("m68k_ram_base")
ADDRESS_MAP_END
@@ -967,7 +881,6 @@ static MACHINE_CONFIG_START( gaelco3d )
MCFG_CPU_PROGRAM_MAP(adsp_program_map)
MCFG_CPU_DATA_MAP(adsp_data_map)
-
MCFG_EEPROM_SERIAL_93C66_ADD("eeprom")
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
@@ -977,6 +890,25 @@ static MACHINE_CONFIG_START( gaelco3d )
MCFG_DEVICE_ADD("serial", GAELCO_SERIAL, 0)
MCFG_GAELCO_SERIAL_IRQ_HANDLER(WRITELINE(gaelco3d_state, ser_irq))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC5 on bottom board next to EEPROM
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, tr_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, rts_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gaelco3d_state, tms_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(gaelco3d_state, tms_irq_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gaelco3d_state, unknown_13a_w))
+
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC2 on top board near edge connector
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gaelco3d_state, tms_control3_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gaelco3d_state, radikalb_lamp_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gaelco3d_state, unknown_137_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, irq_enable))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gaelco3d_state, analog_port_clock_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(gaelco3d_state, analog_port_latch_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("serial", gaelco_serial_device, unknown_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/galaga.cpp b/src/mame/drivers/galaga.cpp
index c97daa9e8bd..463a0131641 100644
--- a/src/mame/drivers/galaga.cpp
+++ b/src/mame/drivers/galaga.cpp
@@ -520,27 +520,27 @@ Line up the LS32 so pin 7 is in line with Z80 pin 29
Atach the 2 chips to the top of the Z80 with some glue
Connect like this....
-LS32 pin 1 tied to Z80 pin 22
-LS32 pin 2 tied to Z80 pin 19
+LS32 pin 1 tied to Z80 pin 22 (WR)
+LS32 pin 2 tied to Z80 pin 19 (MREQ)
LS32 pin 3,4 tied together
-LS32 pin 5 tied to Z80 pin 4
+LS32 pin 5 tied to Z80 pin 4 (A14)
LS32 pin 6 tied to pin 10 LS32
LS32 pin 7 tied to Z80 pin 29 (GND)
LS32 pin 8 tied to LS259 pin 14
-LS32 pin 9 tied to Z80 pin 5
+LS32 pin 9 tied to Z80 pin 5 (A15)
LS32 pins 11, 12, 13 have NC
LS32 pin 14 tied to Z80 pin 11 (+5V)
-LS259 pin 1 tied to Z80 pin 30
-LS259 pin 2 tied to Z80 pin 31
-LS259 pin 3 tied to Z80 pin 32
+LS259 pin 1 tied to Z80 pin 30 (A0)
+LS259 pin 2 tied to Z80 pin 31 (A1)
+LS259 pin 3 tied to Z80 pin 32 (A2)
LS259 pin 4 to ROM 8 (as above)
LS259 pins 5, 6, 7 have NC
LS259 pin 8 tied to Z80 pin 29 (GND)
LS259 pins 9, 10, 11, 12 have NC
-LS259 pin 13 tied to Z80 pin 14
-LS259 pin 15 tied to Z80 pin 26
-LS259 pin 16 tied to Z80 pin 11
+LS259 pin 13 tied to Z80 pin 14 (D0)
+LS259 pin 15 tied to Z80 pin 26 (RESET)
+LS259 pin 16 tied to Z80 pin 11 (+5V)
@@ -734,57 +734,28 @@ READ8_MEMBER(galaga_state::bosco_dsw_r)
return bit0 | (bit1 << 1);
}
-WRITE8_MEMBER(galaga_state::galaga_flip_screen_w)
+WRITE_LINE_MEMBER(galaga_state::flip_screen_w)
{
- flip_screen_set(data & 1);
+ flip_screen_set(state);
}
-WRITE8_MEMBER(bosco_state::bosco_flip_screen_w)
+WRITE_LINE_MEMBER(galaga_state::irq1_clear_w)
{
- flip_screen_set(~data & 1);
+ m_main_irq_mask = state;
+ if (!m_main_irq_mask)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
}
+WRITE_LINE_MEMBER(galaga_state::irq2_clear_w)
+{
+ m_sub_irq_mask = state;
+ if (!m_sub_irq_mask)
+ m_subcpu->set_input_line(0, CLEAR_LINE);
+}
-WRITE8_MEMBER(galaga_state::bosco_latch_w)
+WRITE_LINE_MEMBER(galaga_state::nmion_w)
{
- switch (offset)
- {
- case 0x00: /* IRQ1 */
- m_main_irq_mask = data & 1;
- if (!m_main_irq_mask)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
-
- case 0x01: /* IRQ2 */
- m_sub_irq_mask = data & 1;
- if (!m_sub_irq_mask)
- m_subcpu->set_input_line(0, CLEAR_LINE);
- break;
-
- case 0x02: /* NMION */
- m_sub2_nmi_mask = !(data & 1);
- break;
-
- case 0x03: /* RESET */
- m_subcpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
- m_subcpu2->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
- break;
-
- case 0x04: /* n.c. */
- break;
-
- case 0x05: /* MOD 0 (xevious: n.c.) */
- m_custom_mod = (m_custom_mod & ~0x01) | ((data & 1) << 0);
- break;
-
- case 0x06: /* MOD 1 (xevious: n.c.) */
- m_custom_mod = (m_custom_mod & ~0x02) | ((data & 1) << 1);
- break;
-
- case 0x07: /* MOD 2 (xevious: n.c.) */
- m_custom_mod = (m_custom_mod & ~0x04) | ((data & 1) << 2);
- break;
- }
+ m_sub2_nmi_mask = !state;
}
CUSTOM_INPUT_MEMBER(digdug_state::shifted_port_r){ return ioport((const char *)param)->read() >> 4; }
@@ -823,12 +794,6 @@ READ8_MEMBER(galaga_state::namco_52xx_si_r)
return 0;
}
-READ8_MEMBER(galaga_state::custom_mod_r)
-{
- /* MOD0-2 is connected to K1-3; K0 is left unconnected */
- return m_custom_mod << 1;
-}
-
TIMER_CALLBACK_MEMBER(galaga_state::cpu3_interrupt_callback)
{
int scanline = param;
@@ -849,28 +814,13 @@ MACHINE_START_MEMBER(galaga_state,galaga)
{
/* create the interrupt timer */
m_cpu3_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(galaga_state::cpu3_interrupt_callback),this));
- m_custom_mod = 0;
- save_item(NAME(m_custom_mod));
save_item(NAME(m_main_irq_mask));
save_item(NAME(m_sub_irq_mask));
save_item(NAME(m_sub2_nmi_mask));
}
-void galaga_state::bosco_latch_reset()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- int i;
-
- /* Reset all latches */
- for (i = 0;i < 8;i++)
- bosco_latch_w(space,i,0);
-}
-
MACHINE_RESET_MEMBER(galaga_state,galaga)
{
- /* Reset all latches */
- bosco_latch_reset();
-
m_cpu3_interrupt_timer->adjust(m_screen->time_until_pos(64), 64);
}
@@ -886,7 +836,7 @@ static ADDRESS_MAP_START( bosco_map, AS_PROGRAM, 8, bosco_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r)
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
- AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
+ AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx_0", namco_06xx_device, data_r, data_w)
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx_0", namco_06xx_device, ctrl_r, ctrl_w)
@@ -899,8 +849,7 @@ static ADDRESS_MAP_START( bosco_map, AS_PROGRAM, 8, bosco_state )
AM_RANGE(0x9820, 0x9820) AM_WRITE(bosco_scrolly_w)
AM_RANGE(0x9830, 0x9830) AM_WRITEONLY AM_SHARE("starcontrol")
AM_RANGE(0x9840, 0x9840) AM_WRITE(bosco_starclr_w)
- AM_RANGE(0x9870, 0x9870) AM_WRITE(bosco_flip_screen_w)
- AM_RANGE(0x9874, 0x9875) AM_WRITEONLY AM_SHARE("bosco_starblink")
+ AM_RANGE(0x9870, 0x9877) AM_DEVWRITE("videolatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -908,7 +857,7 @@ static ADDRESS_MAP_START( galaga_map, AS_PROGRAM, 8, galaga_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r)
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
- AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
+ AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
@@ -916,8 +865,12 @@ static ADDRESS_MAP_START( galaga_map, AS_PROGRAM, 8, galaga_state )
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("galaga_ram1")
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("galaga_ram2")
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("galaga_ram3")
- AM_RANGE(0xa000, 0xa005) AM_WRITEONLY AM_SHARE("starcontrol")
- AM_RANGE(0xa007, 0xa007) AM_WRITE(galaga_flip_screen_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("videolatch", ls259_device, write_d0)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( gatsbee_main_map, AS_PROGRAM, 8, galaga_state )
+ AM_RANGE(0x0000, 0x0007) AM_MIRROR(0x3ff8) AM_DEVWRITE("extralatch", ls259_device, write_d0)
+ AM_IMPORT_FROM(galaga_map)
ADDRESS_MAP_END
@@ -925,7 +878,7 @@ static ADDRESS_MAP_START( xevious_map, AS_PROGRAM, 8, xevious_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
AM_RANGE(0x6800, 0x6807) AM_READ(bosco_dsw_r)
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
- AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
+ AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
@@ -945,7 +898,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( digdug_map, AS_PROGRAM, 8, digdug_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM AM_WRITENOP /* the only area different for each CPU */
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
- AM_RANGE(0x6820, 0x6827) AM_WRITE(bosco_latch_w) /* misc latches */
+ AM_RANGE(0x6820, 0x6827) AM_DEVWRITE("misclatch", ls259_device, write_d0)
AM_RANGE(0x6830, 0x6830) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x7000, 0x70ff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
AM_RANGE(0x7100, 0x7100) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
@@ -954,7 +907,7 @@ static ADDRESS_MAP_START( digdug_map, AS_PROGRAM, 8, digdug_state )
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("digdug_objram") /* work RAM + sprite registers */
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("digdug_posram") /* work RAM + sprite registers */
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("digdug_flpram") /* work RAM + sprite registers */
- AM_RANGE(0xa000, 0xa007) AM_READNOP AM_WRITE(digdug_PORT_w) /* video latches (spurious reads when setting latch bits) */
+ AM_RANGE(0xa000, 0xa007) AM_READNOP AM_DEVWRITE("videolatch", ls259_device, write_d0) /* video latches (spurious reads when setting latch bits) */
AM_RANGE(0xb800, 0xb83f) AM_DEVREADWRITE("earom", atari_vg_earom_device, read, write) /* non volatile memory data */
AM_RANGE(0xb840, 0xb840) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w) /* non volatile memory control */
ADDRESS_MAP_END
@@ -1619,6 +1572,13 @@ static MACHINE_CONFIG_START( bosco )
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(bosco_map)
+ MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_NAMCO_50XX_ADD("50xx_1", MASTER_CLOCK/6/2) /* 1.536 MHz */
MCFG_NAMCO_50XX_ADD("50xx_2", MASTER_CLOCK/6/2) /* 1.536 MHz */
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
@@ -1657,6 +1617,12 @@ static MACHINE_CONFIG_START( bosco )
MCFG_NAMCO_06XX_WRITE_0_CB(DEVWRITE8("50xx_2", namco_50xx_device, write))
MCFG_NAMCO_06XX_WRITE_1_CB(DEVWRITE8("52xx", namco_52xx_device, write))
+ MCFG_DEVICE_ADD("videolatch", LS259, 0) // 1B on video board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, flip_screen_w)) MCFG_DEVCB_INVERT
+ // Q4-Q5 to 05XX for starfield blink
+ //MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITE("50xx_2", namco_50xx_device, reset_w))
+ //MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITE("52xx", namco_52xx_device, reset_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
@@ -1704,6 +1670,13 @@ static MACHINE_CONFIG_START( galaga )
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(galaga_map)
+ MCFG_DEVICE_ADD("misclatch", LS259, 0) // 3C on CPU board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
MCFG_NAMCO_51XX_INPUT_0_CB(IOPORT("IN0L"))
MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0H"))
@@ -1722,6 +1695,10 @@ static MACHINE_CONFIG_START( galaga )
MCFG_NAMCO_06XX_WRITE_0_CB(DEVWRITE8("51xx", namco_51xx_device, write))
MCFG_NAMCO_06XX_WRITE_3_CB(DEVWRITE8("54xx", namco_54xx_device, write))
+ MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5K on video board
+ // Q0-Q5 to 05XX for starfield control
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(galaga_state, flip_screen_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
@@ -1775,6 +1752,14 @@ static MACHINE_CONFIG_DERIVED( galagab, galaga )
MCFG_DEVICE_REMOVE("discrete")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( gatsbee, galaga )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(gatsbee_main_map)
+
+ MCFG_DEVICE_ADD("extralatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, gatsbee_bank_w))
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_START( xevious )
/* basic machine hardware */
@@ -1789,6 +1774,13 @@ static MACHINE_CONFIG_START( xevious )
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(xevious_map)
+ MCFG_DEVICE_ADD("misclatch", LS259, 0) // 5K
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_NAMCO_50XX_ADD("50xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
@@ -1889,6 +1881,14 @@ static MACHINE_CONFIG_START( digdug )
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK/6) /* 3.072 MHz */
MCFG_CPU_PROGRAM_MAP(digdug_map)
+ MCFG_DEVICE_ADD("misclatch", LS259, 0) // 8R
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(galaga_state, irq1_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(galaga_state, irq2_clear_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(galaga_state, nmion_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ // Q5-Q7 also used (see below)
+
MCFG_NAMCO_51XX_ADD("51xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
MCFG_NAMCO_51XX_INPUT_0_CB(IOPORT("IN0L"))
MCFG_NAMCO_51XX_INPUT_1_CB(IOPORT("IN0H"))
@@ -1898,7 +1898,10 @@ static MACHINE_CONFIG_START( digdug )
MCFG_NAMCO_51XX_OUTPUT_1_CB(WRITE8(galaga_state,out_1))
MCFG_NAMCO_53XX_ADD("53xx", MASTER_CLOCK/6/2) /* 1.536 MHz */
- MCFG_NAMCO_53XX_K_CB(READ8(galaga_state,custom_mod_r))
+ MCFG_NAMCO_53XX_K_CB(DEVREADLINE("misclatch", ls259_device, q7_r)) MCFG_DEVCB_BIT(3) // MOD 2 = K3
+ MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("misclatch", ls259_device, q6_r)) MCFG_DEVCB_BIT(2) // MOD 1 = K2
+ MCFG_DEVCB_CHAIN_INPUT(DEVREADLINE("misclatch", ls259_device, q5_r)) MCFG_DEVCB_BIT(1) // MOD 0 = K1
+ // K0 is left unconnected
MCFG_NAMCO_53XX_INPUT_0_CB(IOPORT("DSWA"))
MCFG_NAMCO_53XX_INPUT_1_CB(IOPORT("DSWA_HI"))
MCFG_NAMCO_53XX_INPUT_2_CB(IOPORT("DSWB"))
@@ -1911,6 +1914,12 @@ static MACHINE_CONFIG_START( digdug )
MCFG_NAMCO_06XX_READ_1_CB(DEVREAD8("53xx", namco_53xx_device, read))
MCFG_NAMCO_06XX_READ_REQUEST_1_CB(DEVWRITELINE("53xx", namco_53xx_device, read_request))
+ MCFG_DEVICE_ADD("videolatch", LS259, 0) // 5R
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(digdug_state, bg_select_w)) MCFG_DEVCB_MASK(0x33)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(digdug_state, tx_color_mode_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(digdug_state, bg_disable_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(digdug_state, flip_screen_w))
+
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
MCFG_MACHINE_START_OVERRIDE(galaga_state,galaga)
@@ -3412,14 +3421,6 @@ DRIVER_INIT_MEMBER(galaga_state,galaga)
}
}
-DRIVER_INIT_MEMBER(galaga_state,gatsbee)
-{
- DRIVER_INIT_CALL(galaga);
-
- /* Gatsbee has a larger character ROM, we need a handler for banking */
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x1000, 0x1000, write8_delegate(FUNC(galaga_state::gatsbee_bank_w),this));
-}
-
DRIVER_INIT_MEMBER(xevious_state,xevious)
{
@@ -3496,7 +3497,7 @@ GAME( 1982, digsid, digdug, digdug, digdug, digdug_state, 0, ROT90
/* Bootlegs with replacement I/O chips */
GAME( 1982, gallag, galaga, galagab, galaga, galaga_state, galaga, ROT90, "bootleg", "Gallag", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
-GAME( 1984, gatsbee, galaga, galagab, gatsbee, galaga_state, gatsbee, ROT90, "hack (Uchida)", "Gatsbee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+GAME( 1984, gatsbee, galaga, gatsbee, gatsbee, galaga_state, galaga, ROT90, "hack (Uchida)", "Gatsbee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1981, nebulbee, galaga, galagab, galaga, galaga_state, galaga, ROT90, "bootleg", "Nebulous Bee", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1982, xevios, xevious, xevious, xevious, xevious_state, xevios, ROT90, "bootleg", "Xevios", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/gauntlet.cpp b/src/mame/drivers/gauntlet.cpp
index 58defd05dff..2c87c17f7c4 100644
--- a/src/mame/drivers/gauntlet.cpp
+++ b/src/mame/drivers/gauntlet.cpp
@@ -190,12 +190,10 @@ WRITE16_MEMBER(gauntlet_state::sound_reset_w)
if ((oldword ^ m_sound_reset_val) & 1)
{
m_audiocpu->set_input_line(INPUT_LINE_RESET, (m_sound_reset_val & 1) ? CLEAR_LINE : ASSERT_LINE);
+ m_soundctl->clear_w(m_sound_reset_val & 1);
m_soundcomm->sound_cpu_reset();
if (m_sound_reset_val & 1)
{
- m_ym2151->reset();
- m_tms5220->reset();
- m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / 11);
m_ym2151->set_output_gain(ALL_OUTPUTS, 0.0f);
m_pokey->set_output_gain(ALL_OUTPUTS, 0.0f);
m_tms5220->set_output_gain(ALL_OUTPUTS, 0.0f);
@@ -231,27 +229,28 @@ READ8_MEMBER(gauntlet_state::switch_6502_r)
*
*************************************/
-WRITE8_MEMBER(gauntlet_state::sound_ctl_w)
+WRITE_LINE_MEMBER(gauntlet_state::ym2151_reset_w)
{
- switch (offset & 7)
- {
- case 0: /* music reset, bit D7, low reset */
- if (((data>>7)&1) == 0) m_ym2151->reset();
- break;
-
- case 1: /* speech write, bit D7, active low */
- m_tms5220->wsq_w(data >> 7);
- break;
-
- case 2: /* speech reset, bit D7, active low */
- m_tms5220->rsq_w(data >> 7);
- break;
-
- case 3: /* speech squeak, bit D7 */
- data = 5 | ((data >> 6) & 2);
- m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / (16 - data));
- break;
- }
+ if (state == 0)
+ m_ym2151->reset();
+}
+
+WRITE_LINE_MEMBER(gauntlet_state::speech_squeak_w)
+{
+ uint8_t data = 5 | (state ? 2 : 0);
+ m_tms5220->set_unscaled_clock(ATARI_CLOCK_14MHz/2 / (16 - data));
+}
+
+WRITE_LINE_MEMBER(gauntlet_state::coin_counter_left_w)
+{
+ // coins 1 & 2 combined
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(gauntlet_state::coin_counter_right_w)
+{
+ // coins 3 & 4 combined
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -325,7 +324,8 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, gauntlet_state )
AM_RANGE(0x1000, 0x100f) AM_MIRROR(0x27c0) AM_DEVWRITE("soundcomm", atari_sound_comm_device, sound_response_w)
AM_RANGE(0x1010, 0x101f) AM_MIRROR(0x27c0) AM_DEVREAD("soundcomm", atari_sound_comm_device, sound_command_r)
AM_RANGE(0x1020, 0x102f) AM_MIRROR(0x27c0) AM_READ_PORT("COIN") AM_WRITE(mixer_w)
- AM_RANGE(0x1030, 0x103f) AM_MIRROR(0x27c0) AM_READWRITE(switch_6502_r, sound_ctl_w)
+ AM_RANGE(0x1030, 0x1030) AM_MIRROR(0x27cf) AM_READ(switch_6502_r)
+ AM_RANGE(0x1030, 0x1037) AM_MIRROR(0x27c8) AM_DEVWRITE("soundctl", ls259_device, write_d7)
AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x27c0) AM_DEVREADWRITE("pokey", pokey_device, read, write)
AM_RANGE(0x1810, 0x1811) AM_MIRROR(0x27ce) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
AM_RANGE(0x1820, 0x182f) AM_MIRROR(0x27c0) AM_DEVWRITE("tms", tms5220_device, data_w)
@@ -544,6 +544,14 @@ static MACHINE_CONFIG_START( gauntlet_base )
MCFG_SOUND_ADD("tms", TMS5220C, ATARI_CLOCK_14MHz/2/11) /* potentially ATARI_CLOCK_14MHz/2/9 as well */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
+
+ MCFG_DEVICE_ADD("soundctl", LS259, 0) // 16T/U
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gauntlet_state, ym2151_reset_w)) // music reset, low reset
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("tms", tms5220_device, wsq_w)) // speech write, active low
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("tms", tms5220_device, rsq_w)) // speech reset, active low
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gauntlet_state, speech_squeak_w)) // speech squeak, low = 650 Hz
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(gauntlet_state, coin_counter_right_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gauntlet_state, coin_counter_left_w))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/gladiatr.cpp b/src/mame/drivers/gladiatr.cpp
index cf0f79247f2..076e64d772a 100644
--- a/src/mame/drivers/gladiatr.cpp
+++ b/src/mame/drivers/gladiatr.cpp
@@ -195,6 +195,7 @@ TODO:
#include "cpu/mcs48/mcs48.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/clock.h"
#include "machine/nvram.h"
@@ -205,12 +206,6 @@ TODO:
#include "speaker.h"
-WRITE8_MEMBER(gladiatr_state::gladiatr_bankswitch_w)
-{
- // ROM bankswitching
- membank("bank1")->set_entry(data & 0x01);
-}
-
MACHINE_RESET_MEMBER(gladiatr_state,gladiator)
{
// 6809 bank memory set
@@ -258,9 +253,9 @@ READ8_MEMBER(gladiatr_state::gladiator_cpu_sound_command_r)
return m_soundlatch->read(space,0);
}
-WRITE8_MEMBER(gladiatr_state::gladiatr_flipscreen_w)
+WRITE_LINE_MEMBER(gladiatr_state::flipscreen_w)
{
- flip_screen_set(data & 1);
+ flip_screen_set(state);
}
@@ -512,12 +507,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( gladiatr_cpu1_io, AS_IO, 8, gladiatr_state )
-// ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0xc000, 0xc000) AM_WRITE(spritebuffer_w)
- AM_RANGE(0xc001, 0xc001) AM_WRITE(gladiatr_spritebank_w)
- AM_RANGE(0xc002, 0xc002) AM_WRITE(gladiatr_bankswitch_w)
AM_RANGE(0xc004, 0xc004) AM_WRITE(gladiatr_irq_patch_w) /* !!! patch to 2nd CPU IRQ !!! */
- AM_RANGE(0xc007, 0xc007) AM_WRITE(gladiatr_flipscreen_w)
+ AM_RANGE(0xc000, 0xc007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xc09e, 0xc09f) AM_DEVREADWRITE("ucpu", upi41_cpu_device, upi41_master_r, upi41_master_w)
AM_RANGE(0xc0bf, 0xc0bf) AM_NOP // watchdog_reset_w doesn't work
ADDRESS_MAP_END
@@ -529,7 +520,7 @@ static ADDRESS_MAP_START( gladiatr_cpu2_io, AS_IO, 8, gladiatr_state )
AM_RANGE(0x40, 0x40) AM_NOP // WRITE(sub_irq_ack_w)
AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("cctl", upi41_cpu_device, upi41_master_r, upi41_master_w)
AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ccpu", upi41_cpu_device, upi41_master_r, upi41_master_w)
- AM_RANGE(0xa0, 0xa7) AM_NOP // filters on sound output
+ AM_RANGE(0xa0, 0xa7) AM_DEVWRITE("filtlatch", ls259_device, write_d0)
AM_RANGE(0xe0, 0xe0) AM_WRITE(gladiator_cpu_sound_command_w)
ADDRESS_MAP_END
@@ -751,6 +742,13 @@ static MACHINE_CONFIG_START( gladiatr )
MCFG_MACHINE_RESET_OVERRIDE(gladiatr_state,gladiator)
MCFG_NVRAM_ADD_0FILL("nvram") // NEC uPD449 CMOS SRAM
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5L on main board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gladiatr_state, spritebuffer_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gladiatr_state, spritebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(MEMBANK("bank1"))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) // shadowed by aforementioned hack
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gladiatr_state, flipscreen_w))
+
MCFG_DEVICE_ADD("cctl", I8741, XTAL_12MHz/2) /* verified on pcb */
MCFG_MCS48_PORT_T0_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(3)
MCFG_MCS48_PORT_T1_IN_CB(IOPORT("COINS")) MCFG_DEVCB_RSHIFT(2)
@@ -815,6 +813,8 @@ static MACHINE_CONFIG_START( gladiatr )
MCFG_SOUND_ADD("msm", MSM5205, XTAL_455kHz) /* verified on pcb */
MCFG_MSM5205_PRESCALER_SELECTOR(SEX_4B) /* vclk input mode */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
+
+ MCFG_DEVICE_ADD("filtlatch", LS259, 0) // 9R - filters on sound output
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/glass.cpp b/src/mame/drivers/glass.cpp
index 525ff786db8..f9be235f380 100644
--- a/src/mame/drivers/glass.cpp
+++ b/src/mame/drivers/glass.cpp
@@ -79,19 +79,27 @@ WRITE16_MEMBER(glass_state::OKIM6295_bankswitch_w)
WRITE16_MEMBER(glass_state::coin_w)
{
- switch (offset >> 3)
- {
- case 0x00: /* Coin Lockouts */
- case 0x01:
- machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01);
- break;
- case 0x02: /* Coin Counters */
- case 0x03:
- machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
- break;
- case 0x04: /* Sound Muting (if bit 0 == 1, sound output stream = 0) */
- break;
- }
+ m_outlatch->write_bit(offset >> 3, BIT(data, 0));
+}
+
+WRITE_LINE_MEMBER(glass_state::coin1_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, !state);
+}
+
+WRITE_LINE_MEMBER(glass_state::coin2_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(1, !state);
+}
+
+WRITE_LINE_MEMBER(glass_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(glass_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -113,9 +121,9 @@ static ADDRESS_MAP_START( glass_map, AS_PROGRAM, 16, glass_state )
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
AM_RANGE(0x700008, 0x700009) AM_WRITE(blitter_w) // serial blitter
+ AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE(coin_w) // Coin Counters/Lockout
AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) // OKI6295 bankswitch
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) // OKI6295 status register
- AM_RANGE(0x70000a, 0x70004b) AM_WRITE(coin_w) // Coin Counters/Lockout
AM_RANGE(0xfec000, 0xfeffff) AM_RAM AM_SHARE("shareram") // Work RAM (partially shared with DS5002FP)
ADDRESS_MAP_END
@@ -226,6 +234,13 @@ static MACHINE_CONFIG_START( glass )
MCFG_CPU_PROGRAM_MAP(glass_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", glass_state, interrupt)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(glass_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(glass_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(glass_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(glass_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // Sound Muting (if bit 0 == 1, sound output stream = 0)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/gng.cpp b/src/mame/drivers/gng.cpp
index 6428b72f815..6dd73d4a42c 100644
--- a/src/mame/drivers/gng.cpp
+++ b/src/mame/drivers/gng.cpp
@@ -27,8 +27,8 @@ Notes:
#include "cpu/z80/z80.h"
#include "cpu/m6809/m6809.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
-#include "sound/2203intf.h"
#include "screen.h"
#include "speaker.h"
@@ -41,9 +41,23 @@ WRITE8_MEMBER(gng_state::gng_bankswitch_w)
membank("bank1")->set_entry((data & 0x03));
}
-WRITE8_MEMBER(gng_state::gng_coin_counter_w)
+WRITE_LINE_MEMBER(gng_state::coin_counter_1_w)
{
- machine().bookkeeping().coin_counter_w(offset, data);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(gng_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(gng_state::ym_reset_w)
+{
+ if (!state)
+ {
+ m_ym[0]->reset();
+ m_ym[1]->reset();
+ }
}
static ADDRESS_MAP_START( gng_map, AS_PROGRAM, 8, gng_state )
@@ -62,9 +76,7 @@ static ADDRESS_MAP_START( gng_map, AS_PROGRAM, 8, gng_state )
AM_RANGE(0x3b08, 0x3b09) AM_WRITE(gng_bgscrollx_w)
AM_RANGE(0x3b0a, 0x3b0b) AM_WRITE(gng_bgscrolly_w)
AM_RANGE(0x3c00, 0x3c00) AM_NOP /* watchdog? */
- AM_RANGE(0x3d00, 0x3d00) AM_WRITE(gng_flipscreen_w)
-// { 0x3d01, 0x3d01, reset sound cpu?
- AM_RANGE(0x3d02, 0x3d03) AM_WRITE(gng_coin_counter_w)
+ AM_RANGE(0x3d00, 0x3d07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x3e00, 0x3e00) AM_WRITE(gng_bankswitch_w)
AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1")
AM_RANGE(0x6000, 0xffff) AM_ROM
@@ -353,6 +365,12 @@ static MACHINE_CONFIG_START( gng )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(gng_state, irq0_line_hold, 4*60)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 9B on A board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gng_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(gng_state, ym_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gng_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gng_state, coin_counter_2_w))
/* video hardware */
MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
diff --git a/src/mame/drivers/gomoku.cpp b/src/mame/drivers/gomoku.cpp
index 492e70594d0..1bc20a04129 100644
--- a/src/mame/drivers/gomoku.cpp
+++ b/src/mame/drivers/gomoku.cpp
@@ -44,6 +44,12 @@ READ8_MEMBER(gomoku_state::input_port_r)
}
+WRITE8_MEMBER(gomoku_state::gomoku_latch_w)
+{
+ m_latch->write_bit(offset, BIT(data, 1));
+}
+
+
static ADDRESS_MAP_START( gomoku_map, AS_PROGRAM, 8, gomoku_state )
AM_RANGE(0x0000, 0x47ff) AM_ROM
AM_RANGE(0x4800, 0x4fff) AM_RAM
@@ -52,10 +58,7 @@ static ADDRESS_MAP_START( gomoku_map, AS_PROGRAM, 8, gomoku_state )
AM_RANGE(0x5800, 0x58ff) AM_RAM_WRITE(gomoku_bgram_w) AM_SHARE("bgram")
AM_RANGE(0x6000, 0x601f) AM_DEVWRITE("gomoku", gomoku_sound_device, sound1_w)
AM_RANGE(0x6800, 0x681f) AM_DEVWRITE("gomoku", gomoku_sound_device, sound2_w)
- AM_RANGE(0x7000, 0x7000) AM_WRITENOP
- AM_RANGE(0x7001, 0x7001) AM_WRITE(gomoku_flipscreen_w)
- AM_RANGE(0x7002, 0x7002) AM_WRITE(gomoku_bg_dispsw_w)
- AM_RANGE(0x7003, 0x7007) AM_WRITENOP
+ AM_RANGE(0x7000, 0x7007) AM_WRITE(gomoku_latch_w)
AM_RANGE(0x7800, 0x7807) AM_READ(input_port_r)
AM_RANGE(0x7800, 0x7800) AM_WRITENOP
ADDRESS_MAP_END
@@ -129,6 +132,11 @@ static MACHINE_CONFIG_START( gomoku )
MCFG_CPU_PROGRAM_MAP(gomoku_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", gomoku_state, irq0_line_hold)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // 7J
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gomoku_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gomoku_state, bg_dispsw_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // start LED?
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/gridlee.cpp b/src/mame/drivers/gridlee.cpp
index 9e72dedd806..1cb226e6ab6 100644
--- a/src/mame/drivers/gridlee.cpp
+++ b/src/mame/drivers/gridlee.cpp
@@ -270,24 +270,30 @@ READ8_MEMBER(gridlee_state::random_num_r)
*
*************************************/
-WRITE8_MEMBER(gridlee_state::led_0_w)
+WRITE8_MEMBER(gridlee_state::latch_w)
{
- output().set_led_value(0, data & 1);
- logerror("LED 0 %s\n", (data & 1) ? "on" : "off");
+ m_latch->write_bit(offset >> 4, data);
}
-WRITE8_MEMBER(gridlee_state::led_1_w)
+WRITE_LINE_MEMBER(gridlee_state::led_0_w)
{
- output().set_led_value(1, data & 1);
- logerror("LED 1 %s\n", (data & 1) ? "on" : "off");
+ output().set_led_value(0, state);
+ logerror("LED 0 %s\n", state ? "on" : "off");
}
-WRITE8_MEMBER(gridlee_state::gridlee_coin_counter_w)
+WRITE_LINE_MEMBER(gridlee_state::led_1_w)
{
- machine().bookkeeping().coin_counter_w(0, data & 1);
- logerror("coin counter %s\n", (data & 1) ? "on" : "off");
+ output().set_led_value(1, state);
+ logerror("LED 1 %s\n", state ? "on" : "off");
+}
+
+
+WRITE_LINE_MEMBER(gridlee_state::coin_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+ logerror("coin counter %s\n", state ? "on" : "off");
}
@@ -302,11 +308,7 @@ WRITE8_MEMBER(gridlee_state::gridlee_coin_counter_w)
static ADDRESS_MAP_START( cpu1_map, AS_PROGRAM, 8, gridlee_state )
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x0800, 0x7fff) AM_RAM_WRITE(gridlee_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x9000, 0x9000) AM_WRITE(led_0_w)
- AM_RANGE(0x9010, 0x9010) AM_WRITE(led_1_w)
- AM_RANGE(0x9020, 0x9020) AM_WRITE(gridlee_coin_counter_w)
-/* { 0x9060, 0x9060, unknown - only written to at startup */
- AM_RANGE(0x9070, 0x9070) AM_WRITE(gridlee_cocktail_flip_w)
+ AM_RANGE(0x9000, 0x9000) AM_SELECT(0x0070) AM_WRITE(latch_w)
AM_RANGE(0x9200, 0x9200) AM_WRITE(gridlee_palette_select_w)
AM_RANGE(0x9380, 0x9380) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x9500, 0x9501) AM_READ(analog_port_r)
@@ -420,6 +422,13 @@ static MACHINE_CONFIG_START( gridlee )
MCFG_WATCHDOG_ADD("watchdog")
+ MCFG_DEVICE_ADD("latch", LS259, 0) // type can only be guessed
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gridlee_state, led_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(gridlee_state, led_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gridlee_state, coin_counter_w))
+ // Q6 unknown - only written to at startup
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(gridlee_state, cocktail_flip_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(GRIDLEE_PIXEL_CLOCK, GRIDLEE_HTOTAL, GRIDLEE_HBEND, GRIDLEE_HBSTART, GRIDLEE_VTOTAL, GRIDLEE_VBEND, GRIDLEE_VBSTART)
diff --git a/src/mame/drivers/gyruss.cpp b/src/mame/drivers/gyruss.cpp
index 27af1c3f08a..40912651b04 100644
--- a/src/mame/drivers/gyruss.cpp
+++ b/src/mame/drivers/gyruss.cpp
@@ -64,6 +64,7 @@ and 1 SFX channel controlled by an 8039:
#include "cpu/m6809/m6809.h"
#include "cpu/mcs48/mcs48.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/konami1.h"
#include "sound/ay8910.h"
@@ -161,9 +162,9 @@ WRITE8_MEMBER(gyruss_state::gyruss_i8039_irq_w)
m_audiocpu_2->set_input_line(0, ASSERT_LINE);
}
-WRITE8_MEMBER(gyruss_state::master_nmi_mask_w)
+WRITE_LINE_MEMBER(gyruss_state::master_nmi_mask_w)
{
- m_master_nmi_mask = data & 1;
+ m_master_nmi_mask = state;
if (!m_master_nmi_mask)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
@@ -175,6 +176,16 @@ WRITE8_MEMBER(gyruss_state::slave_irq_mask_w)
m_subcpu->set_input_line(0, CLEAR_LINE);
}
+WRITE_LINE_MEMBER(gyruss_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(gyruss_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8, gyruss_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM AM_SHARE("colorram")
@@ -187,8 +198,7 @@ static ADDRESS_MAP_START( main_cpu1_map, AS_PROGRAM, 8, gyruss_state )
AM_RANGE(0xc0c0, 0xc0c0) AM_READ_PORT("P2")
AM_RANGE(0xc0e0, 0xc0e0) AM_READ_PORT("DSW1")
AM_RANGE(0xc100, 0xc100) AM_READ_PORT("DSW3") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
- AM_RANGE(0xc180, 0xc180) AM_WRITE(master_nmi_mask_w)
- AM_RANGE(0xc185, 0xc185) AM_WRITEONLY AM_SHARE("flipscreen")
+ AM_RANGE(0xc180, 0xc187) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( main_cpu2_map, AS_PROGRAM, 8, gyruss_state )
@@ -484,6 +494,12 @@ static MACHINE_CONFIG_START( gyruss )
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3C
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(gyruss_state, master_nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(gyruss_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(gyruss_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(gyruss_state, flipscreen_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
diff --git a/src/mame/drivers/hnayayoi.cpp b/src/mame/drivers/hnayayoi.cpp
index d80111e02ad..12bc4ec803e 100644
--- a/src/mame/drivers/hnayayoi.cpp
+++ b/src/mame/drivers/hnayayoi.cpp
@@ -44,6 +44,8 @@ TODO:
#include "cpu/z80/z80.h"
#include "sound/2203intf.h"
#include "sound/msm5205.h"
+#include "machine/74259.h"
+#include "machine/clock.h"
#include "machine/nvram.h"
#include "screen.h"
#include "speaker.h"
@@ -81,19 +83,25 @@ WRITE8_MEMBER(hnayayoi_state::adpcm_data_w)
m_msm->data_w(data);
}
-WRITE8_MEMBER(hnayayoi_state::adpcm_vclk_w)
+
+WRITE_LINE_MEMBER(hnayayoi_state::coin_counter_w)
{
- m_msm->vclk_w(data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(hnayayoi_state::adpcm_reset_w)
+
+WRITE_LINE_MEMBER(hnayayoi_state::nmi_enable_w)
{
- m_msm->reset_w(data & 1);
+ m_nmi_enable = state;
+ if (!state)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
-WRITE8_MEMBER(hnayayoi_state::adpcm_reset_inv_w)
+
+WRITE_LINE_MEMBER(hnayayoi_state::nmi_clock_w)
{
- m_msm->reset_w(~data & 1);
+ if (m_nmi_enable)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, state);
}
@@ -113,8 +121,7 @@ static ADDRESS_MAP_START( hnayayoi_io_map, AS_IO, 8, hnayayoi_state )
// AM_RANGE(0x09, 0x09) AM_WRITENOP // CRT Controller
AM_RANGE(0x0a, 0x0a) AM_WRITE(dynax_blitter_rev1_start_w)
AM_RANGE(0x0c, 0x0c) AM_WRITE(dynax_blitter_rev1_clear_w)
- AM_RANGE(0x23, 0x23) AM_WRITE(adpcm_vclk_w)
- AM_RANGE(0x24, 0x24) AM_WRITE(adpcm_reset_w)
+ AM_RANGE(0x20, 0x27) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x40, 0x40) AM_WRITE(keyboard_w)
AM_RANGE(0x41, 0x41) AM_READ(keyboard_0_r)
AM_RANGE(0x42, 0x42) AM_READ(keyboard_1_r)
@@ -135,8 +142,7 @@ static ADDRESS_MAP_START( hnfubuki_map, AS_PROGRAM, 8, hnayayoi_state )
// AM_RANGE(0xff09, 0xff09) AM_WRITENOP // CRT Controller
AM_RANGE(0xff0a, 0xff0a) AM_WRITE(dynax_blitter_rev1_start_w)
AM_RANGE(0xff0c, 0xff0c) AM_WRITE(dynax_blitter_rev1_clear_w)
- AM_RANGE(0xff23, 0xff23) AM_WRITE(adpcm_vclk_w)
- AM_RANGE(0xff24, 0xff24) AM_WRITE(adpcm_reset_inv_w)
+ AM_RANGE(0xff20, 0xff27) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xff40, 0xff40) AM_WRITE(keyboard_w)
AM_RANGE(0xff41, 0xff41) AM_READ(keyboard_0_r)
AM_RANGE(0xff42, 0xff42) AM_READ(keyboard_1_r)
@@ -165,8 +171,7 @@ static ADDRESS_MAP_START( untoucha_io_map, AS_IO, 8, hnayayoi_state )
AM_RANGE(0x1a, 0x1f) AM_WRITE(dynax_blitter_rev1_param_w)
AM_RANGE(0x20, 0x20) AM_WRITE(dynax_blitter_rev1_clear_w)
AM_RANGE(0x28, 0x28) AM_WRITE(dynax_blitter_rev1_start_w)
- AM_RANGE(0x31, 0x31) AM_WRITE(adpcm_vclk_w)
- AM_RANGE(0x32, 0x32) AM_WRITE(adpcm_reset_inv_w)
+ AM_RANGE(0x30, 0x37) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x50, 0x50) AM_DEVWRITE("ymsnd", ym2203_device, write_port_w)
AM_RANGE(0x51, 0x51) AM_DEVREAD("ymsnd", ym2203_device, read_port_r)
// AM_RANGE(0x52, 0x52) AM_WRITENOP // CRT Controller
@@ -519,13 +524,11 @@ void hnayayoi_state::machine_start()
save_item(NAME(m_blit_dest));
save_item(NAME(m_blit_src));
save_item(NAME(m_keyb));
+ save_item(NAME(m_nmi_enable));
}
void hnayayoi_state::machine_reset()
{
- /* start with the MSM5205 reset */
- m_msm->reset_w(1);
-
m_palbank = 0;
m_blit_layer = 0;
m_blit_dest = 0;
@@ -541,11 +544,18 @@ static MACHINE_CONFIG_START( hnayayoi )
MCFG_CPU_PROGRAM_MAP(hnayayoi_map)
MCFG_CPU_IO_MAP(hnayayoi_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", hnayayoi_state, irq0_line_hold)
- MCFG_CPU_PERIODIC_INT_DRIVER(hnayayoi_state, nmi_line_pulse, 8000)
+ MCFG_DEVICE_ADD("nmiclock", CLOCK, 8000)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(hnayayoi_state, nmi_clock_w))
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(hnayayoi_state, coin_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w)) MCFG_DEVCB_INVERT
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -577,6 +587,10 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( hnfubuki, hnayayoi )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(hnfubuki_map)
+ MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_IO)
+
+ MCFG_DEVICE_MODIFY("mainlatch") // D5
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi )
@@ -584,6 +598,12 @@ static MACHINE_CONFIG_DERIVED( untoucha, hnayayoi )
MCFG_CPU_PROGRAM_MAP(untoucha_map)
MCFG_CPU_IO_MAP(untoucha_io_map)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, vclk_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(hnayayoi_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ?
+
MCFG_VIDEO_START_OVERRIDE(hnayayoi_state,untoucha)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/holeland.cpp b/src/mame/drivers/holeland.cpp
index 64041b7d235..2de977c84e8 100644
--- a/src/mame/drivers/holeland.cpp
+++ b/src/mame/drivers/holeland.cpp
@@ -25,13 +25,17 @@
#include "speaker.h"
+WRITE_LINE_MEMBER(holeland_state::coin_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
static ADDRESS_MAP_START( holeland_map, AS_PROGRAM, 8, holeland_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0xa000, 0xbfff) AM_ROM
AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("speech", sp0256_device, ald_w)
- AM_RANGE(0xc000, 0xc001) AM_WRITE(pal_offs_w)
- AM_RANGE(0xc006, 0xc007) AM_WRITE(flipscreen_w)
+ AM_RANGE(0xc000, 0xc007) AM_DEVWRITE("latch", ls259_device, write_d0) AM_READNOP
AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0xf000, 0xf3ff) AM_RAM AM_SHARE("spriteram")
@@ -44,7 +48,7 @@ static ADDRESS_MAP_START( crzrally_map, AS_PROGRAM, 8, holeland_state )
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0xe800, 0xebff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xf000, 0xf000) AM_WRITE(scroll_w)
- AM_RANGE(0xf800, 0xf801) AM_WRITE(pal_offs_w)
+ AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( io_map, AS_IO, 8, holeland_state )
@@ -276,6 +280,12 @@ static MACHINE_CONFIG_START( holeland )
MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", holeland_state, irq0_line_hold)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // 3J
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03)
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(holeland_state, coin_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(holeland_state, flipscreen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(holeland_state, flipscreen_y_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -353,6 +363,10 @@ static MACHINE_CONFIG_START( crzrally )
MCFG_NVRAM_ADD_1FILL("nvram")
+ MCFG_DEVICE_ADD("latch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(holeland_state, pal_offs_w)) MCFG_DEVCB_MASK(0x03)
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(holeland_state, coin_counter_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/jedi.cpp b/src/mame/drivers/jedi.cpp
index 18acb2347f7..1591d0809cb 100644
--- a/src/mame/drivers/jedi.cpp
+++ b/src/mame/drivers/jedi.cpp
@@ -114,6 +114,7 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "includes/jedi.h"
@@ -226,9 +227,15 @@ WRITE8_MEMBER(jedi_state::a2d_select_w)
}
-WRITE8_MEMBER(jedi_state::jedi_coin_counter_w)
+WRITE_LINE_MEMBER(jedi_state::coin_counter_left_w)
{
- machine().bookkeeping().coin_counter_w(offset, data);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(jedi_state::coin_counter_right_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -273,12 +280,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, jedi_state )
AM_RANGE(0x1d00, 0x1d00) AM_MIRROR(0x007f) AM_NOP /* write: NVRAM store */
AM_RANGE(0x1d80, 0x1d80) AM_MIRROR(0x007f) AM_READNOP AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x1e00, 0x1e00) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(main_irq_ack_w)
- AM_RANGE(0x1e80, 0x1e81) AM_MIRROR(0x0078) AM_READNOP AM_WRITE(jedi_coin_counter_w)
- AM_RANGE(0x1e82, 0x1e83) AM_MIRROR(0x0078) AM_NOP /* write: LED control - not used */
- AM_RANGE(0x1e84, 0x1e84) AM_MIRROR(0x0078) AM_READNOP AM_WRITEONLY AM_SHARE("foreground_bank")
- AM_RANGE(0x1e85, 0x1e85) AM_MIRROR(0x0078) AM_NOP
- AM_RANGE(0x1e86, 0x1e86) AM_MIRROR(0x0078) AM_READNOP AM_WRITE(jedi_audio_reset_w)
- AM_RANGE(0x1e87, 0x1e87) AM_MIRROR(0x0078) AM_READNOP AM_WRITEONLY AM_SHARE("video_off")
+ AM_RANGE(0x1e80, 0x1e87) AM_MIRROR(0x0078) AM_READNOP AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x1f00, 0x1f00) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(jedi_audio_latch_w)
AM_RANGE(0x1f80, 0x1f80) AM_MIRROR(0x007f) AM_READNOP AM_WRITE(rom_banksel_w)
AM_RANGE(0x2000, 0x27ff) AM_RAM AM_SHARE("backgroundram")
@@ -343,6 +345,15 @@ static MACHINE_CONFIG_START( jedi )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // 14J
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jedi_state, coin_counter_left_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(jedi_state, coin_counter_right_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // LED control - not used
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // LED control - not used
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(jedi_state, foreground_bank_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(jedi_state, audio_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(jedi_state, video_off_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/joctronic.cpp b/src/mame/drivers/joctronic.cpp
index e63ef294bfc..4ed1c533e81 100644
--- a/src/mame/drivers/joctronic.cpp
+++ b/src/mame/drivers/joctronic.cpp
@@ -1,11 +1,12 @@
// license:BSD-3-Clause
-// copyright-holders:Ivan Vangelista
+// copyright-holders:AJR
// PINBALL
// Skeleton driver for Joctronic pinballs.
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/74157.h"
+#include "machine/74259.h"
#include "machine/nvram.h"
#include "machine/z80ctc.h"
#include "sound/ay8910.h"
@@ -23,6 +24,7 @@ public:
, m_soundcpu(*this, "soundcpu")
, m_oki(*this, "oki")
, m_adpcm_select(*this, "adpcm_select")
+ , m_driver_latch(*this, "drivers%u", 1)
, m_soundbank(*this, "soundbank")
{ }
@@ -63,6 +65,7 @@ private:
required_device<cpu_device> m_soundcpu;
optional_device<msm5205_device> m_oki;
optional_device<ls157_device> m_adpcm_select;
+ optional_device_array<hc259_device, 6> m_driver_latch;
optional_memory_bank m_soundbank;
u8 m_soundlatch;
bool m_adpcm_toggle;
@@ -124,7 +127,7 @@ static ADDRESS_MAP_START( maincpu_map, AS_PROGRAM, 8, joctronic_state )
AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x4000) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_READ(csin_r) // CSIN
- AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0ff8) AM_WRITE(control_port_w) // PORTDS
+ AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // PORTDS
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0fc7) AM_WRITE(display_1_w) // CSD1
AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x0fc7) AM_WRITE(display_2_w) // CSD2
AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0fc7) AM_WRITE(display_3_w) // CSD3
@@ -159,7 +162,8 @@ WRITE8_MEMBER(joctronic_state::display_strobe_w)
WRITE8_MEMBER(joctronic_state::drivers_w)
{
- logerror("drivers[%d] = $%02X\n", offset, data);
+ for (int i = 0; i < 6; ++i)
+ m_driver_latch[i]->write_bit(offset, BIT(data, i));
}
WRITE8_MEMBER(joctronic_state::display_ck_w)
@@ -171,7 +175,7 @@ static ADDRESS_MAP_START( slalom03_maincpu_map, AS_PROGRAM, 8, joctronic_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram")
- AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_WRITE(control_port_w) // CSPORT
+ AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // CSPORT
AM_RANGE(0xa008, 0xa008) AM_MIRROR(0x0fc7) AM_WRITE(display_strobe_w) // STROBE
AM_RANGE(0xa010, 0xa017) AM_MIRROR(0x0fc0) AM_WRITE(drivers_w)
AM_RANGE(0xa018, 0xa018) AM_MIRROR(0x0fc7) AM_WRITE(display_ck_w) // CKD
@@ -326,6 +330,11 @@ static MACHINE_CONFIG_START( joctronic )
MCFG_NVRAM_ADD_0FILL("nvram") // 5516
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC4 - exact type unknown
+ //MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(joctronic_state, display_select_w)) MCFG_DEVCB_MASK(0x07)
+ //MCFG_DEVCB_CHAIN_OUTPUT(WRITE8(joctronic_state, ls145_w)) MCFG_DEVCB_RSHIFT(4)
+ //MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(joctronic_state, display_reset_w))
+
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_12MHz/4) // 3 MHz
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_Z80CTC_ZC0_CB(ASSERTLINE("soundcpu", INPUT_LINE_IRQ0)) // SINT
@@ -362,10 +371,22 @@ static MACHINE_CONFIG_START( slalom03 )
MCFG_NVRAM_ADD_0FILL("nvram") // 5516
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC6 - exact type unknown
+ //MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(joctronic_state, cont_w))
+ //MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(joctronic_state, ls145_w)) MCFG_DEVCB_RSHIFT(3) MCFG_DEVCB_MASK(0x38)
+ //MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(joctronic_state, slalom03_reset_w))
+
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_12MHz/2) // 6 MHz
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
//MCFG_Z80CTC_ZC0_CB(ASSERTLINE("soundcpu", INPUT_LINE_IRQ0)) // SINT
+ MCFG_DEVICE_ADD("drivers1", HC259, 0)
+ MCFG_DEVICE_ADD("drivers2", HC259, 0)
+ MCFG_DEVICE_ADD("drivers3", HC259, 0)
+ MCFG_DEVICE_ADD("drivers4", HC259, 0)
+ MCFG_DEVICE_ADD("drivers5", HC259, 0)
+ MCFG_DEVICE_ADD("drivers6", HC259, 0)
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/jrpacman.cpp b/src/mame/drivers/jrpacman.cpp
index 792915d0a79..caed76f7cf8 100644
--- a/src/mame/drivers/jrpacman.cpp
+++ b/src/mame/drivers/jrpacman.cpp
@@ -104,6 +104,7 @@
#include "includes/pacman.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "screen.h"
#include "speaker.h"
@@ -114,7 +115,7 @@ public:
jrpacman_state(const machine_config &mconfig, device_type type, const char *tag)
: pacman_state(mconfig, type, tag) { }
DECLARE_WRITE8_MEMBER(jrpacman_interrupt_vector_w);
- DECLARE_WRITE8_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
DECLARE_DRIVER_INIT(jrpacman);
INTERRUPT_GEN_MEMBER(vblank_irq);
};
@@ -127,9 +128,9 @@ WRITE8_MEMBER(jrpacman_state::jrpacman_interrupt_vector_w)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
-WRITE8_MEMBER(jrpacman_state::irq_mask_w)
+WRITE_LINE_MEMBER(jrpacman_state::irq_mask_w)
{
- m_irq_mask = data & 1;
+ m_irq_mask = state;
}
/*************************************
@@ -144,20 +145,14 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, jrpacman_state )
AM_RANGE(0x4800, 0x4fef) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x5000, 0x503f) AM_READ_PORT("P1")
- AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
+ AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("latch1", ls259_device, write_d0)
AM_RANGE(0x5040, 0x507f) AM_READ_PORT("P2")
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_WRITEONLY AM_SHARE("spriteram2")
- AM_RANGE(0x5070, 0x5070) AM_WRITE(pengo_palettebank_w)
- AM_RANGE(0x5071, 0x5071) AM_WRITE(pengo_colortablebank_w)
- AM_RANGE(0x5073, 0x5073) AM_WRITE(jrpacman_bgpriority_w)
- AM_RANGE(0x5074, 0x5074) AM_WRITE(jrpacman_charbank_w)
- AM_RANGE(0x5075, 0x5075) AM_WRITE(jrpacman_spritebank_w)
+ AM_RANGE(0x5070, 0x5077) AM_DEVWRITE("latch2", ls259_device, write_d0)
AM_RANGE(0x5080, 0x50bf) AM_READ_PORT("DSW")
AM_RANGE(0x5080, 0x5080) AM_WRITE(jrpacman_scroll_w)
- AM_RANGE(0x50c0, 0x50c0) AM_WRITENOP
+ AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x8000, 0xdfff) AM_ROM
ADDRESS_MAP_END
@@ -283,6 +278,21 @@ static MACHINE_CONFIG_START( jrpacman )
MCFG_CPU_IO_MAP(port_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", jrpacman_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch1", LS259, 0) // 5P
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jrpacman_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(jrpacman_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(jrpacman_state, coin_counter_w))
+
+ MCFG_DEVICE_ADD("latch2", LS259, 0) // 1H
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(jrpacman_state, pengo_palettebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(jrpacman_state, pengo_colortablebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(jrpacman_state, jrpacman_bgpriority_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(jrpacman_state, jrpacman_charbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(jrpacman_state, jrpacman_spritebank_w))
+
+ MCFG_WATCHDOG_ADD("watchdog")
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60.606060)
diff --git a/src/mame/drivers/junofrst.cpp b/src/mame/drivers/junofrst.cpp
index 019af9dce2c..2b7d3878f1f 100644
--- a/src/mame/drivers/junofrst.cpp
+++ b/src/mame/drivers/junofrst.cpp
@@ -86,6 +86,7 @@ Blitter source graphics
#include "cpu/m6809/m6809.h"
#include "cpu/mcs48/mcs48.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/konami1.h"
#include "machine/watchdog.h"
@@ -123,9 +124,6 @@ public:
DECLARE_WRITE8_MEMBER(sh_irqtrigger_w);
DECLARE_WRITE8_MEMBER(i8039_irq_w);
DECLARE_WRITE8_MEMBER(i8039_irqen_and_status_w);
- DECLARE_WRITE8_MEMBER(flip_screen_w);
- DECLARE_WRITE8_MEMBER(coincounter_w);
- DECLARE_WRITE8_MEMBER(irq_enable_w);
DECLARE_READ8_MEMBER(portA_r);
DECLARE_WRITE8_MEMBER(portB_w);
@@ -276,25 +274,6 @@ WRITE8_MEMBER(junofrst_state::i8039_irqen_and_status_w)
}
-WRITE8_MEMBER(junofrst_state::flip_screen_w)
-{
- tutankhm_flip_screen_x_w(space, 0, data);
- tutankhm_flip_screen_y_w(space, 0, data);
-}
-
-
-WRITE8_MEMBER(junofrst_state::coincounter_w)
-{
- machine().bookkeeping().coin_counter_w(offset, data);
-}
-
-WRITE8_MEMBER(junofrst_state::irq_enable_w)
-{
- m_irq_enable = data & 1;
- if (!m_irq_enable)
- m_maincpu->set_input_line(0, CLEAR_LINE);
-}
-
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, junofrst_state )
AM_RANGE(0x0000, 0x7fff) AM_RAM AM_SHARE("videoram")
AM_RANGE(0x8000, 0x800f) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
@@ -304,10 +283,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, junofrst_state )
AM_RANGE(0x8024, 0x8024) AM_READ_PORT("P1")
AM_RANGE(0x8028, 0x8028) AM_READ_PORT("P2")
AM_RANGE(0x802c, 0x802c) AM_READ_PORT("DSW1")
- AM_RANGE(0x8030, 0x8030) AM_WRITE(irq_enable_w)
- AM_RANGE(0x8031, 0x8032) AM_WRITE(coincounter_w)
- AM_RANGE(0x8033, 0x8033) AM_WRITEONLY AM_SHARE("scroll") /* not used in Juno */
- AM_RANGE(0x8034, 0x8035) AM_WRITE(flip_screen_w)
+ AM_RANGE(0x8030, 0x8037) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x8040, 0x8040) AM_WRITE(sh_irqtrigger_w)
AM_RANGE(0x8050, 0x8050) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x8060, 0x8060) AM_WRITE(bankselect_w)
@@ -394,8 +370,6 @@ MACHINE_RESET_MEMBER(junofrst_state,junofrst)
{
m_i8039_status = 0;
m_last_irq = 0;
- m_flip_x = 0;
- m_flip_y = 0;
m_blitterdata[0] = 0;
m_blitterdata[1] = 0;
m_blitterdata[2] = 0;
@@ -426,6 +400,14 @@ static MACHINE_CONFIG_START( junofrst )
MCFG_MCS48_PORT_P1_OUT_CB(DEVWRITE8("dac", dac_byte_interface, write))
MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(junofrst_state, i8039_irqen_and_status_w))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B3
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(junofrst_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(junofrst_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(junofrst_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(junofrst_state, flip_screen_x_w)) // HFF
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(junofrst_state, flip_screen_y_w)) // VFLIP
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_MACHINE_START_OVERRIDE(junofrst_state,junofrst)
diff --git a/src/mame/drivers/kchamp.cpp b/src/mame/drivers/kchamp.cpp
index 648373d5c6c..d48f417f27a 100644
--- a/src/mame/drivers/kchamp.cpp
+++ b/src/mame/drivers/kchamp.cpp
@@ -68,7 +68,7 @@ IO ports and memory map changes. Dip switches differ too.
#include "includes/kchamp.h"
#include "cpu/z80/z80.h"
-#include "sound/ay8910.h"
+#include "machine/74259.h"
#include "sound/volt_reg.h"
#include "screen.h"
#include "speaker.h"
@@ -78,17 +78,22 @@ IO ports and memory map changes. Dip switches differ too.
* VS Version *
********************/
-WRITE8_MEMBER(kchamp_state::control_w)
+WRITE_LINE_MEMBER(kchamp_state::nmi_enable_w)
{
- m_nmi_enable = data & 1;
+ m_nmi_enable = state;
if (!m_nmi_enable)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
-WRITE8_MEMBER(kchamp_state::sound_reset_w)
+WRITE_LINE_MEMBER(kchamp_state::sound_reset_w)
{
- if (!(data & 1))
- m_audiocpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
+ if (!state)
+ {
+ m_ay[0]->reset();
+ m_ay[1]->reset();
+ sound_control_w(machine().dummy_space(), 0, 0);
+ }
}
WRITE8_MEMBER(kchamp_state::sound_control_w)
@@ -115,9 +120,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( kchampvs_io_map, AS_IO, 8, kchamp_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ_PORT("P1") AM_WRITE(kchamp_flipscreen_w)
- AM_RANGE(0x01, 0x01) AM_WRITE(control_w)
- AM_RANGE(0x02, 0x02) AM_WRITE(sound_reset_w)
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("P1")
+ AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x40, 0x40) AM_READ_PORT("P2") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x80, 0x80) AM_READ_PORT("SYSTEM")
AM_RANGE(0xc0, 0xc0) AM_READ_PORT("DSW")
@@ -170,8 +174,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( kchamp_io_map, AS_IO, 8, kchamp_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x80, 0x80) AM_READ_PORT("DSW") AM_WRITE(kchamp_flipscreen_w)
- AM_RANGE(0x81, 0x81) AM_WRITE(control_w)
+ AM_RANGE(0x80, 0x80) AM_READ_PORT("DSW")
+ AM_RANGE(0x80, 0x87) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x90, 0x90) AM_READ_PORT("P1")
AM_RANGE(0x98, 0x98) AM_READ_PORT("P2")
AM_RANGE(0xa0, 0xa0) AM_READ_PORT("SYSTEM")
@@ -404,6 +408,11 @@ static MACHINE_CONFIG_START( kchampvs )
MCFG_CPU_IO_MAP(kchampvs_sound_io_map) /* irq's triggered from main cpu */
/* nmi's from msm5205 */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 8C
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kchamp_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kchamp_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(kchamp_state, sound_reset_w))
+
MCFG_MACHINE_START_OVERRIDE(kchamp_state,kchampvs)
/* video hardware */
@@ -460,6 +469,10 @@ static MACHINE_CONFIG_START( kchamp )
/* irq's triggered from main cpu */
/* nmi's from 125 Hz clock */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kchamp_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kchamp_state, nmi_enable_w))
+
MCFG_MACHINE_START_OVERRIDE(kchamp_state,kchamp)
/* video hardware */
diff --git a/src/mame/drivers/kyugo.cpp b/src/mame/drivers/kyugo.cpp
index 6b40bfd7cc9..30d3cbc50d4 100644
--- a/src/mame/drivers/kyugo.cpp
+++ b/src/mame/drivers/kyugo.cpp
@@ -27,6 +27,7 @@
#include "includes/kyugo.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "screen.h"
@@ -65,21 +66,14 @@ ADDRESS_MAP_END
*
*************************************/
-WRITE8_MEMBER(kyugo_state::kyugo_nmi_mask_w)
+WRITE_LINE_MEMBER(kyugo_state::nmi_mask_w)
{
- m_nmi_mask = data & 1;
-}
-
-WRITE8_MEMBER(kyugo_state::kyugo_sub_cpu_control_w)
-{
- m_subcpu->set_input_line(INPUT_LINE_HALT, data ? CLEAR_LINE : ASSERT_LINE);
+ m_nmi_mask = state;
}
static ADDRESS_MAP_START( kyugo_main_portmap, AS_IO, 8, kyugo_state )
ADDRESS_MAP_GLOBAL_MASK(0x07)
- AM_RANGE(0x00, 0x00) AM_WRITE(kyugo_nmi_mask_w)
- AM_RANGE(0x01, 0x01) AM_WRITE(kyugo_flipscreen_w)
- AM_RANGE(0x02, 0x02) AM_WRITE(kyugo_sub_cpu_control_w)
+ AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -499,11 +493,6 @@ void kyugo_state::machine_start()
void kyugo_state::machine_reset()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- // must start with interrupts and sub CPU disabled
- m_nmi_mask = 0;
- kyugo_sub_cpu_control_w(space, 0, 0);
-
m_scroll_x_lo = 0;
m_scroll_x_hi = 0;
m_scroll_y = 0;
@@ -533,6 +522,10 @@ static MACHINE_CONFIG_START( kyugo_base )
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(kyugo_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(kyugo_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/ladybug.cpp b/src/mame/drivers/ladybug.cpp
index f525d94aa79..03810f42619 100644
--- a/src/mame/drivers/ladybug.cpp
+++ b/src/mame/drivers/ladybug.cpp
@@ -64,6 +64,7 @@ TODO:
#include "includes/ladybug.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/sn76496.h"
#include "screen.h"
#include "speaker.h"
@@ -78,7 +79,7 @@ static ADDRESS_MAP_START( ladybug_map, AS_PROGRAM, 8, ladybug_state )
AM_RANGE(0x9001, 0x9001) AM_READ_PORT("IN1")
AM_RANGE(0x9002, 0x9002) AM_READ_PORT("DSW0")
AM_RANGE(0x9003, 0x9003) AM_READ_PORT("DSW1")
- AM_RANGE(0xa000, 0xa000) AM_WRITE(ladybug_flipscreen_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("videolatch", ls259_device, write_d0)
AM_RANGE(0xb000, 0xbfff) AM_DEVWRITE("sn1", sn76489_device, write)
AM_RANGE(0xc000, 0xcfff) AM_DEVWRITE("sn2", sn76489_device, write)
AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(ladybug_videoram_w) AM_SHARE("videoram")
@@ -535,6 +536,9 @@ static MACHINE_CONFIG_START( ladybug )
MCFG_PALETTE_INDIRECT_ENTRIES(32)
MCFG_PALETTE_INIT_OWNER(ladybug_state,ladybug)
+ MCFG_DEVICE_ADD("videolatch", LS259, 0) // L5 on video board or H3 on single board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ladybug_state, flipscreen_w)) // no other outputs used
+
MCFG_VIDEO_START_OVERRIDE(ladybug_state,ladybug)
/* sound hardware */
diff --git a/src/mame/drivers/liberatr.cpp b/src/mame/drivers/liberatr.cpp
index 601fdc054a0..7ea048cddf6 100644
--- a/src/mame/drivers/liberatr.cpp
+++ b/src/mame/drivers/liberatr.cpp
@@ -168,15 +168,33 @@ void liberatr_state::machine_reset()
*
*************************************/
-WRITE8_MEMBER( liberatr_state::led_w )
+WRITE8_MEMBER(liberatr_state::output_latch_w)
{
- output().set_led_value(offset, ~data & 0x10);
+ m_outlatch->write_bit(offset, BIT(data, 4));
}
-WRITE8_MEMBER( liberatr_state::coin_counter_w )
+WRITE_LINE_MEMBER(liberatr_state::start_led_1_w)
{
- machine().bookkeeping().coin_counter_w(offset ^ 0x01, data & 0x10);
+ output().set_led_value(0, !state);
+}
+
+
+WRITE_LINE_MEMBER(liberatr_state::start_led_2_w)
+{
+ output().set_led_value(1, !state);
+}
+
+
+WRITE_LINE_MEMBER(liberatr_state::coin_counter_left_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(liberatr_state::coin_counter_right_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -187,17 +205,17 @@ WRITE8_MEMBER( liberatr_state::coin_counter_w )
*
*************************************/
-WRITE8_MEMBER( liberatr_state::trackball_reset_w )
+WRITE_LINE_MEMBER(liberatr_state::trackball_reset_w)
{
/* on the rising edge of /ctrld, the /ld signal on the LS191 is released and the value of the switches */
/* input becomes the starting point for the trackball counters */
- if (((data ^ m_ctrld) & 0x10) && (data & 0x10))
+ if (!m_ctrld && state)
{
uint8_t trackball = ioport("FAKE")->read();
uint8_t switches = ioport("IN0")->read();
m_trackball_offset = ((trackball & 0xf0) - (switches & 0xf0)) | ((trackball - switches) & 0x0f);
}
- m_ctrld = data & 0x10;
+ m_ctrld = state;
}
@@ -279,10 +297,7 @@ static ADDRESS_MAP_START( liberatr_map, AS_PROGRAM, 8, liberatr_state )
AM_RANGE(0x6600, 0x6600) AM_WRITE(earom_control_w)
AM_RANGE(0x6800, 0x6800) AM_WRITEONLY AM_SHARE("planet_frame")
AM_RANGE(0x6a00, 0x6a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x6c00, 0x6c01) AM_WRITE(led_w)
- AM_RANGE(0x6c04, 0x6c04) AM_WRITE(trackball_reset_w)
- AM_RANGE(0x6c05, 0x6c06) AM_WRITE(coin_counter_w)
- AM_RANGE(0x6c07, 0x6c07) AM_WRITEONLY AM_SHARE("planet_select")
+ AM_RANGE(0x6c00, 0x6c07) AM_WRITE(output_latch_w)
AM_RANGE(0x6e00, 0x6e3f) AM_WRITE(earom_w)
AM_RANGE(0x7000, 0x701f) AM_DEVREADWRITE("pokey2", pokey_device, read, write)
AM_RANGE(0x7800, 0x781f) AM_DEVREADWRITE("pokey1", pokey_device, read, write)
@@ -312,10 +327,7 @@ static ADDRESS_MAP_START( liberat2_map, AS_PROGRAM, 8, liberatr_state )
AM_RANGE(0x4800, 0x483f) AM_READ(earom_r)
AM_RANGE(0x4800, 0x4800) AM_WRITEONLY AM_SHARE("planet_frame")
AM_RANGE(0x4a00, 0x4a00) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x4c00, 0x4c01) AM_WRITE(led_w)
- AM_RANGE(0x4c04, 0x4c04) AM_WRITE(trackball_reset_w)
- AM_RANGE(0x4c05, 0x4c06) AM_WRITE(coin_counter_w)
- AM_RANGE(0x4c07, 0x4c07) AM_WRITEONLY AM_SHARE("planet_select")
+ AM_RANGE(0x4c00, 0x4c07) AM_WRITE(output_latch_w)
AM_RANGE(0x4e00, 0x4e3f) AM_WRITE(earom_w)
AM_RANGE(0x5000, 0x501f) AM_DEVREADWRITE("pokey2", pokey_device, read, write)
AM_RANGE(0x5800, 0x581f) AM_DEVREADWRITE("pokey1", pokey_device, read, write)
@@ -424,6 +436,16 @@ static MACHINE_CONFIG_START( liberatr )
MCFG_ER2055_ADD("earom")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(liberatr_state, start_led_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(liberatr_state, start_led_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // TBSWP
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // SPARE
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(liberatr_state, trackball_reset_w)) // CTRLD
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(liberatr_state, coin_counter_right_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(liberatr_state, coin_counter_left_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(liberatr_state, planet_select_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/lisa.cpp b/src/mame/drivers/lisa.cpp
index 05b196400dc..f92056d33ac 100644
--- a/src/mame/drivers/lisa.cpp
+++ b/src/mame/drivers/lisa.cpp
@@ -112,6 +112,16 @@ static MACHINE_CONFIG_START( lisa )
MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ MCFG_DEVICE_ADD("latch", LS259, 0) // U4E
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(lisa_state, diag1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(lisa_state, diag2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(lisa_state, seg1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(lisa_state, seg2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(lisa_state, setup_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(lisa_state, sfmsk_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(lisa_state, vtmsk_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(lisa_state, hdmsk_w))
+
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/looping.cpp b/src/mame/drivers/looping.cpp
index d3e82a0eacb..9f0e58c0e4a 100644
--- a/src/mame/drivers/looping.cpp
+++ b/src/mame/drivers/looping.cpp
@@ -58,6 +58,7 @@ L056-6 9A " " VLI-8-4 7A "
#include "cpu/cop400/cop400.h"
#include "cpu/tms9900/tms9995.h"
#include "cpu/tms9900/tms9980a.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -115,7 +116,8 @@ public:
m_dac(*this, "dac"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
- m_soundlatch(*this, "soundlatch") { }
+ m_soundlatch(*this, "soundlatch"),
+ m_watchdog(*this, "watchdog") { }
/* memory pointers */
required_shared_ptr<uint8_t> m_videoram;
@@ -126,33 +128,29 @@ public:
/* tilemaps */
tilemap_t * m_bg_tilemap;
- /* sound state */
- uint8_t m_sound[8];
-
- int m_last;
-
- DECLARE_WRITE8_MEMBER(flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_WRITE8_MEMBER(looping_videoram_w);
DECLARE_WRITE8_MEMBER(looping_colorram_w);
- DECLARE_WRITE8_MEMBER(level2_irq_set);
- DECLARE_WRITE8_MEMBER(main_irq_ack_w);
- DECLARE_WRITE8_MEMBER(looping_souint_clr);
+ DECLARE_WRITE_LINE_MEMBER(level2_irq_set);
+ DECLARE_WRITE_LINE_MEMBER(main_irq_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(watchdog_w);
+ DECLARE_WRITE_LINE_MEMBER(looping_souint_clr);
DECLARE_WRITE8_MEMBER(looping_soundlatch_w);
- DECLARE_WRITE8_MEMBER(ballon_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(ballon_enable_w);
DECLARE_WRITE8_MEMBER(out_0_w);
DECLARE_WRITE8_MEMBER(out_2_w);
DECLARE_READ8_MEMBER(adc_r);
DECLARE_WRITE8_MEMBER(adc_w);
- DECLARE_WRITE8_MEMBER(plr2_w);
+ DECLARE_WRITE_LINE_MEMBER(plr2_w);
DECLARE_READ8_MEMBER(cop_unk_r);
DECLARE_READ_LINE_MEMBER(cop_serial_r);
DECLARE_WRITE8_MEMBER(cop_l_w);
DECLARE_READ8_MEMBER(protection_r);
DECLARE_WRITE_LINE_MEMBER(looping_spcint);
DECLARE_WRITE8_MEMBER(looping_sound_sw);
- DECLARE_WRITE8_MEMBER(ay_enable_w);
- DECLARE_WRITE8_MEMBER(speech_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(ay_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(speech_enable_w);
DECLARE_DRIVER_INIT(looping);
TILE_GET_INFO_MEMBER(get_tile_info);
virtual void machine_start() override;
@@ -168,6 +166,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
+ required_device<watchdog_timer_device> m_watchdog;
};
@@ -248,16 +247,16 @@ void looping_state::video_start()
*
*************************************/
-WRITE8_MEMBER(looping_state::flip_screen_x_w)
+WRITE_LINE_MEMBER(looping_state::flip_screen_x_w)
{
- flip_screen_x_set(~data & 0x01);
+ flip_screen_x_set(!state);
m_bg_tilemap->set_scrollx(0, flip_screen() ? 128 : 0);
}
-WRITE8_MEMBER(looping_state::flip_screen_y_w)
+WRITE_LINE_MEMBER(looping_state::flip_screen_y_w)
{
- flip_screen_y_set(~data & 0x01);
+ flip_screen_y_set(!state);
m_bg_tilemap->set_scrollx(0, flip_screen() ? 128 : 0);
}
@@ -345,7 +344,6 @@ uint32_t looping_state::screen_update_looping(screen_device &screen, bitmap_ind1
void looping_state::machine_start()
{
- save_item(NAME(m_sound));
}
void looping_state::machine_reset()
@@ -366,25 +364,30 @@ INTERRUPT_GEN_MEMBER(looping_state::looping_interrupt)
}
-WRITE8_MEMBER(looping_state::level2_irq_set)
+WRITE_LINE_MEMBER(looping_state::level2_irq_set)
{
- logerror("Level 2 int = %d\n", data);
- if (!(data & 1))
+ logerror("Level 2 int = %d\n", state);
+ if (state == 0)
m_maincpu->set_input_line(INT_9995_INT1, ASSERT_LINE);
}
-WRITE8_MEMBER(looping_state::main_irq_ack_w)
+WRITE_LINE_MEMBER(looping_state::main_irq_ack_w)
{
- if (data == 0)
+ if (state == 0)
m_maincpu->set_input_line(INT_9995_INT1, CLEAR_LINE);
}
+WRITE_LINE_MEMBER(looping_state::watchdog_w)
+{
+ m_watchdog->watchdog_reset();
+}
+
-WRITE8_MEMBER(looping_state::looping_souint_clr)
+WRITE_LINE_MEMBER(looping_state::looping_souint_clr)
{
- logerror("Soundint clr = %d\n", data);
- if (data == 0)
+ logerror("Soundint clr = %d\n", state);
+ if (state == 0)
m_audiocpu->set_input_line(0, CLEAR_LINE);
}
@@ -421,8 +424,7 @@ WRITE8_MEMBER(looping_state::looping_sound_sw)
0007 = AFA
*/
- m_sound[offset + 1] = data ^ 1;
- m_dac->write(((m_sound[2] << 1) + m_sound[3]) * m_sound[7]);
+ m_dac->write(((BIT(~data, 2) << 1) + BIT(~data, 3)) * BIT(~data, 7));
}
@@ -433,7 +435,7 @@ WRITE8_MEMBER(looping_state::looping_sound_sw)
*
*************************************/
-WRITE8_MEMBER(looping_state::ay_enable_w)
+WRITE_LINE_MEMBER(looping_state::ay_enable_w)
{
device_t *device = machine().device("aysnd");
int output;
@@ -441,24 +443,22 @@ WRITE8_MEMBER(looping_state::ay_enable_w)
device_sound_interface *sound;
device->interface(sound);
for (output = 0; output < 3; output++)
- sound->set_output_gain(output, (data & 1) ? 1.0 : 0.0);
+ sound->set_output_gain(output, state ? 1.0 : 0.0);
}
-WRITE8_MEMBER(looping_state::speech_enable_w)
+WRITE_LINE_MEMBER(looping_state::speech_enable_w)
{
device_t *device = machine().device("tms");
device_sound_interface *sound;
device->interface(sound);
- sound->set_output_gain(0, (data & 1) ? 1.0 : 0.0);
+ sound->set_output_gain(0, state ? 1.0 : 0.0);
}
-WRITE8_MEMBER(looping_state::ballon_enable_w)
+WRITE_LINE_MEMBER(looping_state::ballon_enable_w)
{
- if (m_last != data)
- osd_printf_debug("ballon_enable_w = %d\n", data);
- m_last = data;
+ osd_printf_debug("ballon_enable_w = %d\n", state);
}
@@ -475,7 +475,7 @@ WRITE8_MEMBER(looping_state::out_2_w){ osd_printf_debug("out2 = %02X\n", data);
READ8_MEMBER(looping_state::adc_r){ osd_printf_debug("%04X:ADC read\n", space.device().safe_pc()); return 0xff; }
WRITE8_MEMBER(looping_state::adc_w){ osd_printf_debug("%04X:ADC write = %02X\n", space.device().safe_pc(), data); }
-WRITE8_MEMBER(looping_state::plr2_w)
+WRITE_LINE_MEMBER(looping_state::plr2_w)
{
/* set to 1 after IDLE, cleared to 0 during processing */
/* is this an LED on the PCB? */
@@ -545,9 +545,7 @@ static ADDRESS_MAP_START( looping_map, AS_PROGRAM, 8, looping_state )
AM_RANGE(0x9840, 0x987f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x9880, 0x98ff) AM_MIRROR(0x0700) AM_RAM
- AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x07f8) AM_WRITE(level2_irq_set)
- AM_RANGE(0xb006, 0xb006) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_x_w)
- AM_RANGE(0xb007, 0xb007) AM_MIRROR(0x07f8) AM_WRITE(flip_screen_y_w)
+ AM_RANGE(0xb000, 0xb007) AM_MIRROR(0x07f8) AM_DEVWRITE("videolatch", ls259_device, write_d0)
AM_RANGE(0xe000, 0xefff) AM_RAM
AM_RANGE(0xf800, 0xf800) AM_MIRROR(0x03fc) AM_READ_PORT("P1") AM_WRITE(out_0_w) /* /OUT0 */
@@ -557,14 +555,7 @@ static ADDRESS_MAP_START( looping_map, AS_PROGRAM, 8, looping_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( looping_io_map, AS_IO, 8, looping_state )
- /* 400 = A16 */
- /* 401 = A17 */
- /* 402 = COLOR 9 */
- AM_RANGE(0x403, 0x403) AM_WRITE(plr2_w)
- /* 404 = C0 */
- /* 405 = C1 */
- AM_RANGE(0x406, 0x406) AM_WRITE(main_irq_ack_w)
- AM_RANGE(0x407, 0x407) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
+ AM_RANGE(0x400, 0x407) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -582,12 +573,8 @@ static ADDRESS_MAP_START( looping_sound_map, AS_PROGRAM, 8, looping_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( looping_sound_io_map, AS_IO, 8, looping_state )
- AM_RANGE(0x000, 0x000) AM_WRITE(looping_souint_clr)
- AM_RANGE(0x001, 0x007) AM_WRITE(looping_sound_sw)
- AM_RANGE(0x008, 0x008) AM_WRITE(ay_enable_w)
- AM_RANGE(0x009, 0x009) AM_WRITE(speech_enable_w)
- AM_RANGE(0x00a, 0x00a) AM_WRITE(ballon_enable_w)
- AM_RANGE(0x00b, 0x00f) AM_NOP
+ AM_RANGE(0x000, 0x007) AM_DEVWRITE("sen0", ls259_device, write_d0)
+ AM_RANGE(0x008, 0x00f) AM_DEVWRITE("sen1", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -638,6 +625,16 @@ static MACHINE_CONFIG_START( looping )
MCFG_COP400_READ_IN_CB(READ8(looping_state, cop_unk_r))
MCFG_COP400_READ_SI_CB(READLINE(looping_state, cop_serial_r))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C9 on CPU board
+ // Q0 = A16
+ // Q1 = A17
+ // Q2 = COLOR 9
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(looping_state, plr2_w))
+ // Q4 = C0
+ // Q5 = C1
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(looping_state, main_irq_ack_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(looping_state, watchdog_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -651,6 +648,11 @@ static MACHINE_CONFIG_START( looping )
MCFG_PALETTE_ADD("palette", 32)
MCFG_PALETTE_INIT_OWNER(looping_state, looping)
+ MCFG_DEVICE_ADD("videolatch", LS259, 0) // E2 on video board
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(looping_state, level2_irq_set))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(looping_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(looping_state, flip_screen_y_w))
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("speaker")
@@ -667,6 +669,15 @@ static MACHINE_CONFIG_START( looping )
MCFG_SOUND_ADD("dac", DAC_2BIT_R2R, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.15) // unknown DAC
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
MCFG_SOUND_ROUTE_EX(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE_EX(0, "dac", -1.0, DAC_VREF_NEG_INPUT)
+
+ MCFG_DEVICE_ADD("sen0", LS259, 0) // B3 on sound board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(looping_state, looping_souint_clr))
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(looping_state, looping_sound_sw))
+
+ MCFG_DEVICE_ADD("sen1", LS259, 0) // A1 on sound board with outputs connected to 4016 at B1
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(looping_state, ay_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(looping_state, speech_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(looping_state, ballon_enable_w))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/m63.cpp b/src/mame/drivers/m63.cpp
index f1f3e809424..2ebb5cae6ce 100644
--- a/src/mame/drivers/m63.cpp
+++ b/src/mame/drivers/m63.cpp
@@ -120,6 +120,7 @@ Dip locations verified for:
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/mcs48/mcs48.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "sound/ay8910.h"
#include "sound/samples.h"
@@ -182,10 +183,11 @@ public:
DECLARE_WRITE8_MEMBER(m63_videoram_w);
DECLARE_WRITE8_MEMBER(m63_colorram_w);
DECLARE_WRITE8_MEMBER(m63_videoram2_w);
- DECLARE_WRITE8_MEMBER(m63_palbank_w);
- DECLARE_WRITE8_MEMBER(m63_flipscreen_w);
- DECLARE_WRITE8_MEMBER(fghtbskt_flipscreen_w);
- DECLARE_WRITE8_MEMBER(coin_w);
+ DECLARE_WRITE_LINE_MEMBER(pal_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(m63_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(fghtbskt_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_w);
DECLARE_WRITE8_MEMBER(snd_irq_w);
DECLARE_WRITE8_MEMBER(snddata_w);
DECLARE_WRITE8_MEMBER(p1_w);
@@ -195,7 +197,7 @@ public:
DECLARE_READ8_MEMBER(snddata_r);
DECLARE_WRITE8_MEMBER(fghtbskt_samples_w);
SAMPLES_START_CB_MEMBER(fghtbskt_sh_start);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_DRIVER_INIT(wilytowr);
DECLARE_DRIVER_INIT(fghtbskt);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
@@ -285,27 +287,21 @@ WRITE8_MEMBER(m63_state::m63_videoram2_w)
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(m63_state::m63_palbank_w)
+WRITE_LINE_MEMBER(m63_state::pal_bank_w)
{
- if (m_pal_bank != (data & 0x01))
- {
- m_pal_bank = data & 0x01;
- m_bg_tilemap->mark_all_dirty();
- }
+ m_pal_bank = state;
+ m_bg_tilemap->mark_all_dirty();
}
-WRITE8_MEMBER(m63_state::m63_flipscreen_w)
+WRITE_LINE_MEMBER(m63_state::m63_flipscreen_w)
{
- if (flip_screen() != (~data & 0x01))
- {
- flip_screen_set(~data & 0x01);
- machine().tilemap().mark_all_dirty();
- }
+ flip_screen_set(!state);
+ machine().tilemap().mark_all_dirty();
}
-WRITE8_MEMBER(m63_state::fghtbskt_flipscreen_w)
+WRITE_LINE_MEMBER(m63_state::fghtbskt_flipscreen_w)
{
- flip_screen_set(data);
+ flip_screen_set(state);
m_fg_flag = flip_screen() ? TILE_FLIPX : 0;
}
@@ -388,9 +384,14 @@ uint32_t m63_state::screen_update_m63(screen_device &screen, bitmap_ind16 &bitma
}
-WRITE8_MEMBER(m63_state::coin_w)
+WRITE_LINE_MEMBER(m63_state::coin1_w)
{
- machine().bookkeeping().coin_counter_w(offset, data & 0x01);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(m63_state::coin2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
WRITE8_MEMBER(m63_state::snd_irq_w)
@@ -458,9 +459,9 @@ WRITE8_MEMBER(m63_state::fghtbskt_samples_w)
m_samples->start_raw(0, m_samplebuf.get() + ((data & 0xf0) << 8), 0x2000, 8000);
}
-WRITE8_MEMBER(m63_state::nmi_mask_w)
+WRITE_LINE_MEMBER(m63_state::nmi_mask_w)
{
- m_nmi_mask = data & 1;
+ m_nmi_mask = state;
}
@@ -473,10 +474,7 @@ static ADDRESS_MAP_START( m63_map, AS_PROGRAM, 8, m63_state )
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE(m63_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE(m63_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w)
- AM_RANGE(0xf003, 0xf003) AM_WRITE(m63_palbank_w)
- AM_RANGE(0xf006, 0xf007) AM_WRITE(coin_w)
+ AM_RANGE(0xf000, 0xf007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xf800, 0xf800) AM_READ_PORT("P1") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xf801, 0xf801) AM_READ_PORT("P2") AM_WRITENOP /* continues game when in stop mode (cleared by NMI handler) */
AM_RANGE(0xf802, 0xf802) AM_READ_PORT("DSW1")
@@ -501,14 +499,8 @@ static ADDRESS_MAP_START( fghtbskt_map, AS_PROGRAM, 8, m63_state )
AM_RANGE(0xf000, 0xf000) AM_WRITE(snd_irq_w)
AM_RANGE(0xf001, 0xf001) AM_WRITENOP
AM_RANGE(0xf002, 0xf002) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
- AM_RANGE(0xf800, 0xf800) AM_WRITENOP
- AM_RANGE(0xf801, 0xf801) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xf802, 0xf802) AM_WRITE(fghtbskt_flipscreen_w)
- AM_RANGE(0xf803, 0xf803) AM_WRITENOP
- AM_RANGE(0xf804, 0xf804) AM_WRITENOP
- AM_RANGE(0xf805, 0xf805) AM_WRITENOP
- AM_RANGE(0xf806, 0xf806) AM_WRITENOP
- AM_RANGE(0xf807, 0xf807) AM_WRITE(fghtbskt_samples_w)
+ AM_RANGE(0xf807, 0xf807) AM_WRITE(fghtbskt_samples_w) // FIXME
+ AM_RANGE(0xf800, 0xf807) AM_DEVWRITE("outlatch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( i8039_map, AS_PROGRAM, 8, m63_state )
@@ -756,6 +748,13 @@ static MACHINE_CONFIG_START( m63 )
MCFG_CPU_PROGRAM_MAP(m63_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", m63_state, vblank_irq)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // probably chip at E7 obscured by pulldown resistor
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(m63_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m63_state, m63_flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(m63_state, pal_bank_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(m63_state, coin1_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m63_state, coin2_w))
+
MCFG_CPU_ADD("soundcpu",I8039,XTAL_12MHz/4) /* ????? */
MCFG_CPU_PROGRAM_MAP(i8039_map)
MCFG_CPU_IO_MAP(i8039_port_map)
@@ -806,6 +805,11 @@ static MACHINE_CONFIG_START( fghtbskt )
MCFG_CPU_PROGRAM_MAP(fghtbskt_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", m63_state, vblank_irq)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(m63_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(m63_state, fghtbskt_flipscreen_w))
+ //MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(m63_state, fghtbskt_samples_w))
+
MCFG_CPU_ADD("soundcpu", I8039,XTAL_12MHz/4) /* ????? */
MCFG_CPU_PROGRAM_MAP(i8039_map)
MCFG_CPU_IO_MAP(i8039_port_map)
diff --git a/src/mame/drivers/mappy.cpp b/src/mame/drivers/mappy.cpp
index 3a3ec8a7d28..084f95fb3cc 100644
--- a/src/mame/drivers/mappy.cpp
+++ b/src/mame/drivers/mappy.cpp
@@ -553,6 +553,7 @@ TODO:
#include "cpu/m6809/m6809.h"
#include "machine/74157.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/volt_reg.h"
#include "speaker.h"
@@ -581,160 +582,30 @@ TODO:
/***************************************************************************/
-void mappy_state::common_latch_w(uint32_t offset)
+WRITE_LINE_MEMBER(mappy_state::int_on_w)
{
- int bit = offset & 1;
-
- switch (offset & 0x0e)
- {
- case 0x00: /* INT ON 2 */
- m_sub_irq_mask = bit;
- if (!bit)
- m_subcpu->set_input_line(0, CLEAR_LINE);
- break;
-
- case 0x02: /* INT ON */
- m_main_irq_mask = bit;
- if (!bit)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
-
- case 0x04: /* n.c. */
- break;
-
- case 0x06: /* SOUND ON */
- m_namco_15xx->mappy_sound_enable(bit);
- break;
-
- case 0x0a: /* SUB RESET */
- m_subcpu->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
- break;
-
- case 0x0c: /* n.c. */
- break;
-
- case 0x0e: /* n.c. */
- break;
- }
-}
-
-WRITE8_MEMBER(mappy_state::superpac_latch_w)
-{
- int bit = offset & 1;
-
- switch (offset & 0x0e)
- {
- case 0x08: /* 4 RESET */
- switch (m_type)
- {
- case GAME_SUPERPAC:
- m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- m_namco56xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- break;
- case GAME_PACNPAL:
- m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- m_namco59xx->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- break;
- case GAME_GROBDA:
- m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- break;
- }
- break;
-
- default:
- common_latch_w(offset);
- break;
- }
-}
-
-WRITE8_MEMBER(mappy_state::phozon_latch_w)
-{
- int bit = offset & 1;
-
- switch (offset & 0x0e)
- {
- case 0x04:
- m_sub2_irq_mask = bit;
- if (!bit)
- m_subcpu2->set_input_line(0, CLEAR_LINE);
- break;
-
- case 0x08:
- m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- break;
-
- case 0x0c:
- m_subcpu2->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
- break;
-
- default:
- common_latch_w(offset);
- break;
- }
-}
-
-WRITE8_MEMBER(mappy_state::mappy_latch_w)
-{
- int bit = offset & 1;
-
- switch (offset & 0x0e)
- {
- case 0x04: /* FLIP */
- flip_screen_set(bit);
- break;
-
- case 0x08: /* 4 RESET */
- switch (m_type)
- {
- case GAME_MAPPY:
- m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- m_namco58xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- break;
- case GAME_DRUAGA:
- case GAME_DIGDUG2:
- m_namco58xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- break;
- case GAME_MOTOS:
- m_namco56xx_1->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- m_namco56xx_2->set_reset_line(bit ? CLEAR_LINE : ASSERT_LINE);
- break;
- }
- break;
-
- default:
- common_latch_w(offset);
- break;
- }
+ m_main_irq_mask = state;
+ if (!state)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
}
-MACHINE_RESET_MEMBER(mappy_state,superpac)
+WRITE_LINE_MEMBER(mappy_state::int_on_2_w)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- /* Reset all latches */
- for (int i = 0; i < 0x10; i += 2)
- superpac_latch_w(space, i, 0);
+ m_sub_irq_mask = state;
+ if (!state)
+ m_subcpu->set_input_line(0, CLEAR_LINE);
}
-MACHINE_RESET_MEMBER(mappy_state,phozon)
+WRITE_LINE_MEMBER(mappy_state::int_on_3_w)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- /* Reset all latches */
- for (int i = 0; i < 0x10; i += 2)
- phozon_latch_w(space, i, 0);
+ m_sub2_irq_mask = state;
+ if (!state)
+ m_subcpu2->set_input_line(0, CLEAR_LINE);
}
-MACHINE_RESET_MEMBER(mappy_state,mappy)
+WRITE_LINE_MEMBER(mappy_state::mappy_flip_w)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- /* Reset all latches */
- for (int i = 0; i < 0x10; i += 2)
- mappy_latch_w(space, i, 0);
+ flip_screen_set(state);
}
@@ -964,7 +835,7 @@ static ADDRESS_MAP_START( superpac_cpu1_map, AS_PROGRAM, 8, mappy_state )
AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */
AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */
AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */
- AM_RANGE(0x5000, 0x500f) AM_WRITE(superpac_latch_w) /* various control bits */
+ AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xa000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -975,7 +846,7 @@ static ADDRESS_MAP_START( phozon_cpu1_map, AS_PROGRAM, 8, mappy_state )
AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */
AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */
AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */
- AM_RANGE(0x5000, 0x500f) AM_WRITE(phozon_latch_w) /* various control bits */
+ AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
AM_RANGE(0x7000, 0x7000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM */
ADDRESS_MAP_END
@@ -987,14 +858,14 @@ static ADDRESS_MAP_START( mappy_cpu1_map, AS_PROGRAM, 8, mappy_state )
AM_RANGE(0x4000, 0x43ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the sound CPU */
AM_RANGE(0x4800, 0x480f) AM_DEVREADWRITE("namcoio_1", namcoio_device, read, write) /* custom I/O chips interface */
AM_RANGE(0x4810, 0x481f) AM_DEVREADWRITE("namcoio_2", namcoio_device, read, write) /* custom I/O chips interface */
- AM_RANGE(0x5000, 0x500f) AM_WRITE(mappy_latch_w) /* various control bits */
+ AM_RANGE(0x5000, 0x500f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM code (only a000-ffff in Mappy) */
ADDRESS_MAP_END
static ADDRESS_MAP_START( superpac_cpu2_map, AS_PROGRAM, 8, mappy_state )
AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU (also sound registers) */
- AM_RANGE(0x2000, 0x200f) AM_WRITE(superpac_latch_w) /* various control bits */
+ AM_RANGE(0x2000, 0x200f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -1005,7 +876,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( mappy_cpu2_map, AS_PROGRAM, 8, mappy_state )
AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU (also sound registers) */
- AM_RANGE(0x2000, 0x200f) AM_WRITE(mappy_latch_w) /* various control bits */
+ AM_RANGE(0x2000, 0x200f) AM_DEVWRITE("mainlatch", ls259_device, write_a0) /* various control bits */
AM_RANGE(0xe000, 0xffff) AM_ROM /* ROM code */
ADDRESS_MAP_END
@@ -1659,13 +1530,18 @@ static MACHINE_CONFIG_START( superpac_common )
MCFG_CPU_PROGRAM_MAP(superpac_cpu2_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub_vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
- MCFG_MACHINE_RESET_OVERRIDE(mappy_state,superpac)
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", superpac)
@@ -1709,6 +1585,10 @@ static MACHINE_CONFIG_START( superpac )
MCFG_DEVICE_ADD("dipmux", LS157, 0)
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( pacnpal )
@@ -1735,6 +1615,10 @@ static MACHINE_CONFIG_START( pacnpal )
MCFG_DEVICE_ADD("dipmux", LS157, 0)
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco59xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
@@ -1762,6 +1646,10 @@ static MACHINE_CONFIG_START( grobda )
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+
/* sound hardware */
MCFG_SOUND_ADD("dac", DAC_4BIT_BINARY_WEIGHTED, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.275) // alternate route to 15XX-related DAC?
MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
@@ -1784,12 +1672,21 @@ static MACHINE_CONFIG_START( phozon )
MCFG_CPU_PROGRAM_MAP(phozon_cpu3_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub2_vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5C
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mappy_state, int_on_3_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
- MCFG_MACHINE_RESET_OVERRIDE(mappy_state,phozon)
MCFG_DEVICE_ADD("namcoio_1", NAMCO_58XX, 0)
MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS"))
@@ -1841,12 +1738,18 @@ static MACHINE_CONFIG_START( mappy_common )
MCFG_CPU_PROGRAM_MAP(mappy_cpu2_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mappy_state, sub_vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2M on CPU board
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mappy_state, int_on_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mappy_state, int_on_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mappy_state, mappy_flip_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("namco", namco_15xx_device, mappy_sound_enable))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
MCFG_MACHINE_START_OVERRIDE(mappy_state,mappy)
- MCFG_MACHINE_RESET_OVERRIDE(mappy_state,mappy)
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mappy)
@@ -1889,6 +1792,10 @@ static MACHINE_CONFIG_START( mappy )
MCFG_DEVICE_ADD("dipmux", LS157, 0)
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( digdug2 )
@@ -1917,6 +1824,10 @@ static MACHINE_CONFIG_START( digdug2 )
MCFG_DEVICE_ADD("dipmux", LS157, 0)
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco58xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( todruaga, digdug2 )
@@ -1951,6 +1862,10 @@ static MACHINE_CONFIG_START( motos )
MCFG_DEVICE_ADD("dipmux", LS157, 0)
MCFG_74157_A_IN_CB(IOPORT("DSW2"))
MCFG_74157_B_IN_CB(IOPORT("DSW2")) MCFG_DEVCB_RSHIFT(4)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("namcoio_1", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("namcoio_2", namco56xx_device, set_reset_line)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/marineb.cpp b/src/mame/drivers/marineb.cpp
index 442bda78bb2..fc756bbbaaf 100644
--- a/src/mame/drivers/marineb.cpp
+++ b/src/mame/drivers/marineb.cpp
@@ -41,6 +41,7 @@ write
#include "includes/marineb.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
@@ -53,26 +54,15 @@ void marineb_state::machine_reset()
{
m_palette_bank = 0;
m_column_scroll = 0;
- m_flipscreen_x = 0;
- m_flipscreen_y = 0;
- m_marineb_active_low_flipscreen = 0;
-}
-
-MACHINE_RESET_MEMBER(marineb_state,springer)
-{
- marineb_state::machine_reset();
-
- m_marineb_active_low_flipscreen = 1;
}
void marineb_state::machine_start()
{
- save_item(NAME(m_marineb_active_low_flipscreen));
}
-WRITE8_MEMBER(marineb_state::irq_mask_w)
+WRITE_LINE_MEMBER(marineb_state::irq_mask_w)
{
- m_irq_mask = data & 1;
+ m_irq_mask = state;
}
static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8, marineb_state )
@@ -84,9 +74,8 @@ static ADDRESS_MAP_START( marineb_map, AS_PROGRAM, 8, marineb_state )
AM_RANGE(0x9800, 0x9800) AM_WRITE(marineb_column_scroll_w)
AM_RANGE(0x9a00, 0x9a00) AM_WRITE(marineb_palette_bank_0_w)
AM_RANGE(0x9c00, 0x9c00) AM_WRITE(marineb_palette_bank_1_w)
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2") AM_WRITE(irq_mask_w)
- AM_RANGE(0xa001, 0xa001) AM_WRITE(marineb_flipscreen_y_w)
- AM_RANGE(0xa002, 0xa002) AM_WRITE(marineb_flipscreen_x_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("outlatch", ls259_device, write_d0)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2")
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("P1")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("SYSTEM") AM_WRITENOP /* also watchdog */
@@ -545,6 +534,10 @@ static MACHINE_CONFIG_START( marineb )
MCFG_CPU_IO_MAP(marineb_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, marineb_vblank_irq)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -580,7 +573,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( springer, marineb )
/* basic machine hardware */
- MCFG_MACHINE_RESET_OVERRIDE(marineb_state,springer)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT
/* video hardware */
MCFG_SCREEN_MODIFY("screen")
@@ -634,7 +629,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( bcruzm12, wanted )
/* basic machine hardware */
- MCFG_MACHINE_RESET_OVERRIDE(marineb_state,springer)
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w)) MCFG_DEVCB_INVERT
MACHINE_CONFIG_END
/***************************************************************************
diff --git a/src/mame/drivers/mastboy.cpp b/src/mame/drivers/mastboy.cpp
index 75b85362f78..dccdd914f9c 100644
--- a/src/mame/drivers/mastboy.cpp
+++ b/src/mame/drivers/mastboy.cpp
@@ -440,6 +440,7 @@
#include "cpu/z180/z180.h"
#include "sound/saa1099.h"
#include "sound/msm5205.h"
+#include "machine/74259.h"
#include "machine/eeprompar.h"
#include "screen.h"
#include "speaker.h"
@@ -452,6 +453,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"),
+ m_outlatch(*this, "outlatch"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_earom(*this, "earom") ,
@@ -461,6 +463,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<msm5205_device> m_msm;
+ required_device<ls259_device> m_outlatch;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<eeprom_parallel_28xx_device> m_earom;
@@ -475,22 +478,17 @@ public:
int m_earom_enabled;
int m_m5205_next;
int m_m5205_part;
- int m_m5205_sambit0;
- int m_m5205_sambit1;
DECLARE_READ8_MEMBER(banked_ram_r);
DECLARE_WRITE8_MEMBER(banked_ram_w);
DECLARE_WRITE8_MEMBER(bank_w);
DECLARE_READ8_MEMBER(earom_r);
DECLARE_WRITE8_MEMBER(earom_w);
- DECLARE_WRITE8_MEMBER(earom_enable_w);
- DECLARE_WRITE8_MEMBER(msm5205_sambit0_w);
- DECLARE_WRITE8_MEMBER(msm5205_sambit1_w);
+ DECLARE_WRITE_LINE_MEMBER(earom_enable_w);
DECLARE_WRITE8_MEMBER(msm5205_data_w);
- DECLARE_WRITE8_MEMBER(irq0_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(irq0_ack_w);
DECLARE_READ8_MEMBER(port_38_read);
DECLARE_READ8_MEMBER(nmi_read);
- DECLARE_WRITE8_MEMBER(msm5205_reset_w);
DECLARE_WRITE_LINE_MEMBER(adpcm_int);
virtual void machine_start() override;
@@ -647,40 +645,18 @@ WRITE8_MEMBER(mastboy_state::earom_w)
// }
}
-WRITE8_MEMBER(mastboy_state::earom_enable_w)
+WRITE_LINE_MEMBER(mastboy_state::earom_enable_w)
{
/* This is some kind of enable / disable control for backup memory (see Charles's notes) but I'm not
sure how it works in practice, if we use it then it writes a lot of data with it disabled */
- m_earom_enabled = data&1;
+ m_earom_enabled = state;
}
/* MSM5205 Related */
-WRITE8_MEMBER(mastboy_state::msm5205_sambit0_w)
-{
- m_m5205_sambit0 = data & 1;
- m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
-
- logerror("msm5205 samplerate bit 0, set to %02x\n",data);
-}
-
-WRITE8_MEMBER(mastboy_state::msm5205_sambit1_w)
-{
- m_m5205_sambit1 = data & 1;
-
- m_msm->playmode_w((1 << 2) | (m_m5205_sambit1 << 1) | (m_m5205_sambit0) );
-
- logerror("msm5205 samplerate bit 0, set to %02x\n",data);
-}
-
-WRITE8_MEMBER(mastboy_state::msm5205_reset_w)
-{
- m_m5205_part = 0;
- m_msm->reset_w(data & 1);
-}
-
WRITE8_MEMBER(mastboy_state::msm5205_data_w)
{
+ m_m5205_part = 0;
m_m5205_next = data;
}
@@ -697,16 +673,15 @@ WRITE_LINE_MEMBER(mastboy_state::adpcm_int)
/* Interrupt Handling */
-WRITE8_MEMBER(mastboy_state::irq0_ack_w)
+WRITE_LINE_MEMBER(mastboy_state::irq0_ack_w)
{
- m_irq0_ack = data;
- if ((data & 1) == 1)
+ if (state)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
INTERRUPT_GEN_MEMBER(mastboy_state::interrupt)
{
- if ((m_irq0_ack & 1) == 1)
+ if (m_outlatch->q0_r() == 1)
{
device.execute().set_input_line(0, ASSERT_LINE);
}
@@ -734,11 +709,7 @@ static ADDRESS_MAP_START( mastboy_map, AS_PROGRAM, 8, mastboy_state )
AM_RANGE(0xff820, 0xff827) AM_WRITE(bank_w)
AM_RANGE(0xff828, 0xff829) AM_DEVWRITE("saa", saa1099_device, write)
AM_RANGE(0xff830, 0xff830) AM_WRITE(msm5205_data_w)
- AM_RANGE(0xff838, 0xff838) AM_WRITE(irq0_ack_w)
- AM_RANGE(0xff839, 0xff839) AM_WRITE(msm5205_sambit0_w)
- AM_RANGE(0xff83a, 0xff83a) AM_WRITE(msm5205_sambit1_w)
- AM_RANGE(0xff83b, 0xff83b) AM_WRITE(msm5205_reset_w)
- AM_RANGE(0xff83c, 0xff83c) AM_WRITE(earom_enable_w)
+ AM_RANGE(0xff838, 0xff83f) AM_DEVWRITE("outlatch", ls259_device, write_d0)
AM_RANGE(0xffc00, 0xfffff) AM_RAM // Internal RAM
ADDRESS_MAP_END
@@ -887,8 +858,6 @@ void mastboy_state::machine_start()
save_item(NAME(m_earom_enabled));
save_item(NAME(m_m5205_next));
save_item(NAME(m_m5205_part));
- save_item(NAME(m_m5205_sambit0));
- save_item(NAME(m_m5205_sambit1));
}
void mastboy_state::machine_reset()
@@ -898,10 +867,6 @@ void mastboy_state::machine_reset()
memset( m_tileram, 0x00, 0x01000);
memset( m_colram, 0x00, 0x00200);
memset( m_vram, 0x00, 0x10000);
-
- m_m5205_part = 0;
- m_msm->reset_w(1);
- m_irq0_ack = 0;
}
@@ -914,6 +879,12 @@ static MACHINE_CONFIG_START( mastboy )
MCFG_EEPROM_2816_ADD("earom")
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // IC17
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mastboy_state, irq0_ack_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("msm", msm5205_device, s2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("msm", msm5205_device, s1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mastboy_state, earom_enable_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/megazone.cpp b/src/mame/drivers/megazone.cpp
index 85928fbea61..e6c1c69de28 100644
--- a/src/mame/drivers/megazone.cpp
+++ b/src/mame/drivers/megazone.cpp
@@ -15,6 +15,7 @@ To enter service mode, keep 1&2 pressed on reset
#include "cpu/m6809/m6809.h"
#include "cpu/mcs48/mcs48.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/konami1.h"
#include "machine/watchdog.h"
@@ -75,21 +76,24 @@ WRITE8_MEMBER(megazone_state::i8039_irqen_and_status_w)
m_i8039_status = (data & 0x70) >> 4;
}
-WRITE8_MEMBER(megazone_state::megazone_coin_counter_w)
+WRITE_LINE_MEMBER(megazone_state::coin_counter_1_w)
{
- machine().bookkeeping().coin_counter_w(1 - offset, data); /* 1-offset, because coin counters are in reversed order */
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(megazone_state::irq_mask_w)
+WRITE_LINE_MEMBER(megazone_state::coin_counter_2_w)
{
- m_irq_mask = data & 1;
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(megazone_state::irq_mask_w)
+{
+ m_irq_mask = state;
}
static ADDRESS_MAP_START( megazone_map, AS_PROGRAM, 8, megazone_state )
- AM_RANGE(0x0000, 0x0001) AM_WRITE(megazone_coin_counter_w) /* coin counter 2, coin counter 1 */
- AM_RANGE(0x0005, 0x0005) AM_WRITE(megazone_flipscreen_w)
- AM_RANGE(0x0007, 0x0007) AM_WRITE(irq_mask_w)
+ AM_RANGE(0x0000, 0x0007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x0800, 0x0800) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x1000, 0x1000) AM_WRITEONLY AM_SHARE("scrolly")
AM_RANGE(0x1800, 0x1800) AM_WRITEONLY AM_SHARE("scrollx")
@@ -224,7 +228,6 @@ void megazone_state::machine_start()
void megazone_state::machine_reset()
{
- m_flipscreen = 0;
m_i8039_status = 0;
}
@@ -255,6 +258,12 @@ static MACHINE_CONFIG_START( megazone )
MCFG_QUANTUM_TIME(attotime::from_hz(900))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 13A
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(megazone_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(megazone_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(megazone_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(megazone_state, irq_mask_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/mermaid.cpp b/src/mame/drivers/mermaid.cpp
index 08f498f09b2..2ab899f4d38 100644
--- a/src/mame/drivers/mermaid.cpp
+++ b/src/mame/drivers/mermaid.cpp
@@ -120,6 +120,7 @@ Stephh's notes (based on the games Z80 code and some tests) :
#include "includes/mermaid.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/msm5205.h"
#include "speaker.h"
@@ -128,20 +129,30 @@ Stephh's notes (based on the games Z80 code and some tests) :
WRITE8_MEMBER(mermaid_state::mermaid_ay8910_write_port_w)
{
- if (m_ay8910_enable[0]) m_ay1->data_w(space, offset, data);
- if (m_ay8910_enable[1]) m_ay2->data_w(space, offset, data);
+ if (m_ay8910_enable[0]) m_ay8910[0]->data_w(space, offset, data);
+ if (m_ay8910_enable[1]) m_ay8910[1]->data_w(space, offset, data);
}
WRITE8_MEMBER(mermaid_state::mermaid_ay8910_control_port_w)
{
- if (m_ay8910_enable[0]) m_ay1->address_w(space, offset, data);
- if (m_ay8910_enable[1]) m_ay2->address_w(space, offset, data);
+ if (m_ay8910_enable[0]) m_ay8910[0]->address_w(space, offset, data);
+ if (m_ay8910_enable[1]) m_ay8910[1]->address_w(space, offset, data);
}
-WRITE8_MEMBER(mermaid_state::nmi_mask_w)
+WRITE_LINE_MEMBER(mermaid_state::ay1_enable_w)
{
- m_nmi_mask = data & 1;
+ m_ay8910_enable[0] = state;
+}
+
+WRITE_LINE_MEMBER(mermaid_state::ay2_enable_w)
+{
+ m_ay8910_enable[1] = state;
+}
+
+WRITE_LINE_MEMBER(mermaid_state::nmi_mask_w)
+{
+ m_nmi_mask = state;
}
/* Memory Map */
@@ -156,18 +167,9 @@ static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8, mermaid_state )
AM_RANGE(0xd880, 0xd8bf) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(mermaid_colorram_w) AM_SHARE("colorram")
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("DSW")
- AM_RANGE(0xe000, 0xe001) AM_RAM AM_SHARE("ay8910_enable")
- AM_RANGE(0xe002, 0xe004) AM_WRITENOP // ???
- AM_RANGE(0xe005, 0xe005) AM_WRITE(mermaid_flip_screen_x_w)
- AM_RANGE(0xe006, 0xe006) AM_WRITE(mermaid_flip_screen_y_w)
- AM_RANGE(0xe007, 0xe007) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xe800, 0xe800) AM_READ_PORT("P1") AM_WRITENOP // ???
- AM_RANGE(0xe801, 0xe801) AM_WRITENOP // ???
- AM_RANGE(0xe802, 0xe802) AM_WRITENOP // ???
- AM_RANGE(0xe803, 0xe803) AM_WRITENOP // ???
- AM_RANGE(0xe804, 0xe804) AM_WRITE(rougien_gfxbankswitch1_w)
- AM_RANGE(0xe805, 0xe805) AM_WRITE(rougien_gfxbankswitch2_w)
- AM_RANGE(0xe807, 0xe807) AM_WRITENOP // ???
+ AM_RANGE(0xe000, 0xe007) AM_DEVWRITE("latch1", ls259_device, write_d0)
+ AM_RANGE(0xe800, 0xe800) AM_READ_PORT("P1")
+ AM_RANGE(0xe800, 0xe807) AM_DEVWRITE("latch2", ls259_device, write_d0)
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("P2")
AM_RANGE(0xf800, 0xf800) AM_READ(mermaid_collision_r)
AM_RANGE(0xf802, 0xf802) AM_WRITENOP // ???
@@ -175,36 +177,27 @@ static ADDRESS_MAP_START( mermaid_map, AS_PROGRAM, 8, mermaid_state )
AM_RANGE(0xf807, 0xf807) AM_WRITE(mermaid_ay8910_control_port_w)
ADDRESS_MAP_END
-WRITE8_MEMBER(mermaid_state::rougien_sample_rom_lo_w)
+WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_lo_w)
{
- m_adpcm_rom_sel = (data & 1) | (m_adpcm_rom_sel & 2);
+ m_adpcm_rom_sel = state | (m_adpcm_rom_sel & 2);
}
-WRITE8_MEMBER(mermaid_state::rougien_sample_rom_hi_w)
+WRITE_LINE_MEMBER(mermaid_state::rougien_sample_rom_hi_w)
{
- m_adpcm_rom_sel = ((data & 1)<<1) | (m_adpcm_rom_sel & 1);
+ m_adpcm_rom_sel = (state <<1) | (m_adpcm_rom_sel & 1);
}
-WRITE8_MEMBER(mermaid_state::rougien_sample_playback_w)
+WRITE_LINE_MEMBER(mermaid_state::rougien_sample_playback_w)
{
- if((m_adpcm_play_reg & 1) && ((data & 1) == 0))
+ if (state)
{
m_adpcm_pos = m_adpcm_rom_sel*0x1000;
m_adpcm_end = m_adpcm_pos+0x1000;
m_adpcm_idle = 0;
m_adpcm->reset_w(0);
}
-
- m_adpcm_play_reg = data & 1;
}
-static ADDRESS_MAP_START( rougien_map, AS_PROGRAM, 8, mermaid_state )
- AM_RANGE(0xe002, 0xe002) AM_WRITE(rougien_sample_playback_w)
- AM_RANGE(0xe802, 0xe802) AM_WRITE(rougien_sample_rom_hi_w)
- AM_RANGE(0xe803, 0xe803) AM_WRITE(rougien_sample_rom_lo_w)
- AM_IMPORT_FROM( mermaid_map )
-ADDRESS_MAP_END
-
/* Input Ports */
static INPUT_PORTS_START( mermaid )
@@ -371,6 +364,7 @@ void mermaid_state::machine_start()
save_item(NAME(m_coll_bit6));
save_item(NAME(m_rougien_gfxbank1));
save_item(NAME(m_rougien_gfxbank2));
+ save_item(NAME(m_ay8910_enable));
save_item(NAME(m_adpcm_pos));
save_item(NAME(m_adpcm_end));
@@ -436,6 +430,19 @@ static MACHINE_CONFIG_START( mermaid )
MCFG_CPU_PROGRAM_MAP(mermaid_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", mermaid_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch1", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mermaid_state, ay1_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mermaid_state, ay2_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // ???
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mermaid_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mermaid_state, flip_screen_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(mermaid_state, nmi_mask_w))
+
+ MCFG_DEVICE_ADD("latch2", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // ???
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mermaid_state, rougien_gfxbankswitch1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mermaid_state, rougien_gfxbankswitch2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // very frequent
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -465,8 +472,12 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( rougien, mermaid )
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_CPU_PROGRAM_MAP(rougien_map)
+ MCFG_DEVICE_MODIFY("latch1")
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mermaid_state, rougien_sample_playback_w))
+
+ MCFG_DEVICE_MODIFY("latch2")
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mermaid_state, rougien_sample_rom_hi_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(mermaid_state, rougien_sample_rom_lo_w))
MCFG_PALETTE_MODIFY("palette")
MCFG_PALETTE_INIT_OWNER(mermaid_state,rougien)
diff --git a/src/mame/drivers/mjsister.cpp b/src/mame/drivers/mjsister.cpp
index d65d7c57d40..8af28e02564 100644
--- a/src/mame/drivers/mjsister.cpp
+++ b/src/mame/drivers/mjsister.cpp
@@ -10,6 +10,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
@@ -31,14 +32,16 @@ public:
mjsister_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_mainlatch(*this, "mainlatch%u", 1),
m_palette(*this, "palette"),
- m_dac(*this, "dac") { }
+ m_dac(*this, "dac"),
+ m_rombank(*this, "bank1") { }
/* video-related */
std::unique_ptr<bitmap_ind16> m_tmpbitmap0;
std::unique_ptr<bitmap_ind16> m_tmpbitmap1;
- int m_flip_screen;
- int m_video_enable;
+ bool m_flip_screen;
+ bool m_video_enable;
int m_screen_redraw;
int m_vrambank;
int m_colorbank;
@@ -46,9 +49,7 @@ public:
/* misc */
int m_input_sel1;
int m_input_sel2;
-
- int m_rombank0;
- int m_rombank1;
+ bool m_irq_enable;
uint32_t m_dac_adr;
uint32_t m_dac_bank;
@@ -58,23 +59,32 @@ public:
/* devices */
required_device<cpu_device> m_maincpu;
+ required_device_array<ls259_device, 2> m_mainlatch;
required_device<palette_device> m_palette;
required_device<dac_byte_interface> m_dac;
/* memory */
+ required_memory_bank m_rombank;
uint8_t m_videoram0[0x8000];
uint8_t m_videoram1[0x8000];
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(dac_adr_s_w);
DECLARE_WRITE8_MEMBER(dac_adr_e_w);
- DECLARE_WRITE8_MEMBER(banksel1_w);
- DECLARE_WRITE8_MEMBER(banksel2_w);
+ DECLARE_WRITE_LINE_MEMBER(rombank_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(colorbank_w);
+ DECLARE_WRITE_LINE_MEMBER(video_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(vrambank_w);
+ DECLARE_WRITE_LINE_MEMBER(dac_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
DECLARE_WRITE8_MEMBER(input_sel1_w);
DECLARE_WRITE8_MEMBER(input_sel2_w);
DECLARE_READ8_MEMBER(keys_r);
TIMER_CALLBACK_MEMBER(dac_callback);
virtual void machine_start() override;
virtual void machine_reset() override;
+ INTERRUPT_GEN_MEMBER(interrupt);
virtual void video_start() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void redraw();
@@ -227,56 +237,47 @@ WRITE8_MEMBER(mjsister_state::dac_adr_e_w)
m_dac_busy = 1;
}
-WRITE8_MEMBER(mjsister_state::banksel1_w)
+WRITE_LINE_MEMBER(mjsister_state::rombank_w)
{
- int tmp = m_colorbank;
-
- switch (data)
- {
- case 0x0: m_rombank0 = 0 ; break;
- case 0x1: m_rombank0 = 1 ; break;
-
- case 0x2: m_flip_screen = 0 ; break;
- case 0x3: m_flip_screen = 1 ; break;
-
- case 0x4: m_colorbank &= 0xfe; break;
- case 0x5: m_colorbank |= 0x01; break;
- case 0x6: m_colorbank &= 0xfd; break;
- case 0x7: m_colorbank |= 0x02; break;
- case 0x8: m_colorbank &= 0xfb; break;
- case 0x9: m_colorbank |= 0x04; break;
-
- case 0xa: m_video_enable = 0 ; break;
- case 0xb: m_video_enable = 1 ; break;
-
- case 0xe: m_vrambank = 0 ; break;
- case 0xf: m_vrambank = 1 ; break;
+ m_rombank->set_entry((m_mainlatch[0]->q0_r() << 1) | m_mainlatch[1]->q6_r());
+}
- default:
- logerror("%04x p30_w:%02x\n", space.device().safe_pc(), data);
- }
+WRITE_LINE_MEMBER(mjsister_state::flip_screen_w)
+{
+ m_flip_screen = state;
+}
- if (tmp != m_colorbank)
- m_screen_redraw = 1;
+WRITE_LINE_MEMBER(mjsister_state::colorbank_w)
+{
+ m_colorbank = (m_mainlatch[0]->output_state() >> 2) & 7;
+ redraw();
+}
- membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1);
+WRITE_LINE_MEMBER(mjsister_state::video_enable_w)
+{
+ m_video_enable = state;
}
-WRITE8_MEMBER(mjsister_state::banksel2_w)
+WRITE_LINE_MEMBER(mjsister_state::irq_enable_w)
{
- switch (data)
- {
- case 0xa: m_dac_bank = 0; break;
- case 0xb: m_dac_bank = 1; break;
+ m_irq_enable = state;
+ if (!m_irq_enable)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+}
- case 0xc: m_rombank1 = 0; break;
- case 0xd: m_rombank1 = 1; break;
+WRITE_LINE_MEMBER(mjsister_state::vrambank_w)
+{
+ m_vrambank = state;
+}
- default:
- logerror("%04x p31_w:%02x\n", space.device().safe_pc(), data);
- }
+WRITE_LINE_MEMBER(mjsister_state::dac_bank_w)
+{
+ m_dac_bank = state;
+}
- membank("bank1")->set_entry(m_rombank0 * 2 + m_rombank1);
+WRITE_LINE_MEMBER(mjsister_state::coin_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
}
WRITE8_MEMBER(mjsister_state::input_sel1_w)
@@ -326,8 +327,8 @@ static ADDRESS_MAP_START( mjsister_io_map, AS_IO, 8, mjsister_state )
AM_RANGE(0x12, 0x12) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x20, 0x20) AM_READ(keys_r)
AM_RANGE(0x21, 0x21) AM_READ_PORT("IN0")
- AM_RANGE(0x30, 0x30) AM_WRITE(banksel1_w)
- AM_RANGE(0x31, 0x31) AM_WRITE(banksel2_w)
+ AM_RANGE(0x30, 0x30) AM_DEVWRITE("mainlatch1", ls259_device, write_nibble)
+ AM_RANGE(0x31, 0x31) AM_DEVWRITE("mainlatch2", ls259_device, write_nibble)
AM_RANGE(0x32, 0x32) AM_WRITE(input_sel1_w)
AM_RANGE(0x33, 0x33) AM_WRITE(input_sel2_w)
AM_RANGE(0x34, 0x34) AM_WRITE(dac_adr_s_w)
@@ -444,7 +445,7 @@ void mjsister_state::machine_start()
{
uint8_t *ROM = memregion("maincpu")->base();
- membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x8000);
+ m_rombank->configure_entries(0, 4, &ROM[0x10000], 0x8000);
m_dac_timer = timer_alloc(TIMER_DAC);
@@ -455,8 +456,7 @@ void mjsister_state::machine_start()
save_item(NAME(m_colorbank));
save_item(NAME(m_input_sel1));
save_item(NAME(m_input_sel2));
- save_item(NAME(m_rombank0));
- save_item(NAME(m_rombank1));
+ save_item(NAME(m_irq_enable));
save_item(NAME(m_dac_adr));
save_item(NAME(m_dac_bank));
save_item(NAME(m_dac_adr_s));
@@ -470,18 +470,19 @@ void mjsister_state::machine_reset()
m_flip_screen = 0;
m_video_enable = 0;
m_screen_redraw = 0;
- m_vrambank = 0;
- m_colorbank = 0;
m_input_sel1 = 0;
m_input_sel2 = 0;
- m_rombank0 = 0;
- m_rombank1 = 0;
m_dac_adr = 0;
m_dac_bank = 0;
m_dac_adr_s = 0;
m_dac_adr_e = 0;
}
+INTERRUPT_GEN_MEMBER(mjsister_state::interrupt)
+{
+ if (m_irq_enable)
+ m_maincpu->set_input_line(0, ASSERT_LINE);
+}
static MACHINE_CONFIG_START( mjsister )
@@ -489,8 +490,22 @@ static MACHINE_CONFIG_START( mjsister )
MCFG_CPU_ADD("maincpu", Z80, MCLK/2) /* 6.000 MHz */
MCFG_CPU_PROGRAM_MAP(mjsister_map)
MCFG_CPU_IO_MAP(mjsister_io_map)
- MCFG_CPU_PERIODIC_INT_DRIVER(mjsister_state, irq0_line_hold, 2*60)
-
+ MCFG_CPU_PERIODIC_INT_DRIVER(mjsister_state, interrupt, 2*60)
+
+ MCFG_DEVICE_ADD("mainlatch1", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mjsister_state, rombank_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mjsister_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mjsister_state, colorbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(mjsister_state, colorbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(mjsister_state, colorbank_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mjsister_state, video_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mjsister_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(mjsister_state, vrambank_w))
+
+ MCFG_DEVICE_ADD("mainlatch2", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mjsister_state, coin_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(mjsister_state, dac_bank_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(mjsister_state, rombank_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/mouser.cpp b/src/mame/drivers/mouser.cpp
index fe3def5cf69..7f6fa859b14 100644
--- a/src/mame/drivers/mouser.cpp
+++ b/src/mame/drivers/mouser.cpp
@@ -18,6 +18,7 @@
#include "includes/mouser.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
@@ -25,15 +26,14 @@
/* Mouser has external masking circuitry around
* the NMI input on the main CPU */
-WRITE8_MEMBER(mouser_state::mouser_nmi_enable_w)
+WRITE_LINE_MEMBER(mouser_state::nmi_enable_w)
{
- //logerror("nmi_enable %02x\n", data);
- m_nmi_enable = data;
+ m_nmi_enable = state;
}
INTERRUPT_GEN_MEMBER(mouser_state::mouser_nmi_interrupt)
{
- if (BIT(m_nmi_enable, 0))
+ if (m_nmi_enable)
nmi_line_pulse(device);
}
@@ -60,7 +60,7 @@ WRITE8_MEMBER(mouser_state::mouser_sound_nmi_clear_w)
INTERRUPT_GEN_MEMBER(mouser_state::mouser_sound_nmi_assert)
{
- if (BIT(m_nmi_enable, 0))
+ if (m_nmi_enable)
device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
@@ -71,9 +71,8 @@ static ADDRESS_MAP_START( mouser_map, AS_PROGRAM, 8, mouser_state )
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("videoram")
AM_RANGE(0x9800, 0x9cff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_SHARE("colorram")
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(mouser_nmi_enable_w) /* bit 0 = NMI Enable */
- AM_RANGE(0xa001, 0xa001) AM_WRITE(mouser_flip_screen_x_w)
- AM_RANGE(0xa002, 0xa002) AM_WRITE(mouser_flip_screen_y_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1")
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("P2") AM_WRITE(mouser_sound_interrupt_w) /* byte to sound cpu */
@@ -198,7 +197,6 @@ void mouser_state::machine_start()
void mouser_state::machine_reset()
{
m_sound_byte = 0;
- m_nmi_enable = 0;
}
static MACHINE_CONFIG_START( mouser )
@@ -214,6 +212,10 @@ static MACHINE_CONFIG_START( mouser )
MCFG_CPU_IO_MAP(mouser_sound_io_map)
MCFG_CPU_PERIODIC_INT_DRIVER(mouser_state, mouser_sound_nmi_assert, 4*60) /* ??? This controls the sound tempo */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // type unconfirmed
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(mouser_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(mouser_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(mouser_state, flip_screen_y_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/nemesis.cpp b/src/mame/drivers/nemesis.cpp
index e7a9a45e350..a7c03ff5d02 100644
--- a/src/mame/drivers/nemesis.cpp
+++ b/src/mame/drivers/nemesis.cpp
@@ -54,6 +54,7 @@ So this is the correct behavior of real hardware, not an emulation bug.
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -103,55 +104,40 @@ TIMER_DEVICE_CALLBACK_MEMBER(nemesis_state::gx400_interrupt)
}
-WRITE16_MEMBER(nemesis_state::gx400_irq1_enable_word_w)
+WRITE_LINE_MEMBER(nemesis_state::irq_enable_w)
{
- if (ACCESSING_BITS_0_7)
- m_irq1_on = data & 0x0001;
-
- if (ACCESSING_BITS_8_15)
- machine().bookkeeping().coin_lockout_w(1, data & 0x0100);
+ m_irq_on = state;
}
-WRITE16_MEMBER(nemesis_state::gx400_irq2_enable_word_w)
+WRITE_LINE_MEMBER(nemesis_state::irq1_enable_w)
{
- if (ACCESSING_BITS_0_7)
- m_irq2_on = data & 0x0001;
-
- if (ACCESSING_BITS_8_15)
- machine().bookkeeping().coin_lockout_w(0, data & 0x0100);
+ m_irq1_on = state;
}
-WRITE16_MEMBER(nemesis_state::gx400_irq4_enable_word_w)
+WRITE_LINE_MEMBER(nemesis_state::irq2_enable_w)
{
- if (ACCESSING_BITS_8_15)
- m_irq4_on = data & 0x0100;
+ m_irq2_on = state;
}
-WRITE16_MEMBER(nemesis_state::nemesis_irq_enable_word_w)
+WRITE_LINE_MEMBER(nemesis_state::irq4_enable_w)
{
- if (ACCESSING_BITS_0_7)
- m_irq_on = data & 0xff;
-
- if (ACCESSING_BITS_8_15)
- machine().bookkeeping().coin_lockout_global_w(data & 0x0100);
+ m_irq4_on = state;
}
-WRITE16_MEMBER(nemesis_state::konamigt_irq_enable_word_w)
+WRITE_LINE_MEMBER(nemesis_state::coin1_lockout_w)
{
- if (ACCESSING_BITS_0_7)
- m_irq_on = data & 0xff;
-
- if (ACCESSING_BITS_8_15)
- machine().bookkeeping().coin_lockout_w(1, data & 0x0100);
+ machine().bookkeeping().coin_lockout_w(0, state);
}
-WRITE16_MEMBER(nemesis_state::konamigt_irq2_enable_word_w)
+WRITE_LINE_MEMBER(nemesis_state::coin2_lockout_w)
{
- if (ACCESSING_BITS_0_7)
- m_irq2_on = data & 0xff;
+ machine().bookkeeping().coin_lockout_w(1, state);
+}
- if (ACCESSING_BITS_8_15)
- machine().bookkeeping().coin_lockout_w(0, data & 0x0100);
+WRITE_LINE_MEMBER(nemesis_state::sound_irq_w)
+{
+ if (state)
+ m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
@@ -286,12 +272,8 @@ static ADDRESS_MAP_START( nemesis_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
AM_RANGE(0x05cc06, 0x05cc07) AM_READ_PORT("TEST")
- AM_RANGE(0x05e000, 0x05e001) AM_WRITE(nemesis_irq_enable_word_w)
- AM_RANGE(0x05e002, 0x05e003) AM_WRITENOP /* not used irq */
- AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
- AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
- AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* not used irq */
- AM_RANGE(0x05e00e, 0x05e00f) AM_WRITENOP /* not used irq */
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */
ADDRESS_MAP_END
@@ -320,12 +302,8 @@ static ADDRESS_MAP_START( gx400_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x05cc00, 0x05cc01) AM_READ_PORT("IN0")
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
- AM_RANGE(0x05e000, 0x05e001) AM_WRITE(gx400_irq2_enable_word_w) /* ?? */
- AM_RANGE(0x05e002, 0x05e003) AM_WRITE(gx400_irq1_enable_word_w) /* ?? */
- AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
- AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
- AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* IRQ acknowledge??? */
- AM_RANGE(0x05e00e, 0x05e00f) AM_WRITE(gx400_irq4_enable_word_w) /* ?? */
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
AM_RANGE(0x060000, 0x07ffff) AM_RAM /* WORK RAM */
AM_RANGE(0x080000, 0x0bffff) AM_ROM
ADDRESS_MAP_END
@@ -352,12 +330,8 @@ static ADDRESS_MAP_START( konamigt_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
AM_RANGE(0x05cc06, 0x05cc07) AM_READ_PORT("TEST")
- AM_RANGE(0x05e000, 0x05e001) AM_WRITE(konamigt_irq2_enable_word_w)
- AM_RANGE(0x05e002, 0x05e003) AM_WRITE(konamigt_irq_enable_word_w)
- AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
- AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
- AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* not used irq */
- AM_RANGE(0x05e00e, 0x05e00f) AM_WRITENOP /* not used irq */
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */
AM_RANGE(0x070000, 0x070001) AM_READ(konamigt_input_word_r)
ADDRESS_MAP_END
@@ -386,12 +360,8 @@ static ADDRESS_MAP_START( rf2_gx400_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x05cc00, 0x05cc01) AM_READ_PORT("IN0")
AM_RANGE(0x05cc02, 0x05cc03) AM_READ_PORT("IN1")
AM_RANGE(0x05cc04, 0x05cc05) AM_READ_PORT("IN2")
- AM_RANGE(0x05e000, 0x05e001) AM_WRITE(gx400_irq2_enable_word_w) /* ?? */
- AM_RANGE(0x05e002, 0x05e003) AM_WRITE(gx400_irq1_enable_word_w) /* ?? */
- AM_RANGE(0x05e004, 0x05e005) AM_WRITE(nemesis_gfx_flipx_word_w)
- AM_RANGE(0x05e006, 0x05e007) AM_WRITE(nemesis_gfx_flipy_word_w)
- AM_RANGE(0x05e008, 0x05e009) AM_WRITENOP /* IRQ acknowledge??? */
- AM_RANGE(0x05e00e, 0x05e00f) AM_WRITE(gx400_irq4_enable_word_w) /* ?? */
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("outlatch", ls259_device, write_d0, 0xff00)
+ AM_RANGE(0x05e000, 0x05e00f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff)
AM_RANGE(0x060000, 0x067fff) AM_RAM /* WORK RAM */
AM_RANGE(0x070000, 0x070001) AM_READ(konamigt_input_word_r)
AM_RANGE(0x080000, 0x0bffff) AM_ROM
@@ -606,9 +576,7 @@ static ADDRESS_MAP_START( hcrash_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x0c0008, 0x0c0009) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) /* watchdog probably */
AM_RANGE(0x0c000a, 0x0c000b) AM_READ_PORT("IN0")
AM_RANGE(0x0c2000, 0x0c2001) AM_READ(konamigt_input_word_r) /* Konami GT control */
- AM_RANGE(0x0c2800, 0x0c2801) AM_WRITENOP
- AM_RANGE(0x0c2802, 0x0c2803) AM_WRITE(gx400_irq2_enable_word_w) // or at 0x0c2804 ?
- AM_RANGE(0x0c2804, 0x0c2805) AM_WRITENOP
+ AM_RANGE(0x0c2800, 0x0c280f) AM_DEVWRITE8("intlatch", ls259_device, write_d0, 0x00ff) // ???
AM_RANGE(0x0c4000, 0x0c4001) AM_READ_PORT("IN1") AM_WRITE(selected_ip_word_w)
AM_RANGE(0x0c4002, 0x0c4003) AM_READ(selected_ip_word_r) AM_WRITENOP /* WEC Le Mans 24 control. latches the value read previously */
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(nemesis_videoram2_word_w) AM_SHARE("videoram2") /* VRAM */
@@ -1468,9 +1436,6 @@ void nemesis_state::machine_start()
void nemesis_state::machine_reset()
{
m_irq_on = 0;
- m_irq1_on = 0;
- m_irq2_on = 0;
- m_irq4_on = 0;
m_gx400_irq1_cnt = 0;
m_frame_counter = 1;
m_selected_ip = 0;
@@ -1491,6 +1456,16 @@ static MACHINE_CONFIG_START( nemesis )
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* From schematics, should be accurate */
MCFG_CPU_PROGRAM_MAP(sound_map) /* fixed */
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // 13J
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(WRITELINE(nemesis_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
+
+ MCFG_DEVICE_ADD("intlatch", LS259, 0) // 11K
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -1548,6 +1523,18 @@ static MACHINE_CONFIG_START( gx400 )
MCFG_CPU_PROGRAM_MAP(gx400_sound_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ??
+
+ MCFG_DEVICE_ADD("intlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -1608,6 +1595,17 @@ static MACHINE_CONFIG_START( konamigt )
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */
MCFG_CPU_PROGRAM_MAP(sound_map)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
+
+ MCFG_DEVICE_ADD("intlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -1665,6 +1663,18 @@ static MACHINE_CONFIG_START( rf2_gx400 )
MCFG_CPU_PROGRAM_MAP(gx400_sound_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ??
+
+ MCFG_DEVICE_ADD("intlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -1922,6 +1932,11 @@ static MACHINE_CONFIG_START( hcrash )
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */
MCFG_CPU_PROGRAM_MAP(sal_sound_map)
+ MCFG_DEVICE_ADD("intlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // ?
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w)) // or at 0x0c2804 ?
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ?
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -2672,6 +2687,18 @@ static MACHINE_CONFIG_START( bubsys )
MCFG_CPU_PROGRAM_MAP(gx400_sound_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, sound_irq_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(nemesis_state, irq4_enable_w)) // ??
+
+ MCFG_DEVICE_ADD("intlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(nemesis_state, irq2_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(nemesis_state, irq1_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(nemesis_state, gfx_flipx_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(nemesis_state, gfx_flipy_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/orbit.cpp b/src/mame/drivers/orbit.cpp
index fe05f93004f..6006cf2ed83 100644
--- a/src/mame/drivers/orbit.cpp
+++ b/src/mame/drivers/orbit.cpp
@@ -39,7 +39,7 @@ Atari Orbit Driver
TIMER_DEVICE_CALLBACK_MEMBER(orbit_state::nmi_32v)
{
int scanline = param;
- int nmistate = (scanline & 32) && (m_misc_flags & 4);
+ int nmistate = (scanline & 32) && m_latch->q2_r();
m_maincpu->set_input_line(INPUT_LINE_NMI, nmistate ? ASSERT_LINE : CLEAR_LINE);
}
@@ -64,37 +64,23 @@ INTERRUPT_GEN_MEMBER(orbit_state::orbit_interrupt)
*
*************************************/
-void orbit_state::update_misc_flags(address_space &space, uint8_t val)
-{
- m_misc_flags = val;
-
- /* BIT0 => UNUSED */
- /* BIT1 => LOCKOUT */
- /* BIT2 => NMI ENABLE */
- /* BIT3 => HEAT RST LED */
- /* BIT4 => PANEL BUS OC */
- /* BIT5 => PANEL STROBE */
- /* BIT6 => HYPER LED */
- /* BIT7 => WARNING SND */
- m_discrete->write(space, ORBIT_WARNING_EN, BIT(m_misc_flags, 7));
+WRITE_LINE_MEMBER(orbit_state::coin_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, !state);
+ machine().bookkeeping().coin_lockout_w(1, !state);
+}
- output().set_led_value(0, BIT(m_misc_flags, 3));
- output().set_led_value(1, BIT(m_misc_flags, 6));
- machine().bookkeeping().coin_lockout_w(0, !BIT(m_misc_flags, 1));
- machine().bookkeeping().coin_lockout_w(1, !BIT(m_misc_flags, 1));
+WRITE_LINE_MEMBER(orbit_state::heat_rst_led_w)
+{
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(orbit_state::orbit_misc_w)
+WRITE_LINE_MEMBER(orbit_state::hyper_led_w)
{
- uint8_t bit = offset >> 1;
-
- if (offset & 1)
- update_misc_flags(space, m_misc_flags | (1 << bit));
- else
- update_misc_flags(space, m_misc_flags & ~(1 << bit));
+ output().set_led_value(1, state);
}
@@ -118,7 +104,7 @@ static ADDRESS_MAP_START( orbit_map, AS_PROGRAM, 8, orbit_state )
AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x00ff) AM_WRITE(orbit_note_w)
AM_RANGE(0x3900, 0x3900) AM_MIRROR(0x00ff) AM_WRITE(orbit_noise_amp_w)
AM_RANGE(0x3a00, 0x3a00) AM_MIRROR(0x00ff) AM_WRITE(orbit_note_amp_w)
- AM_RANGE(0x3c00, 0x3c0f) AM_MIRROR(0x00f0) AM_WRITE(orbit_misc_w)
+ AM_RANGE(0x3c00, 0x3c0f) AM_MIRROR(0x00f0) AM_DEVWRITE("latch", f9334_device, write_a0)
AM_RANGE(0x3e00, 0x3e00) AM_MIRROR(0x00ff) AM_WRITE(orbit_noise_rst_w)
AM_RANGE(0x3f00, 0x3f00) AM_MIRROR(0x00ff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x6000, 0x7fff) AM_ROM
@@ -274,13 +260,11 @@ GFXDECODE_END
void orbit_state::machine_start()
{
- save_item(NAME(m_misc_flags));
save_item(NAME(m_flip_screen));
}
void orbit_state::machine_reset()
{
- update_misc_flags(generic_space(), 0);
m_flip_screen = 0;
}
@@ -300,6 +284,20 @@ static MACHINE_CONFIG_START( orbit )
MCFG_TIMER_DRIVER_ADD_SCANLINE("32v", orbit_state, nmi_32v, "screen", 0, 32)
+ MCFG_DEVICE_ADD("latch", F9334, 0) // M6
+ /* BIT0 => UNUSED */
+ /* BIT1 => LOCKOUT */
+ /* BIT2 => NMI ENABLE */
+ /* BIT3 => HEAT RST LED */
+ /* BIT4 => PANEL BUS OC */
+ /* BIT5 => PANEL STROBE */
+ /* BIT6 => HYPER LED */
+ /* BIT7 => WARNING SND */
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(orbit_state, coin_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(orbit_state, heat_rst_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(orbit_state, hyper_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ORBIT_WARNING_EN>))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp
index c012fbe91b5..f42fee085f0 100644
--- a/src/mame/drivers/pacman.cpp
+++ b/src/mame/drivers/pacman.cpp
@@ -345,7 +345,7 @@ Boards:
#include "cpu/s2650/s2650.h"
#include "cpu/z80/z80.h"
#include "machine/nvram.h"
-#include "machine/watchdog.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "sound/sn76496.h"
#include "screen.h"
@@ -415,9 +415,9 @@ INTERRUPT_GEN_MEMBER(pacman_state::vblank_nmi)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
-WRITE8_MEMBER(pacman_state::irq_mask_w)
+WRITE_LINE_MEMBER(pacman_state::irq_mask_w)
{
- m_irq_mask = data & 1;
+ m_irq_mask = state;
}
WRITE8_MEMBER(pacman_state::pacman_interrupt_vector_w)
@@ -507,21 +507,27 @@ WRITE8_MEMBER(pacman_state::nmouse_interrupt_vector_w)
*
*************************************/
-WRITE8_MEMBER(pacman_state::pacman_leds_w)
+WRITE_LINE_MEMBER(pacman_state::led1_w)
{
- output().set_led_value(offset,data & 1);
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(pacman_state::pacman_coin_counter_w)
+WRITE_LINE_MEMBER(pacman_state::led2_w)
{
- machine().bookkeeping().coin_counter_w(offset,data & 1);
+ output().set_led_value(1, state);
}
-WRITE8_MEMBER(pacman_state::pacman_coin_lockout_global_w)
+WRITE_LINE_MEMBER(pacman_state::coin_counter_w)
{
- machine().bookkeeping().coin_lockout_global_w(~data & 0x01);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(pacman_state::coin_lockout_global_w)
+{
+ machine().bookkeeping().coin_lockout_global_w(!state);
}
@@ -971,13 +977,7 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", addressable_latch_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -988,8 +988,6 @@ static ADDRESS_MAP_START( pacman_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1")
AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2")
ADDRESS_MAP_END
-// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not
-// exist on any Pacman or Puckman board I have seen. DW
static ADDRESS_MAP_START( patched_opcodes_map, AS_OPCODES, 8, pacman_state )
AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM AM_SHARE("patched_opcodes")
@@ -1003,13 +1001,7 @@ static ADDRESS_MAP_START( birdiy_map, AS_PROGRAM, 8, pacman_state )
// AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
-// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
-// AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
-// AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
-// AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5080, 0x509f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x50a0, 0x50af) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
// AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1028,13 +1020,7 @@ static ADDRESS_MAP_START( mspacman_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1068,13 +1054,7 @@ static ADDRESS_MAP_START( woodpek_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1101,13 +1081,7 @@ static ADDRESS_MAP_START( numcrash_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4c00, 0x4fef) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
-// AM_RANGE(0x5002, 0x5002) AM_WRITENOP
-// AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
-// AM_RANGE(0x5004, 0x5005) AM_WRITENOP // AM_WRITE(pacman_leds_w)
-// AM_RANGE(0x5006, 0x5006) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
-// AM_RANGE(0x5007, 0x5007) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_WRITEONLY AM_SHARE("spriteram2")
// AM_RANGE(0x5070, 0x507f) AM_WRITENOP
@@ -1129,17 +1103,12 @@ static ADDRESS_MAP_START( alibaba_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4ef0, 0x4eff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x4f00, 0x4fff) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("latch1", ls259_device, write_d0)
AM_RANGE(0x5040, 0x506f) AM_MIRROR(0xaf00) AM_WRITE(alibaba_sound_w) /* the sound region is not contiguous */
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") /* actually at 5050-505f, here to point to free RAM */
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP
- AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x50c1, 0x50c1) AM_MIRROR(0xaf00) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x50c2, 0x50c2) AM_MIRROR(0xaf00) AM_WRITE(irq_mask_w)
- AM_RANGE(0x50c3, 0x50ff) AM_MIRROR(0xaf00) AM_WRITENOP
+ AM_RANGE(0x50c0, 0x50c7) AM_MIRROR(0xaf00) AM_DEVWRITE("latch2", ls259_device, write_d0)
AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0")
AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1")
AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1")
@@ -1158,13 +1127,7 @@ static ADDRESS_MAP_START( dremshpr_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x4800, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
-// AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP /* unknown */
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
// AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1189,13 +1152,7 @@ static ADDRESS_MAP_START( epos_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1216,10 +1173,7 @@ static ADDRESS_MAP_START( s2650games_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x1490, 0x149f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("s2650_spriteram")
AM_RANGE(0x14a0, 0x14bf) AM_MIRROR(0x6000) AM_WRITE(s2650games_tilesbank_w) AM_SHARE("s2650_tileram")
AM_RANGE(0x14c0, 0x14ff) AM_MIRROR(0x6000) AM_WRITEONLY
- AM_RANGE(0x1500, 0x1502) AM_MIRROR(0x6000) AM_WRITENOP
- AM_RANGE(0x1503, 0x1503) AM_MIRROR(0x6000) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x1504, 0x1506) AM_MIRROR(0x6000) AM_WRITENOP
- AM_RANGE(0x1507, 0x1507) AM_MIRROR(0x6000) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x1500, 0x1507) AM_MIRROR(0x6000) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x1508, 0x155f) AM_MIRROR(0x6000) AM_WRITEONLY
AM_RANGE(0x1560, 0x156f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x1570, 0x157f) AM_MIRROR(0x6000) AM_WRITEONLY
@@ -1243,10 +1197,7 @@ static ADDRESS_MAP_START( rocktrv2_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x4c00, 0x4fff) AM_RAM
- AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5007, 0x5007) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x5fe0, 0x5fe3) AM_WRITE(rocktrv2_prot_data_w) AM_SHARE("rocktrv2_prot")
@@ -1270,10 +1221,7 @@ static ADDRESS_MAP_START( bigbucks_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x4c00, 0x4fff) AM_RAM
- AM_RANGE(0x5000, 0x5000) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5003, 0x5003) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5007, 0x5007) AM_WRITENOP /*?*/
+ AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x5000, 0x503f) AM_READ_PORT("IN0")
@@ -1293,13 +1241,7 @@ static ADDRESS_MAP_START( mschamp_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1319,12 +1261,8 @@ static ADDRESS_MAP_START( superabc_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x4800, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("28c16.u17") // nvram
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf3c) AM_WRITE(superabc_bank_w)
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1346,13 +1284,7 @@ static ADDRESS_MAP_START( crushs_map, AS_PROGRAM, 8, pacman_state )
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM
AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_WRITE(irq_mask_w)
- AM_RANGE(0x5001, 0x5001) AM_MIRROR(0xaf38) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf38) AM_WRITENOP
- AM_RANGE(0x5003, 0x5003) AM_MIRROR(0xaf38) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x5004, 0x5005) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x5006, 0x5006) AM_MIRROR(0xaf38) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x5007, 0x5007) AM_MIRROR(0xaf38) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_WRITENOP // doesn't use pacman sound hw
AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP
@@ -1376,13 +1308,7 @@ static ADDRESS_MAP_START( pengojpm_map, AS_PROGRAM, 8, pacman_state )
// AM_RANGE(0x8800, 0x8bff) AM_READ(pacman_read_nop) AM_WRITENOP
AM_RANGE(0x8c00, 0x8fef) AM_RAM
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x9000, 0x9000) AM_WRITE(irq_mask_w)
- AM_RANGE(0x9001, 0x9001) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x9002, 0x9002) AM_WRITENOP
- AM_RANGE(0x9003, 0x9003) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x9004, 0x9005) AM_WRITENOP // AM_WRITE(pacman_leds_w)
- AM_RANGE(0x9006, 0x9006) AM_WRITENOP // AM_WRITE(pacman_coin_lockout_global_w)
- AM_RANGE(0x9007, 0x9007) AM_WRITE(pacman_coin_counter_w)
+ AM_RANGE(0x9000, 0x9007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x9040, 0x905f) AM_DEVWRITE("namco", namco_device, pacman_sound_w)
AM_RANGE(0x9060, 0x906f) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x9070, 0x907f) AM_WRITENOP
@@ -3551,6 +3477,17 @@ static MACHINE_CONFIG_START( pacman )
MCFG_CPU_IO_MAP(writeport)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pacman_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 74LS259 at 8K or 4099 at 7K
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pacman_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
+ //MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w))
+ //MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w))
+ //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
+// The Pacman code uses $5004 and $5005 for LED's and $5007 for coin lockout. This hardware does not
+// exist on any Pacman or Puckman board I have seen. DW
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 16)
@@ -3575,9 +3512,12 @@ static MACHINE_CONFIG_START( pacman )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( pacmanp, pacman )
+static MACHINE_CONFIG_DERIVED( maketrax, pacman )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_DECRYPTED_OPCODES_MAP(patched_opcodes_map)
+
+ MCFG_DEVICE_MODIFY("mainlatch") // 8K on original boards
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // outputs 4-7 go to protection chip at 6P
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pengojpm, pacman )
@@ -3593,6 +3533,15 @@ static MACHINE_CONFIG_DERIVED( birdiy, pacman )
MCFG_CPU_PROGRAM_MAP(birdiy_map)
MCFG_CPU_IO_MAP(0)
+ MCFG_DEVICE_REPLACE("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(pacman_state, irq_mask_w))
+ //MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
+ //MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w))
+ //MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w))
+ //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
+
MCFG_VIDEO_START_OVERRIDE(pacman_state,birdiy)
MACHINE_CONFIG_END
@@ -3620,6 +3569,9 @@ static MACHINE_CONFIG_DERIVED( mspacman, pacman )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(mspacman_map)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
MACHINE_CONFIG_END
@@ -3635,6 +3587,10 @@ static MACHINE_CONFIG_DERIVED( numcrash, pacman )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(numcrash_map)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // ???
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // ???
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( alibaba, pacman )
@@ -3642,6 +3598,17 @@ static MACHINE_CONFIG_DERIVED( alibaba, pacman )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(alibaba_map)
+
+ MCFG_DEVICE_REMOVE("mainlatch")
+ MCFG_DEVICE_ADD("latch1", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pacman_state, led1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pacman_state, led2_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pacman_state, coin_lockout_global_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
+ MCFG_DEVICE_ADD("latch2", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pacman_state, irq_mask_w))
MACHINE_CONFIG_END
@@ -3657,6 +3624,9 @@ static MACHINE_CONFIG_DERIVED( dremshpr, pacman )
MCFG_DEVICE_REMOVE("namco")
MCFG_SOUND_ADD("ay8910", AY8910, 14318000/8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP)
MACHINE_CONFIG_END
@@ -3716,6 +3686,9 @@ static MACHINE_CONFIG_DERIVED( vanvan, pacman )
MCFG_SOUND_ADD("sn2", SN76496, 1789750)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP)
MACHINE_CONFIG_END
@@ -3729,6 +3702,9 @@ static MACHINE_CONFIG_DERIVED( bigbucks, pacman )
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
+
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) /*?*/
MACHINE_CONFIG_END
@@ -3742,6 +3718,16 @@ static MACHINE_CONFIG_DERIVED( s2650games, pacman )
MCFG_CPU_VBLANK_INT_DRIVER("screen", pacman_state, s2650_interrupt)
MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pacman_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pacman_state, coin_counter_w))
+
MCFG_GFXDECODE_MODIFY("gfxdecode", s2650games)
MCFG_SCREEN_MODIFY("screen")
@@ -7330,20 +7316,20 @@ GAME( 1985, jumpshotp,jumpshot, pacman, jumpshotp,pacman_state, jumpshot, ROT
GAME( 1985, shootbul, 0, pacman, shootbul, pacman_state, jumpshot, ROT90, "Bally Midway", "Shoot the Bull", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, crush, 0, pacmanp, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, crush, 0, maketrax, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Samno Electric, Ltd.", "Crush Roller (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, crush2, crush, pacman, maketrax, pacman_state, 0, ROT90, "Alpha Denshi Co. / Kural Esco Electric, Ltd.", "Crush Roller (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, crush3, crush, pacmanp, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, crush3, crush, maketrax, maketrax, pacman_state, maketrax, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, crush4, crush, pacman, maketrax, pacman_state, eyes, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Crush Roller (set 4)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, crush5, crush, crush4, crush4, pacman_state, 0, ROT90, "Alpha Denshi Co. / Kural TWT", "Crush Roller (set 5)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, maketrax, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, maketrxb, crush, pacmanp, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, korosuke, crush, pacmanp, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel?
+GAME( 1981, maketrax, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, maketrxb, crush, maketrax, maketrax, pacman_state, maketrax, ROT270, "Alpha Denshi Co. / Kural (Williams license)", "Make Trax (US set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, korosuke, crush, maketrax, korosuke, pacman_state, korosuke, ROT90, "Alpha Denshi Co. / Kural Electric, Ltd.", "Korosuke Roller (Japan)", MACHINE_SUPPORTS_SAVE ) // ADK considers it a sequel?
GAME( 1981, crushrlf, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (Famaresa PCB)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, crushbl, crush, pacman, maketrax, pacman_state, 0, ROT90, "bootleg", "Crush Roller (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, crushbl2, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, crushbl3, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, crushbl2, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, crushbl3, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg", "Crush Roller (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, crushs, crush, crushs, crushs, pacman_state, 0, ROT90, "bootleg (Sidam)", "Crush Roller (bootleg set 4)", MACHINE_SUPPORTS_SAVE ) // Sidam PCB, no Sidam text
-GAME( 1981, mbrush, crush, pacmanp, mbrush, pacman_state, maketrax, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, mbrush, crush, maketrax, mbrush, pacman_state, maketrax, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, paintrlr, crush, pacman, paintrlr, pacman_state, 0, ROT90, "bootleg", "Paint Roller (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, eyes, 0, pacman, eyes, pacman_state, eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 1)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pandoras.cpp b/src/mame/drivers/pandoras.cpp
index 00a0e1d2ddb..8960cafab98 100644
--- a/src/mame/drivers/pandoras.cpp
+++ b/src/mame/drivers/pandoras.cpp
@@ -30,6 +30,7 @@ Boards:
#include "cpu/m6809/m6809.h"
#include "cpu/mcs48/mcs48.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -46,49 +47,27 @@ Boards:
INTERRUPT_GEN_MEMBER(pandoras_state::pandoras_master_interrupt)
{
if (m_irq_enable_a)
- device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE);
+ device.execute().set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
}
INTERRUPT_GEN_MEMBER(pandoras_state::pandoras_slave_interrupt)
{
if (m_irq_enable_b)
- device.execute().set_input_line(M6809_IRQ_LINE, HOLD_LINE);
+ device.execute().set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
}
-WRITE8_MEMBER(pandoras_state::pandoras_int_control_w)
+WRITE_LINE_MEMBER(pandoras_state::cpua_irq_enable_w)
{
- /* byte 0: irq enable (CPU A)
- byte 2: coin counter 1
- byte 3: coin counter 2
- byte 5: flip screen
- byte 6: irq enable (CPU B)
- byte 7: NMI to CPU B
-
- other bytes unknown */
-
-
- switch (offset)
- {
- case 0x00: if (!data)
- m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
- m_irq_enable_a = data;
- break;
- case 0x02: machine().bookkeeping().coin_counter_w(0,data & 0x01);
- break;
- case 0x03: machine().bookkeeping().coin_counter_w(1,data & 0x01);
- break;
- case 0x05: pandoras_flipscreen_w(space, 0, data);
- break;
- case 0x06: if (!data)
- m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
- m_irq_enable_b = data;
- break;
- case 0x07: m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
- break;
-
- default: logerror("%04x: (irq_ctrl) write %02x to %02x\n",space.device().safe_pc(), data, offset);
- break;
- }
+ if (!state)
+ m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
+ m_irq_enable_a = state;
+}
+
+WRITE_LINE_MEMBER(pandoras_state::cpub_irq_enable_w)
+{
+ if (!state)
+ m_subcpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
+ m_irq_enable_b = state;
}
WRITE8_MEMBER(pandoras_state::pandoras_cpua_irqtrigger_w)
@@ -127,13 +106,22 @@ WRITE8_MEMBER(pandoras_state::pandoras_z80_irqtrigger_w)
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
}
+WRITE_LINE_MEMBER(pandoras_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(pandoras_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
static ADDRESS_MAP_START( pandoras_master_map, AS_PROGRAM, 8, pandoras_state )
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("spriteram") /* Work RAM (Shared with CPU B) */
AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(pandoras_cram_w) AM_SHARE("colorram") /* Color RAM (shared with CPU B) */
AM_RANGE(0x1400, 0x17ff) AM_RAM_WRITE(pandoras_vram_w) AM_SHARE("videoram") /* Video RAM (shared with CPU B) */
- AM_RANGE(0x1800, 0x1807) AM_WRITE(pandoras_int_control_w) /* INT control */
+ AM_RANGE(0x1800, 0x1807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) /* INT control */
AM_RANGE(0x1a00, 0x1a00) AM_WRITE(pandoras_scrolly_w) /* bg scroll */
AM_RANGE(0x1c00, 0x1c00) AM_WRITE(pandoras_z80_irqtrigger_w) /* cause INT on the Z80 */
AM_RANGE(0x1e00, 0x1e00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound command to the Z80 */
@@ -149,7 +137,7 @@ static ADDRESS_MAP_START( pandoras_slave_map, AS_PROGRAM, 8, pandoras_state )
AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(pandoras_cram_w) AM_SHARE("colorram") /* Color RAM (shared with CPU A) */
AM_RANGE(0x1400, 0x17ff) AM_RAM_WRITE(pandoras_vram_w) AM_SHARE("videoram") /* Video RAM (shared with CPU A) */
AM_RANGE(0x1800, 0x1800) AM_READ_PORT("DSW1")
- AM_RANGE(0x1800, 0x1807) AM_WRITE(pandoras_int_control_w) /* INT control */
+ AM_RANGE(0x1800, 0x1807) AM_DEVWRITE("mainlatch", ls259_device, write_d0) /* INT control */
AM_RANGE(0x1a00, 0x1a00) AM_READ_PORT("SYSTEM")
AM_RANGE(0x1a01, 0x1a01) AM_READ_PORT("P1")
AM_RANGE(0x1a02, 0x1a02) AM_READ_PORT("P2")
@@ -304,11 +292,7 @@ void pandoras_state::machine_reset()
{
m_firq_old_data_a = 0;
m_firq_old_data_b = 0;
- m_irq_enable_a = 0;
- m_irq_enable_b = 0;
m_i8039_status = 0;
-
- m_flipscreen = 0;
}
READ8_MEMBER(pandoras_state::pandoras_portA_r)
@@ -343,6 +327,15 @@ static MACHINE_CONFIG_START( pandoras )
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - needed for correct synchronization of the sound CPUs */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C3
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pandoras_state, cpua_irq_enable_w)) // ENA
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // OFSET - unknown
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pandoras_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pandoras_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pandoras_state, flipscreen_w)) // FLIP
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pandoras_state, cpub_irq_enable_w)) // ENB
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(INPUTLINE("sub", INPUT_LINE_NMI)) MCFG_DEVCB_INVERT // RESETB
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/pengo.cpp b/src/mame/drivers/pengo.cpp
index 923150fbe72..4157f5c89a2 100644
--- a/src/mame/drivers/pengo.cpp
+++ b/src/mame/drivers/pengo.cpp
@@ -67,6 +67,7 @@
#include "includes/pacman.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/segacrpt_device.h"
#include "screen.h"
#include "speaker.h"
@@ -77,8 +78,9 @@ class pengo_state : public pacman_state
public:
pengo_state(const machine_config &mconfig, device_type type, const char *tag)
: pacman_state(mconfig, type, tag), m_decrypted_opcodes(*this, "decrypted_opcodes") { }
- DECLARE_WRITE8_MEMBER(pengo_coin_counter_w);
- DECLARE_WRITE8_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
DECLARE_DRIVER_INIT(penta);
INTERRUPT_GEN_MEMBER(vblank_irq);
@@ -115,14 +117,19 @@ public:
*
*************************************/
-WRITE8_MEMBER(pengo_state::pengo_coin_counter_w)
+WRITE_LINE_MEMBER(pengo_state::coin_counter_1_w)
{
- machine().bookkeeping().coin_counter_w(offset, data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(pengo_state::irq_mask_w)
+WRITE_LINE_MEMBER(pengo_state::coin_counter_2_w)
{
- m_irq_mask = data & 1;
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(pengo_state::irq_mask_w)
+{
+ m_irq_mask = state;
}
static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
@@ -135,14 +142,8 @@ static ADDRESS_MAP_START( pengo_map, AS_PROGRAM, 8, pengo_state )
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x9000, 0x903f) AM_READ_PORT("DSW1")
AM_RANGE(0x9040, 0x907f) AM_READ_PORT("DSW0")
- AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
- AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
- AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x9044, 0x9045) AM_WRITE(pengo_coin_counter_w)
- AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w)
- AM_RANGE(0x9047, 0x9047) AM_WRITE(pengo_gfxbank_w)
- AM_RANGE(0x9070, 0x9070) AM_WRITENOP
+ AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0)
+ AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("IN1")
AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("IN0")
ADDRESS_MAP_END
@@ -164,15 +165,8 @@ static ADDRESS_MAP_START( jrpacmbl_map, AS_PROGRAM, 8, pengo_state )
AM_RANGE(0x9020, 0x902f) AM_WRITEONLY AM_SHARE("spriteram2")
AM_RANGE(0x9030, 0x9030) AM_WRITE(jrpacman_scroll_w)
AM_RANGE(0x9040, 0x904f) AM_READ_PORT("DSW")
- AM_RANGE(0x9040, 0x9040) AM_WRITE(irq_mask_w)
- AM_RANGE(0x9041, 0x9041) AM_DEVWRITE("namco", namco_device, pacman_sound_enable_w)
- AM_RANGE(0x9042, 0x9042) AM_WRITE(pengo_palettebank_w)
- AM_RANGE(0x9043, 0x9043) AM_WRITE(pacman_flipscreen_w)
- AM_RANGE(0x9044, 0x9044) AM_WRITE(jrpacman_bgpriority_w)
- AM_RANGE(0x9045, 0x9045) AM_WRITE(jrpacman_spritebank_w)
- AM_RANGE(0x9046, 0x9046) AM_WRITE(pengo_colortablebank_w)
- AM_RANGE(0x9047, 0x9047) AM_WRITE(jrpacman_charbank_w)
- AM_RANGE(0x9070, 0x9070) AM_WRITENOP
+ AM_RANGE(0x9040, 0x9047) AM_DEVWRITE("latch", ls259_device, write_d0)
+ AM_RANGE(0x9070, 0x9070) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x9080, 0x90bf) AM_READ_PORT("P2")
AM_RANGE(0x90c0, 0x90ff) AM_READ_PORT("P1")
ADDRESS_MAP_END
@@ -380,6 +374,18 @@ static MACHINE_CONFIG_START( pengo )
MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pengo_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // U27
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pengo_state, irq_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("namco", namco_device, pacman_sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(pengo_state, pengo_palettebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pengo_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(pengo_state, pengo_colortablebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, pengo_gfxbank_w))
+
+ MCFG_WATCHDOG_ADD("watchdog")
+
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", pengo)
MCFG_PALETTE_ADD("palette", 128*4)
@@ -422,6 +428,11 @@ static MACHINE_CONFIG_DERIVED( jrpacmbl, pengo )
MCFG_CPU_PROGRAM_MAP(jrpacmbl_map)
MCFG_DEVICE_REMOVE_ADDRESS_MAP(AS_OPCODES)
+ MCFG_DEVICE_MODIFY("latch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pengo_state, jrpacman_bgpriority_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(pengo_state, jrpacman_spritebank_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pengo_state, jrpacman_charbank_w))
+
MCFG_VIDEO_START_OVERRIDE(pengo_state,jrpacman)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/playch10.cpp b/src/mame/drivers/playch10.cpp
index d95cb1697e5..a50b4fecb06 100644
--- a/src/mame/drivers/playch10.cpp
+++ b/src/mame/drivers/playch10.cpp
@@ -296,6 +296,7 @@ Notes & Todo:
#include "cpu/m6502/n2a03.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/rp5h01.h"
#include "machine/nvram.h"
@@ -307,9 +308,9 @@ Notes & Todo:
/******************************************************************************/
-WRITE8_MEMBER(playch10_state::up8w_w)
+WRITE_LINE_MEMBER(playch10_state::up8w_w)
{
- m_up_8w = data & 1;
+ m_up_8w = state;
}
READ8_MEMBER(playch10_state::ram_8w_r)
@@ -361,18 +362,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( bios_io_map, AS_IO, 8, playch10_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ_PORT("BIOS") AM_WRITE(pc10_SDCS_w)
- AM_RANGE(0x01, 0x01) AM_READ_PORT("SW1") AM_WRITE(pc10_CNTRLMASK_w)
- AM_RANGE(0x02, 0x02) AM_READ_PORT("SW2") AM_WRITE(pc10_DISPMASK_w)
- AM_RANGE(0x03, 0x03) AM_READWRITE(pc10_detectclr_r, pc10_SOUNDMASK_w)
- AM_RANGE(0x04, 0x04) AM_WRITE(pc10_GAMERES_w)
- AM_RANGE(0x05, 0x05) AM_WRITE(pc10_GAMESTOP_w)
- AM_RANGE(0x06, 0x07) AM_WRITENOP
- AM_RANGE(0x08, 0x08) AM_WRITE(pc10_NMIENABLE_w)
- AM_RANGE(0x09, 0x09) AM_WRITE(pc10_DOGDI_w)
- AM_RANGE(0x0a, 0x0a) AM_WRITE(pc10_PPURES_w)
- AM_RANGE(0x0b, 0x0e) AM_WRITE(pc10_CARTSEL_w)
- AM_RANGE(0x0f, 0x0f) AM_WRITE(up8w_w)
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("BIOS")
+ AM_RANGE(0x01, 0x01) AM_READ_PORT("SW1")
+ AM_RANGE(0x02, 0x02) AM_READ_PORT("SW2")
+ AM_RANGE(0x03, 0x03) AM_READ(pc10_detectclr_r)
+ AM_RANGE(0x00, 0x07) AM_DEVWRITE("outlatch1", ls259_device, write_d0)
+ AM_RANGE(0x08, 0x0f) AM_DEVWRITE("outlatch2", ls259_device, write_d0)
AM_RANGE(0x10, 0x13) AM_WRITE(time_w) AM_SHARE("timedata")
ADDRESS_MAP_END
@@ -655,6 +650,20 @@ static MACHINE_CONFIG_START( playch10 )
MCFG_CPU_ADD("cart", N2A03, NTSC_APU_CLOCK)
MCFG_CPU_PROGRAM_MAP(cart_map)
+ MCFG_DEVICE_ADD("outlatch1", LS259, 0) // 7D
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(playch10_state, SDCS_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(playch10_state, CNTRLMASK_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(playch10_state, DISPMASK_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(playch10_state, SOUNDMASK_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("cart", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // GAMERES
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("cart", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT // GAMESTOP
+
+ MCFG_DEVICE_ADD("outlatch2", LS259, 0) // 7E
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(playch10_state, NMIENABLE_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(playch10_state, DOGDI_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(playch10_state, PPURES_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(playch10_state, up8w_w))
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(playch10_state, CARTSEL_w)) MCFG_DEVCB_MASK(0x78) MCFG_DEVCB_RSHIFT(-3)
// video hardware
MCFG_GFXDECODE_ADD("gfxdecode", "palette", playch10)
diff --git a/src/mame/drivers/polepos.cpp b/src/mame/drivers/polepos.cpp
index 7d410d2755b..b6fb9589818 100644
--- a/src/mame/drivers/polepos.cpp
+++ b/src/mame/drivers/polepos.cpp
@@ -225,6 +225,7 @@ Todo:
#include "cpu/z80/z80.h"
#include "cpu/z8000/z8000.h"
#include "cpu/mb88xx/mb88xx.h"
+#include "machine/74259.h"
#include "machine/namco06.h"
#include "machine/namco51.h"
#include "machine/namco53.h"
@@ -289,53 +290,36 @@ READ8_MEMBER(polepos_state::polepos_ready_r)
}
-WRITE8_MEMBER(polepos_state::polepos_latch_w)
+WRITE_LINE_MEMBER(polepos_state::iosel_w)
{
- int bit = data & 1;
+// polepos_mcu_enable_w(offset,data);
+}
- switch (offset)
+WRITE_LINE_MEMBER(polepos_state::clson_w)
+{
+ m_namco_sound->polepos_sound_enable(state);
+ if (!state)
{
- case 0x00: /* IRQON */
- m_main_irq_mask = bit;
- if (!bit)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
-
- case 0x01: /* IOSEL */
-// polepos_mcu_enable_w(offset,data);
- break;
-
- case 0x02: /* CLSON */
- m_namco_sound->polepos_sound_enable(bit);
- if (!bit)
- {
- machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_lsb_w(space, 0, 0);
- machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_msb_w(space, 0, 0);
- }
- break;
-
- case 0x03: /* GASEL */
- m_adc_input = bit;
- break;
-
- case 0x04: /* RESB */
- m_subcpu->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
- break;
-
- case 0x05: /* RESA */
- m_subcpu2->set_input_line(INPUT_LINE_RESET, bit ? CLEAR_LINE : ASSERT_LINE);
- break;
-
- case 0x06: /* SB0 */
- m_auto_start_mask = !bit;
- break;
-
- case 0x07: /* CHACL */
- polepos_chacl_w(space,offset,data);
- break;
+ machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_lsb_w(machine().dummy_space(), 0, 0);
+ machine().device<polepos_sound_device>("polepos")->polepos_engine_sound_msb_w(machine().dummy_space(), 0, 0);
}
}
+WRITE_LINE_MEMBER(polepos_state::gasel_w)
+{
+ m_adc_input = state;
+}
+
+WRITE_LINE_MEMBER(polepos_state::sb0_w)
+{
+ m_auto_start_mask = !state;
+}
+
+WRITE_LINE_MEMBER(polepos_state::chacl_w)
+{
+ polepos_chacl_w(machine().dummy_space(), 0, state);
+}
+
WRITE16_MEMBER(polepos_state::polepos_z8002_nvi_enable_w)
{
data &= 1;
@@ -414,7 +398,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(polepos_state::polepos_scanline)
{
int scanline = param;
- if (((scanline == 64) || (scanline == 192)) && m_main_irq_mask) // 64V
+ if (((scanline == 64) || (scanline == 192)) && m_latch->q0_r()) // 64V
m_maincpu->set_input_line(0, ASSERT_LINE);
if (scanline == 240 && m_sub_irq_mask) // VBLANK
@@ -427,13 +411,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(polepos_state::polepos_scanline)
MACHINE_RESET_MEMBER(polepos_state,polepos)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- int i;
-
- /* Reset all latches */
- for (i = 0; i < 8; i++)
- polepos_latch_w(space, i, 0);
-
/* set the interrupt vectors (this shouldn't be needed) */
m_subcpu->set_input_line_vector(0, Z8000_NVI);
m_subcpu2->set_input_line_vector(0, Z8000_NVI);
@@ -459,7 +436,7 @@ static ADDRESS_MAP_START( z80_map, AS_PROGRAM, 8, polepos_state )
AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0eff) AM_DEVREADWRITE("06xx", namco_06xx_device, data_r, data_w)
AM_RANGE(0x9100, 0x9100) AM_MIRROR(0x0eff) AM_DEVREADWRITE("06xx", namco_06xx_device, ctrl_r, ctrl_w)
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x0cff) AM_READ(polepos_ready_r) /* READY */
- AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0cf8) AM_WRITE(polepos_latch_w) /* misc latches */
+ AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0cf8) AM_DEVWRITE("latch", ls259_device, write_d0)
AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x0cff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xa200, 0xa200) AM_MIRROR(0x0cff) AM_DEVWRITE("polepos", polepos_sound_device, polepos_engine_sound_lsb_w) /* Car Sound ( Lower Nibble ) */
AM_RANGE(0xa300, 0xa300) AM_MIRROR(0x0cff) AM_DEVWRITE("polepos", polepos_sound_device, polepos_engine_sound_msb_w) /* Car Sound ( Upper Nibble ) */
@@ -920,6 +897,16 @@ static MACHINE_CONFIG_START( polepos )
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, polepos_scanline, "screen", 0, 1)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // at 8E on polepos
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE("maincpu", 0)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(polepos_state, iosel_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(polepos_state, clson_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(polepos_state, gasel_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(polepos_state, sb0_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(polepos_state, chacl_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16)
@@ -1018,6 +1005,16 @@ static MACHINE_CONFIG_START( topracern )
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", polepos_state, polepos_scanline, "screen", 0, 1)
+ MCFG_DEVICE_ADD("latch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(CLEARLINE("maincpu", 0)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(polepos_state, iosel_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(polepos_state, clson_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(polepos_state, gasel_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub2", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(polepos_state, sb0_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(polepos_state, chacl_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4, 384, 0, 256, 264, 16, 224+16)
diff --git a/src/mame/drivers/pooyan.cpp b/src/mame/drivers/pooyan.cpp
index 82c45d20b92..faa5493408f 100644
--- a/src/mame/drivers/pooyan.cpp
+++ b/src/mame/drivers/pooyan.cpp
@@ -16,6 +16,7 @@
#include "audio/timeplt.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "screen.h"
@@ -37,14 +38,26 @@ INTERRUPT_GEN_MEMBER(pooyan_state::interrupt)
}
-WRITE8_MEMBER(pooyan_state::irq_enable_w)
+WRITE_LINE_MEMBER(pooyan_state::irq_enable_w)
{
- m_irq_enable = data & 1;
+ m_irq_enable = state;
if (!m_irq_enable)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
+WRITE_LINE_MEMBER(pooyan_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(pooyan_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+
/*************************************
*
* Memory maps
@@ -65,10 +78,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pooyan_state )
AM_RANGE(0xa0e0, 0xa0e0) AM_MIRROR(0x5e1f) AM_READ_PORT("DSW0")
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x5e7f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xa100, 0xa100) AM_MIRROR(0x5e7f) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
- AM_RANGE(0xa180, 0xa180) AM_MIRROR(0x5e78) AM_WRITE(irq_enable_w)
- AM_RANGE(0xa181, 0xa181) AM_MIRROR(0x5e78) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
- AM_RANGE(0xa183, 0xa183) AM_MIRROR(0x5e78) AM_WRITENOP // ???
- AM_RANGE(0xa187, 0xa187) AM_MIRROR(0x5e78) AM_WRITE(flipscreen_w)
+ AM_RANGE(0xa180, 0xa187) AM_MIRROR(0x5e78) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -182,12 +192,6 @@ void pooyan_state::machine_start()
}
-void pooyan_state::machine_reset()
-{
- m_irq_enable = 0;
-}
-
-
static MACHINE_CONFIG_START( pooyan )
/* basic machine hardware */
@@ -195,6 +199,15 @@ static MACHINE_CONFIG_START( pooyan )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pooyan_state, interrupt)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B2
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(pooyan_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(pooyan_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(pooyan_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // PAY OUT - not used
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(pooyan_state, flipscreen_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/prof80.cpp b/src/mame/drivers/prof80.cpp
index 98441b1cbb3..b1b55ea40f0 100644
--- a/src/mame/drivers/prof80.cpp
+++ b/src/mame/drivers/prof80.cpp
@@ -47,119 +47,80 @@ void prof80_state::motor(int mon)
}
-//-------------------------------------------------
-// ls259_w -
-//-------------------------------------------------
-
-void prof80_state::ls259_w(int fa, int sa, int fb, int sb)
+WRITE_LINE_MEMBER(prof80_state::ready_w)
{
- switch (sa)
+ if (m_ready != state)
{
- case 0: // C0/TDI
- m_rtc->data_in_w(fa);
- m_rtc->c0_w(fa);
- m_c0 = fa;
- break;
-
- case 1: // C1
- m_rtc->c1_w(fa);
- m_c1 = fa;
- break;
+ m_fdc->set_ready_line_connected(!state);
+ m_fdc->ready_w(!state);
+ m_ready = state;
+ }
+}
- case 2: // C2
- m_rtc->c2_w(fa);
- m_c2 = fa;
- break;
- case 3: // READY
- if (m_ready != fa)
- {
- m_fdc->set_ready_line_connected(!fa);
- m_fdc->ready_w(!fa);
- m_ready = fa;
- }
- break;
+WRITE_LINE_MEMBER(prof80_state::inuse_w)
+{
+ //m_floppy->inuse_w(state);
+}
- case 4: // TCK
- m_rtc->clk_w(fa);
- break;
- case 5: // IN USE
- //m_floppy->inuse_w(fa);
- break;
+WRITE_LINE_MEMBER(prof80_state::motor_w)
+{
+ if (state)
+ {
+ // trigger floppy motor off NE555 timer
+ int t = 110 * RES_M(10) * CAP_U(6.8); // t = 1.1 * R8 * C6
- case 6: // _MOTOR
- if (fa)
- {
- // trigger floppy motor off NE555 timer
- int t = 110 * RES_M(10) * CAP_U(6.8); // t = 1.1 * R8 * C6
-
- timer_set(attotime::from_msec(t), TIMER_ID_MOTOR);
- }
- else
- {
- // turn on floppy motor
- motor(0);
-
- // reset floppy motor off NE555 timer
- timer_set(attotime::never, TIMER_ID_MOTOR);
- }
- break;
+ timer_set(attotime::from_msec(t), TIMER_ID_MOTOR);
+ }
+ else
+ {
+ // turn on floppy motor
+ motor(0);
- case 7: // SELECT
- if (m_select != fa)
- {
- //m_fdc->set_select_lines_connected(fa);
- m_select = fa;
- }
- break;
+ // reset floppy motor off NE555 timer
+ timer_set(attotime::never, TIMER_ID_MOTOR);
}
+}
- switch (sb)
- {
- case 0: // RESF
- if (fb) m_fdc->soft_reset();
- break;
- case 1: // MINI
- break;
+WRITE_LINE_MEMBER(prof80_state::select_w)
+{
+ if (m_select != state)
+ {
+ //m_fdc->set_select_lines_connected(state);
+ m_select = state;
+ }
+}
- case 2: // _RTS
- m_rs232a->write_rts(fb);
- break;
- case 3: // TX
- m_rs232a->write_txd(fb);
- break;
+WRITE_LINE_MEMBER(prof80_state::resf_w)
+{
+ if (state)
+ m_fdc->soft_reset();
+}
- case 4: // _MSTOP
- if (!fb)
- {
- // turn off floppy motor
- motor(1);
- // reset floppy motor off NE555 timer
- timer_set(attotime::never, TIMER_ID_MOTOR);
- }
- break;
+WRITE_LINE_MEMBER(prof80_state::mini_w)
+{
+}
- case 5: // TXP
- m_rs232b->write_txd(fb);
- break;
- case 6: // TSTB
- m_rtc->stb_w(fb);
- break;
+WRITE_LINE_MEMBER(prof80_state::mstop_w)
+{
+ if (!state)
+ {
+ // turn off floppy motor
+ motor(1);
- case 7: // MME
- m_mmu->mme_w(fb);
- break;
+ // reset floppy motor off NE555 timer
+ timer_set(attotime::never, TIMER_ID_MOTOR);
}
}
//-------------------------------------------------
-// flr_w -
+// flr_w - flag register
//-------------------------------------------------
WRITE8_MEMBER( prof80_state::flr_w )
@@ -179,13 +140,8 @@ WRITE8_MEMBER( prof80_state::flr_w )
*/
- int fa = BIT(data, 7);
- int sa = (data >> 4) & 0x07;
-
- int fb = BIT(data, 0);
- int sb = (data >> 1) & 0x07;
-
- ls259_w(fa, sa, fb, sb);
+ m_flra->write_bit((data >> 4) & 0x07, BIT(data, 7));
+ m_flrb->write_bit((data >> 1) & 0x07, BIT(data, 0));
}
@@ -258,9 +214,9 @@ READ8_MEMBER( prof80_state::status2_r )
{
case 0: js4 = 0; break;
case 1: js4 = 1; break;
- case 2: js4 = !m_c0; break;
- case 3: js4 = !m_c1; break;
- case 4: js4 = !m_c2; break;
+ case 2: js4 = !m_flra->q0_r(); break;
+ case 3: js4 = !m_flra->q1_r(); break;
+ case 4: js4 = !m_flra->q2_r(); break;
}
data |= js4 << 4;
@@ -270,9 +226,9 @@ READ8_MEMBER( prof80_state::status2_r )
{
case 0: js5 = 0; break;
case 1: js5 = 1; break;
- case 2: js5 = !m_c0; break;
- case 3: js5 = !m_c1; break;
- case 4: js5 = !m_c2; break;
+ case 2: js5 = !m_flra->q0_r(); break;
+ case 3: js5 = !m_flra->q1_r(); break;
+ case 4: js5 = !m_flra->q2_r(); break;
}
data |= js5 << 4;
@@ -472,26 +428,12 @@ void prof80_state::machine_start()
m_rtc->oe_w(1);
// register for state saving
- save_item(NAME(m_c0));
- save_item(NAME(m_c1));
- save_item(NAME(m_c2));
save_item(NAME(m_motor));
save_item(NAME(m_ready));
save_item(NAME(m_select));
}
-void prof80_state::machine_reset()
-{
- int i;
-
- for (i = 0; i < 8; i++)
- {
- ls259_w(0, i, 0, i);
- }
-}
-
-
//**************************************************************************
// MACHINE DRIVERS
@@ -507,15 +449,40 @@ static MACHINE_CONFIG_START( prof80 )
MCFG_CPU_PROGRAM_MAP(prof80_mem)
MCFG_CPU_IO_MAP(prof80_io)
- // devices
+ // MMU
MCFG_PROF80_MMU_ADD(MMU_TAG, prof80_mmu)
+
+ // RTC
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NOOP, NOOP)
+
+ // FDC
MCFG_UPD765A_ADD(UPD765_TAG, true, true)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", prof80_floppies, "525qd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", prof80_floppies, nullptr, floppy_image_device::default_floppy_formats)
+ // DEMUX latches
+ MCFG_DEVICE_ADD(FLR_A_TAG, LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, data_in_w)) // TDI
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c0_w)) // C0
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c1_w)) // C1
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, c2_w)) // C2
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(prof80_state, ready_w)) // READY
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, clk_w)) // TCK
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(prof80_state, inuse_w)) // IN USE
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(prof80_state, motor_w)) // _MOTOR
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(prof80_state, select_w)) // SELECT
+ MCFG_DEVICE_ADD(FLR_B_TAG, LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(prof80_state, resf_w)) // RESF
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(prof80_state, mini_w)) // MINI
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_rts)) // _RTS
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_txd)) // TX
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(prof80_state, mstop_w)) // _MSTOP
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE(RS232_B_TAG, rs232_port_device, write_txd)) // TXP
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE(UPD1990A_TAG, upd1990a_device, stb_w)) // TSTB
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE(MMU_TAG, prof80_mmu_device, mme_w)) // MME
+
// ECB bus
MCFG_ECBBUS_ADD()
MCFG_ECBBUS_SLOT_ADD(1, "ecb_1", ecbbus_cards, "grip21")
diff --git a/src/mame/drivers/punchout.cpp b/src/mame/drivers/punchout.cpp
index 20844ddbc96..670ff18cf5c 100644
--- a/src/mame/drivers/punchout.cpp
+++ b/src/mame/drivers/punchout.cpp
@@ -119,6 +119,7 @@ DIP locations verified for:
#include "cpu/z80/z80.h"
#include "cpu/m6502/n2a03.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/nvram.h"
#include "rendlay.h"
@@ -134,29 +135,9 @@ DIP locations verified for:
// Z80 (main)
-WRITE8_MEMBER(punchout_state::punchout_speech_reset_w)
+WRITE_LINE_MEMBER(punchout_state::nmi_mask_w)
{
- m_vlm->rst( data & 0x01 );
-}
-
-WRITE8_MEMBER(punchout_state::punchout_speech_st_w)
-{
- m_vlm->st( data & 0x01 );
-}
-
-WRITE8_MEMBER(punchout_state::punchout_speech_vcu_w)
-{
- m_vlm->vcu( data & 0x01 );
-}
-
-WRITE8_MEMBER(punchout_state::punchout_2a03_reset_w)
-{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-WRITE8_MEMBER(punchout_state::nmi_mask_w)
-{
- m_nmi_mask = data & 1;
+ m_nmi_mask = state;
}
static ADDRESS_MAP_START( punchout_map, AS_PROGRAM, 8, punchout_state )
@@ -197,14 +178,7 @@ static ADDRESS_MAP_START( punchout_io_map, AS_IO, 8, punchout_state )
AM_RANGE(0x03, 0x03) AM_READ_PORT("DSW1") AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
AM_RANGE(0x04, 0x04) AM_DEVWRITE("vlm", vlm5030_device, data_w)
AM_RANGE(0x05, 0x07) AM_WRITENOP // spunchout protection
- AM_RANGE(0x08, 0x08) AM_WRITE(nmi_mask_w)
- AM_RANGE(0x09, 0x09) AM_WRITENOP // watchdog reset, seldom used because 08 clears the watchdog as well
- AM_RANGE(0x0a, 0x0a) AM_WRITENOP // ?
- AM_RANGE(0x0b, 0x0b) AM_WRITE(punchout_2a03_reset_w)
- AM_RANGE(0x0c, 0x0c) AM_WRITE(punchout_speech_reset_w)
- AM_RANGE(0x0d, 0x0d) AM_WRITE(punchout_speech_st_w)
- AM_RANGE(0x0e, 0x0e) AM_WRITE(punchout_speech_vcu_w)
- AM_RANGE(0x0f, 0x0f) AM_WRITENOP // enable NVRAM?
+ AM_RANGE(0x08, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -654,6 +628,16 @@ static MACHINE_CONFIG_START( punchout )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 2B
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(punchout_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // watchdog reset, seldom used because 08 clears the watchdog as well
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ?
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("vlm", vlm5030_device, rst))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("vlm", vlm5030_device, st))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("vlm", vlm5030_device, vcu))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // enable NVRAM?
+
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", punchout)
MCFG_PALETTE_ADD("palette", 0x200)
diff --git a/src/mame/drivers/rallyx.cpp b/src/mame/drivers/rallyx.cpp
index 7a80c61493a..b1f950dddb0 100644
--- a/src/mame/drivers/rallyx.cpp
+++ b/src/mame/drivers/rallyx.cpp
@@ -194,6 +194,7 @@ TODO:
#include "includes/rallyx.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/samples.h"
@@ -216,95 +217,63 @@ WRITE8_MEMBER(rallyx_state::rallyx_interrupt_vector_w)
}
-WRITE8_MEMBER(rallyx_state::rallyx_bang_w)
+WRITE_LINE_MEMBER(rallyx_state::bang_w)
{
- if (data == 0 && m_last_bang != 0)
+ if (state == 0 && m_last_bang != 0)
m_samples->start(0, 0);
- m_last_bang = data;
+ m_last_bang = state;
}
-WRITE8_MEMBER(rallyx_state::rallyx_latch_w)
+
+WRITE_LINE_MEMBER(rallyx_state::irq_mask_w)
+{
+ m_main_irq_mask = state;
+ if (!state)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+}
+
+
+WRITE_LINE_MEMBER(rallyx_state::sound_on_w)
{
- int bit = data & 1;
-
- switch (offset)
- {
- case 0x00: /* BANG */
- rallyx_bang_w(space, 0, bit);
- break;
-
- case 0x01: /* INT ON */
- m_main_irq_mask = bit;
- if (!bit)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
-
- case 0x02: /* SOUND ON */
- /* this doesn't work in New Rally X so I'm not supporting it */
-// m_namco_sound->pacman_sound_enable_w(bit);
- break;
-
- case 0x03: /* FLIP */
- flip_screen_set(bit);
- break;
-
- case 0x04:
- output().set_led_value(0, bit);
- break;
-
- case 0x05:
- output().set_led_value(1, bit);
- break;
-
- case 0x06:
- machine().bookkeeping().coin_lockout_w(0, !bit);
- break;
-
- case 0x07:
- machine().bookkeeping().coin_counter_w(0, bit);
- break;
- }
+ /* this doesn't work in New Rally X so I'm not supporting it */
+ //m_namco_sound->pacman_sound_enable_w(state);
}
-WRITE8_MEMBER(rallyx_state::locomotn_latch_w)
+WRITE_LINE_MEMBER(rallyx_state::flip_screen_w)
{
- int bit = data & 1;
+ flip_screen_set(state);
+}
- switch (offset)
- {
- case 0x00: /* SOUNDON */
- m_timeplt_audio->sh_irqtrigger_w(space,0,bit);
- break;
- case 0x01: /* INTST */
- m_main_irq_mask = bit;
- break;
+WRITE_LINE_MEMBER(rallyx_state::led_0_w)
+{
+ output().set_led_value(0, state);
+}
+
+
+WRITE_LINE_MEMBER(rallyx_state::led_1_w)
+{
+ output().set_led_value(1, state);
+}
- case 0x02: /* MUT */
-// sound disable
- break;
- case 0x03: /* FLIP */
- flip_screen_set(bit);
- break;
+WRITE_LINE_MEMBER(rallyx_state::coin_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, !state);
+}
- case 0x04: /* OUT1 */
- machine().bookkeeping().coin_counter_w(0, bit);
- break;
- case 0x05: /* OUT2 */
- break;
+WRITE_LINE_MEMBER(rallyx_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
- case 0x06: /* OUT3 */
- machine().bookkeeping().coin_counter_w(1,bit);
- break;
- case 0x07: /* STARSON */
- tactcian_starson_w(space, offset, bit);
- break;
- }
+WRITE_LINE_MEMBER(rallyx_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -327,7 +296,7 @@ static ADDRESS_MAP_START( rallyx_map, AS_PROGRAM, 8, rallyx_state )
AM_RANGE(0xa130, 0xa130) AM_WRITE(rallyx_scrollx_w)
AM_RANGE(0xa140, 0xa140) AM_WRITE(rallyx_scrolly_w)
AM_RANGE(0xa170, 0xa170) AM_WRITENOP /* ? */
- AM_RANGE(0xa180, 0xa187) AM_WRITE(rallyx_latch_w)
+ AM_RANGE(0xa180, 0xa187) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( io_map, AS_IO, 8, rallyx_state )
@@ -349,7 +318,7 @@ static ADDRESS_MAP_START( jungler_map, AS_PROGRAM, 8, rallyx_state )
AM_RANGE(0xa100, 0xa100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xa130, 0xa130) AM_WRITE(rallyx_scrollx_w) /* only jungler and tactcian */
AM_RANGE(0xa140, 0xa140) AM_WRITE(rallyx_scrolly_w) /* only jungler and tactcian */
- AM_RANGE(0xa180, 0xa187) AM_WRITE(locomotn_latch_w)
+ AM_RANGE(0xa180, 0xa187) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -834,12 +803,6 @@ MACHINE_START_MEMBER(rallyx_state,rallyx)
save_item(NAME(m_stars_enable));
}
-MACHINE_RESET_MEMBER(rallyx_state,rallyx)
-{
- m_last_bang = 0;
- m_stars_enable = 0;
-}
-
INTERRUPT_GEN_MEMBER(rallyx_state::rallyx_vblank_irq)
{
if (m_main_irq_mask)
@@ -860,10 +823,19 @@ static MACHINE_CONFIG_START( rallyx )
MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", rallyx_state, rallyx_vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 259 at 12M or 4099 at 11M on Logic Board I
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(rallyx_state, bang_w)) // BANG
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(rallyx_state, irq_mask_w)) // INT ON
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(rallyx_state, sound_on_w)) // SOUND ON
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rallyx_state, flip_screen_w)) // FLIP
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rallyx_state, led_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(rallyx_state, led_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(rallyx_state, coin_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(rallyx_state, coin_counter_1_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_MACHINE_START_OVERRIDE(rallyx_state,rallyx)
- MCFG_MACHINE_RESET_OVERRIDE(rallyx_state,rallyx)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -903,10 +875,19 @@ static MACHINE_CONFIG_START( jungler )
MCFG_CPU_PROGRAM_MAP(jungler_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", rallyx_state, jungler_vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 1C on Loco-Motion
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)) // SOUNDON
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(rallyx_state, irq_mask_w)) // INTST
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w)) // MUT
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rallyx_state, flip_screen_w)) // FLIP
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rallyx_state, coin_counter_1_w)) // OUT1
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // OUT2
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(rallyx_state, coin_counter_2_w)) // OUT3
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(rallyx_state, stars_enable_w)) // STARSON
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_MACHINE_START_OVERRIDE(rallyx_state,rallyx)
- MCFG_MACHINE_RESET_OVERRIDE(rallyx_state,rallyx)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/retofinv.cpp b/src/mame/drivers/retofinv.cpp
index 6b70c57e5ad..04b2a2efec2 100644
--- a/src/mame/drivers/retofinv.cpp
+++ b/src/mame/drivers/retofinv.cpp
@@ -107,6 +107,7 @@ Notes:
#include "includes/retofinv.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/sn76496.h"
#include "screen.h"
@@ -120,21 +121,6 @@ void retofinv_state::machine_start()
save_item(NAME(m_cpu2_m6000));
}
-WRITE8_MEMBER(retofinv_state::cpu1_reset_w)
-{
- m_subcpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
-}
-
-WRITE8_MEMBER(retofinv_state::cpu2_reset_w)
-{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
-}
-
-WRITE8_MEMBER(retofinv_state::mcu_reset_w)
-{
- m_68705->reset_w(data ? CLEAR_LINE : ASSERT_LINE);
-}
-
WRITE8_MEMBER(retofinv_state::cpu2_m6000_w)
{
m_cpu2_m6000 = data;
@@ -151,16 +137,16 @@ WRITE8_MEMBER(retofinv_state::soundcommand_w)
m_audiocpu->set_input_line(0, HOLD_LINE);
}
-WRITE8_MEMBER(retofinv_state::irq0_ack_w)
+WRITE_LINE_MEMBER(retofinv_state::irq0_ack_w)
{
- m_main_irq_mask = data & 1;
+ m_main_irq_mask = state;
if (!m_main_irq_mask)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
-WRITE8_MEMBER(retofinv_state::irq1_ack_w)
+WRITE_LINE_MEMBER(retofinv_state::irq1_ack_w)
{
- m_sub_irq_mask = data & 1;
+ m_sub_irq_mask = state;
if (!m_sub_irq_mask)
m_subcpu->set_input_line(0, CLEAR_LINE);
}
@@ -170,9 +156,9 @@ WRITE8_MEMBER(retofinv_state::coincounter_w)
machine().bookkeeping().coin_counter_w(0, data & 1);
}
-WRITE8_MEMBER(retofinv_state::coinlockout_w)
+WRITE_LINE_MEMBER(retofinv_state::coinlockout_w)
{
- machine().bookkeeping().coin_lockout_w(0,~data & 1);
+ machine().bookkeeping().coin_lockout_w(0, !state);
}
READ8_MEMBER(retofinv_state::mcu_status_r)
@@ -205,11 +191,7 @@ static ADDRESS_MAP_START( bootleg_map, AS_PROGRAM, 8, retofinv_state )
AM_RANGE(0xc005, 0xc005) AM_READ_PORT("DSW1")
AM_RANGE(0xc006, 0xc006) AM_READ_PORT("DSW2")
AM_RANGE(0xc007, 0xc007) AM_READ_PORT("DSW3")
- AM_RANGE(0xc800, 0xc800) AM_WRITE(irq0_ack_w)
- AM_RANGE(0xc801, 0xc801) AM_WRITE(coinlockout_w)
- AM_RANGE(0xc802, 0xc802) AM_WRITE(cpu2_reset_w)
-// AM_RANGE(0xc804, 0xc804) AM_WRITE(irq1_ack_w) // presumably (meaning memory map is shared with cpu 1)
- AM_RANGE(0xc805, 0xc805) AM_WRITE(cpu1_reset_w)
+ AM_RANGE(0xc800, 0xc807) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xd800, 0xd800) AM_WRITE(soundcommand_w)
AM_RANGE(0xf800, 0xf800) AM_READ(cpu0_mf800_r)
@@ -218,7 +200,6 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, retofinv_state )
AM_IMPORT_FROM(bootleg_map)
AM_RANGE(0xc003, 0xc003) AM_READ(mcu_status_r)
- AM_RANGE(0xc803, 0xc803) AM_WRITE(mcu_reset_w)
AM_RANGE(0xe000, 0xe000) AM_DEVREAD("68705", taito68705_mcu_device, data_r)
AM_RANGE(0xe800, 0xe800) AM_DEVWRITE("68705", taito68705_mcu_device, data_w)
ADDRESS_MAP_END
@@ -228,7 +209,7 @@ static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, retofinv_state )
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram")
AM_RANGE(0x8800, 0x9fff) AM_RAM AM_SHARE("sharedram")
AM_RANGE(0xa000, 0xa7ff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram")
- AM_RANGE(0xc804, 0xc804) AM_WRITE(irq1_ack_w)
+ AM_RANGE(0xc800, 0xc807) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, retofinv_state )
@@ -447,6 +428,14 @@ static MACHINE_CONFIG_START( retofinv )
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - enough for the sound CPU to read all commands */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC72 - probably shared between CPUs
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(retofinv_state, irq0_ack_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(retofinv_state, coinlockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("68705", taito68705_mcu_device, reset_w)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(retofinv_state, irq1_ack_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -486,6 +475,9 @@ static MACHINE_CONFIG_DERIVED( retofinvb_nomcu, retofinvb )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(bootleg_map)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP)
+
MCFG_DEVICE_REMOVE("68705")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/rocnrope.cpp b/src/mame/drivers/rocnrope.cpp
index 6b49896968e..1f5feb93edf 100644
--- a/src/mame/drivers/rocnrope.cpp
+++ b/src/mame/drivers/rocnrope.cpp
@@ -14,6 +14,7 @@
#include "audio/timeplt.h"
#include "cpu/m6809/m6809.h"
+#include "machine/74259.h"
#include "machine/konami1.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
@@ -36,13 +37,23 @@ WRITE8_MEMBER(rocnrope_state::rocnrope_interrupt_vector_w)
RAM[0xfff2 + offset] = data;
}
-WRITE8_MEMBER(rocnrope_state::irq_mask_w)
+WRITE_LINE_MEMBER(rocnrope_state::irq_mask_w)
{
- m_irq_mask = data & 1;
+ m_irq_mask = state;
if (!m_irq_mask)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
+WRITE_LINE_MEMBER(rocnrope_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(rocnrope_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
/*************************************
*
* Address maps
@@ -63,12 +74,7 @@ static ADDRESS_MAP_START( rocnrope_map, AS_PROGRAM, 8, rocnrope_state )
AM_RANGE(0x4c00, 0x4fff) AM_RAM_WRITE(rocnrope_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x5000, 0x5fff) AM_RAM
AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x8080, 0x8080) AM_WRITE(rocnrope_flipscreen_w)
- AM_RANGE(0x8081, 0x8081) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w) /* cause interrupt on audio CPU */
- AM_RANGE(0x8082, 0x8082) AM_WRITENOP /* ??? */
- AM_RANGE(0x8083, 0x8083) AM_WRITENOP /* Coin counter 1 */
- AM_RANGE(0x8084, 0x8084) AM_WRITENOP /* Coin counter 2 */
- AM_RANGE(0x8087, 0x8087) AM_WRITE(irq_mask_w)
+ AM_RANGE(0x8080, 0x8087) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x8100, 0x8100) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x8182, 0x818d) AM_WRITE(rocnrope_interrupt_vector_w)
AM_RANGE(0x6000, 0xffff) AM_ROM
@@ -207,6 +213,14 @@ static MACHINE_CONFIG_START( rocnrope )
MCFG_CPU_PROGRAM_MAP(rocnrope_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", rocnrope_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B2
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(rocnrope_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rocnrope_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rocnrope_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(rocnrope_state, irq_mask_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/rollrace.cpp b/src/mame/drivers/rollrace.cpp
index ed5dfef309d..75f3dd4f9ee 100644
--- a/src/mame/drivers/rollrace.cpp
+++ b/src/mame/drivers/rollrace.cpp
@@ -13,6 +13,7 @@ Issues:
#include "includes/rollrace.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "sound/ay8910.h"
#include "screen.h"
@@ -21,7 +22,6 @@ Issues:
void rollrace_state::machine_start()
{
- save_item(NAME(m_charbank));
save_item(NAME(m_bkgpage));
save_item(NAME(m_bkgflip));
save_item(NAME(m_chrbank));
@@ -44,9 +44,9 @@ WRITE8_MEMBER(rollrace_state::fake_d800_w)
/* logerror("d900: %02X\n",data);*/
}
-WRITE8_MEMBER(rollrace_state::nmi_mask_w)
+WRITE_LINE_MEMBER(rollrace_state::nmi_mask_w)
{
- m_nmi_mask = data & 1;
+ m_nmi_mask = state;
}
WRITE8_MEMBER(rollrace_state::sound_nmi_mask_w)
@@ -54,9 +54,14 @@ WRITE8_MEMBER(rollrace_state::sound_nmi_mask_w)
m_sound_nmi_mask = data & 1;
}
-WRITE8_MEMBER(rollrace_state::coin_w)
+WRITE_LINE_MEMBER(rollrace_state::coin_counter_1_w)
{
- machine().bookkeeping().coin_counter_w(offset, data);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(rollrace_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state )
@@ -77,11 +82,7 @@ static ADDRESS_MAP_START( rollrace_map, AS_PROGRAM, 8, rollrace_state )
AM_RANGE(0xf803, 0xf803) AM_WRITE(flipy_w)
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW1")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2")
- AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flipx_w)
- AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_mask_w)
- AM_RANGE(0xfc02, 0xfc03) AM_WRITE(coin_w)
- AM_RANGE(0xfc04, 0xfc05) AM_WRITE(charbank_w)
- AM_RANGE(0xfc06, 0xfc06) AM_WRITE(spritebank_w)
+ AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -255,6 +256,15 @@ static MACHINE_CONFIG_START( rollrace )
MCFG_CPU_PROGRAM_MAP(rollrace_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(rollrace_state, sound_timer_irq, 4*60)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(rollrace_state, flipx_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(rollrace_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(rollrace_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(rollrace_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(rollrace_state, charbank_0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(rollrace_state, charbank_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(rollrace_state, spritebank_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/sauro.cpp b/src/mame/drivers/sauro.cpp
index adb1f7d2b15..e9dc8607e1c 100644
--- a/src/mame/drivers/sauro.cpp
+++ b/src/mame/drivers/sauro.cpp
@@ -126,6 +126,7 @@ Stephh's notes (based on the games Z80 code and some tests) :
#include "includes/sauro.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "sound/3812intf.h"
@@ -133,6 +134,11 @@ Stephh's notes (based on the games Z80 code and some tests) :
#include "speaker.h"
+void sauro_state::machine_start()
+{
+ save_item(NAME(m_irq_enable));
+}
+
WRITE8_MEMBER(sauro_state::sauro_sound_command_w)
{
data |= 0x80;
@@ -146,21 +152,32 @@ READ8_MEMBER(sauro_state::sauro_sound_command_r)
return ret;
}
-WRITE8_MEMBER(sauro_state::coin1_w)
+WRITE_LINE_MEMBER(sauro_state::vblank_irq)
+{
+ if (state && m_irq_enable)
+ m_maincpu->set_input_line(0, ASSERT_LINE);
+}
+
+WRITE_LINE_MEMBER(sauro_state::irq_reset_w)
{
- machine().bookkeeping().coin_counter_w(0, data);
- machine().bookkeeping().coin_counter_w(0, 0); // to get the coin counter working in sauro, as it doesn't write 0
+ m_irq_enable = !state;
+ if (m_irq_enable)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
}
-WRITE8_MEMBER(sauro_state::coin2_w)
+WRITE_LINE_MEMBER(sauro_state::coin1_w)
{
- machine().bookkeeping().coin_counter_w(1, data);
- machine().bookkeeping().coin_counter_w(1, 0); // to get the coin counter working in sauro, as it doesn't write 0
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(sauro_state::flip_screen_w)
+WRITE_LINE_MEMBER(sauro_state::coin2_w)
{
- flip_screen_set(data);
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(sauro_state::flip_screen_w)
+{
+ flip_screen_set(state);
}
WRITE8_MEMBER(sauro_state::adpcm_w)
@@ -187,19 +204,7 @@ static ADDRESS_MAP_START( sauro_io_map, AS_IO, 8, sauro_state )
AM_RANGE(0x80, 0x80) AM_WRITE(sauro_sound_command_w)
AM_RANGE(0xa0, 0xa0) AM_WRITE(scroll_bg_w)
AM_RANGE(0xa1, 0xa1) AM_WRITE(sauro_scroll_fg_w)
- AM_RANGE(0xc0, 0xc0) AM_WRITE(flip_screen_w)
- AM_RANGE(0xc2, 0xc2) AM_WRITENOP /* coin reset */
- AM_RANGE(0xc3, 0xc3) AM_WRITE(coin1_w)
- AM_RANGE(0xc4, 0xc4) AM_WRITENOP /* coin reset */
- AM_RANGE(0xc5, 0xc5) AM_WRITE(coin2_w)
- AM_RANGE(0xc6, 0xc7) AM_WRITENOP /* same as 0x80 - verified with debugger */
- AM_RANGE(0xc8, 0xc8) AM_WRITENOP /* written every int: 0 written at end of isr */
- AM_RANGE(0xc9, 0xc9) AM_WRITENOP /* written every int: 1 written at start of isr */
- AM_RANGE(0xca, 0xcb) AM_WRITE(sauro_palette_bank_w) /* 1 written upon death, cleared 2 vblanks later */
- /* Sequence 3,2,1 written during intro screen */
- AM_RANGE(0xcc, 0xcc) AM_WRITENOP /* same as 0xca */
- AM_RANGE(0xcd, 0xcd) AM_WRITENOP /* same as 0xcb */
- AM_RANGE(0xce, 0xce) AM_WRITENOP /* only written at startup */
+ AM_RANGE(0xc0, 0xcf) AM_DEVWRITE("mainlatch", ls259_device, write_a0)
AM_RANGE(0xe0, 0xe0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
ADDRESS_MAP_END
@@ -238,12 +243,7 @@ static ADDRESS_MAP_START( trckydoc_map, AS_PROGRAM, 8, sauro_state )
AM_RANGE(0xf820, 0xf821) AM_DEVWRITE("ymsnd", ym3812_device, write)
AM_RANGE(0xf828, 0xf828) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r)
AM_RANGE(0xf830, 0xf830) AM_WRITE(scroll_bg_w)
- AM_RANGE(0xf838, 0xf838) AM_WRITENOP /* only written at startup */
- AM_RANGE(0xf839, 0xf839) AM_WRITE(flip_screen_w)
- AM_RANGE(0xf83a, 0xf83a) AM_WRITE(coin1_w)
- AM_RANGE(0xf83b, 0xf83b) AM_WRITE(coin2_w)
- AM_RANGE(0xf83c, 0xf83c) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0xf83f, 0xf83f) AM_WRITENOP /* only written at startup */
+ AM_RANGE(0xf838, 0xf83f) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -446,7 +446,9 @@ static MACHINE_CONFIG_START( tecfri )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_20MHz/4) /* verified on pcb */
- MCFG_CPU_VBLANK_INT_DRIVER("screen", sauro_state, irq0_line_hold)
+
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(sauro_state, irq_reset_w))
MCFG_NVRAM_ADD_1FILL("nvram")
@@ -459,6 +461,7 @@ static MACHINE_CONFIG_START( tecfri )
MCFG_SCREEN_SIZE(32 * 8, 32 * 8)
MCFG_SCREEN_VISIBLE_AREA(1 * 8, 31 * 8 - 1, 2 * 8, 30 * 8 - 1)
MCFG_SCREEN_PALETTE("palette")
+ MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(sauro_state, vblank_irq))
MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", "proms", 1024)
@@ -475,6 +478,11 @@ static MACHINE_CONFIG_DERIVED( trckydoc, tecfri )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(trckydoc_map)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sauro_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sauro_state, coin1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sauro_state, coin2_w))
+
MCFG_GFXDECODE_ADD("gfxdecode", "palette", trckydoc)
MCFG_VIDEO_START_OVERRIDE(sauro_state,trckydoc)
@@ -489,6 +497,14 @@ static MACHINE_CONFIG_DERIVED( sauro, tecfri )
MCFG_CPU_PROGRAM_MAP(sauro_map)
MCFG_CPU_IO_MAP(sauro_io_map)
+ MCFG_DEVICE_MODIFY("mainlatch") // Z3
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sauro_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sauro_state, coin1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sauro_state, coin2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // sound IRQ trigger?
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sauro_state, sauro_palette_bank0_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sauro_state, sauro_palette_bank1_w))
+
MCFG_CPU_ADD("audiocpu", Z80, 4000000) // 4 MHz?
MCFG_CPU_PROGRAM_MAP(sauro_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(sauro_state, irq0_line_hold, 8*60) // ?
diff --git a/src/mame/drivers/sbrkout.cpp b/src/mame/drivers/sbrkout.cpp
index 588e6c000cb..9349f0f891f 100644
--- a/src/mame/drivers/sbrkout.cpp
+++ b/src/mame/drivers/sbrkout.cpp
@@ -36,6 +36,7 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
@@ -50,6 +51,7 @@ public:
: driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
+ m_outlatch(*this, "outlatch"),
m_dac(*this, "dac"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
@@ -65,13 +67,14 @@ public:
DECLARE_WRITE8_MEMBER(irq_ack_w);
DECLARE_READ8_MEMBER(switches_r);
DECLARE_READ8_MEMBER(sbrkoutct_switches_r);
- DECLARE_WRITE8_MEMBER(pot_mask1_w);
- DECLARE_WRITE8_MEMBER(pot_mask2_w);
- DECLARE_WRITE8_MEMBER(start_1_led_w);
- DECLARE_WRITE8_MEMBER(start_2_led_w);
- DECLARE_WRITE8_MEMBER(serve_led_w);
- DECLARE_WRITE8_MEMBER(serve_2_led_w);
- DECLARE_WRITE8_MEMBER(coincount_w);
+ DECLARE_WRITE_LINE_MEMBER(pot_mask1_w);
+ DECLARE_WRITE_LINE_MEMBER(pot_mask2_w);
+ DECLARE_WRITE8_MEMBER(output_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(start_1_led_w);
+ DECLARE_WRITE_LINE_MEMBER(start_2_led_w);
+ DECLARE_WRITE_LINE_MEMBER(serve_led_w);
+ DECLARE_WRITE_LINE_MEMBER(serve_2_led_w);
+ DECLARE_WRITE_LINE_MEMBER(coincount_w);
DECLARE_READ8_MEMBER(sync_r);
DECLARE_READ8_MEMBER(sync2_r);
DECLARE_WRITE8_MEMBER(sbrkout_videoram_w);
@@ -84,6 +87,7 @@ public:
TIMER_CALLBACK_MEMBER(pot_trigger_callback);
void update_nmi_state();
required_device<cpu_device> m_maincpu;
+ required_device<f9334_device> m_outlatch;
required_device<dac_bit_interface> m_dac;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
@@ -253,17 +257,17 @@ TIMER_CALLBACK_MEMBER(sbrkout_state::pot_trigger_callback)
}
-WRITE8_MEMBER(sbrkout_state::pot_mask1_w)
+WRITE_LINE_MEMBER(sbrkout_state::pot_mask1_w)
{
- m_pot_mask[0] = ~offset & 1;
+ m_pot_mask[0] = !state;
m_pot_trigger[0] = 0;
update_nmi_state();
}
-WRITE8_MEMBER(sbrkout_state::pot_mask2_w)
+WRITE_LINE_MEMBER(sbrkout_state::pot_mask2_w)
{
- m_pot_mask[1] = ~offset & 1;
+ m_pot_mask[1] = !state;
m_pot_trigger[1] = 0;
update_nmi_state();
}
@@ -282,33 +286,38 @@ WRITE8_MEMBER(sbrkout_state::pot_mask2_w)
reversed for the Serve LED, which has a NOT on the signal.
*/
-WRITE8_MEMBER(sbrkout_state::start_1_led_w)
+WRITE8_MEMBER(sbrkout_state::output_latch_w)
{
- output().set_led_value(0, offset & 1);
+ m_outlatch->write_bit(offset >> 4, offset & 1);
}
-WRITE8_MEMBER(sbrkout_state::start_2_led_w)
+WRITE_LINE_MEMBER(sbrkout_state::start_1_led_w)
{
- output().set_led_value(1, offset & 1);
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(sbrkout_state::serve_led_w)
+WRITE_LINE_MEMBER(sbrkout_state::start_2_led_w)
{
- output().set_led_value(0, ~offset & 1);
+ output().set_led_value(1, state);
}
-WRITE8_MEMBER(sbrkout_state::serve_2_led_w)
+
+WRITE_LINE_MEMBER(sbrkout_state::serve_led_w)
{
- output().set_led_value(1, ~offset & 1);
+ output().set_led_value(0, !state);
}
-WRITE8_MEMBER(sbrkout_state::coincount_w)
+WRITE_LINE_MEMBER(sbrkout_state::serve_2_led_w)
{
- machine().bookkeeping().coin_counter_w(0, offset & 1);
+ output().set_led_value(1, !state);
}
+WRITE_LINE_MEMBER(sbrkout_state::coincount_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
/*************************************
@@ -403,12 +412,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sbrkout_state )
AM_RANGE(0x0880, 0x0880) AM_MIRROR(0x003f) AM_READ_PORT("START")
AM_RANGE(0x08c0, 0x08c0) AM_MIRROR(0x003f) AM_READ_PORT("SERVICE")
AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_READ(sync_r)
- AM_RANGE(0x0c10, 0x0c11) AM_MIRROR(0x000e) AM_WRITE(serve_led_w)
- AM_RANGE(0x0c30, 0x0c31) AM_MIRROR(0x000e) AM_WRITE(start_1_led_w)
- AM_RANGE(0x0c40, 0x0c41) AM_MIRROR(0x000e) AM_WRITE(start_2_led_w)
- AM_RANGE(0x0c50, 0x0c51) AM_MIRROR(0x000e) AM_WRITE(pot_mask1_w)
- AM_RANGE(0x0c60, 0x0c61) AM_MIRROR(0x000e) AM_WRITE(pot_mask2_w)
- AM_RANGE(0x0c70, 0x0c71) AM_MIRROR(0x000e) AM_WRITE(coincount_w)
+ AM_RANGE(0x0c00, 0x0c7f) AM_WRITE(output_latch_w)
AM_RANGE(0x0c80, 0x0c80) AM_MIRROR(0x007f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x0e00, 0x0e00) AM_MIRROR(0x007f) AM_WRITE(irq_ack_w)
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03ff) AM_READ(sync2_r)
@@ -424,13 +428,7 @@ static ADDRESS_MAP_START( sbrkoutct_main_map, AS_PROGRAM, 8, sbrkout_state )
AM_RANGE(0x0880, 0x0880) AM_MIRROR(0x003f) AM_READ_PORT("START")
AM_RANGE(0x08c0, 0x08c0) AM_MIRROR(0x003f) AM_READ_PORT("SERVICE")
AM_RANGE(0x0c00, 0x0c00) AM_MIRROR(0x03ff) AM_READ(sync_r)
- AM_RANGE(0x0c10, 0x0c11) AM_MIRROR(0x000e) AM_WRITE(serve_led_w)
- AM_RANGE(0x0c20, 0x0c21) AM_MIRROR(0x000e) AM_WRITE(serve_2_led_w)
- AM_RANGE(0x0c30, 0x0c31) AM_MIRROR(0x000e) AM_WRITE(start_1_led_w)
- AM_RANGE(0x0c40, 0x0c41) AM_MIRROR(0x000e) AM_WRITE(start_2_led_w)
- AM_RANGE(0x0c50, 0x0c51) AM_MIRROR(0x000e) AM_WRITE(pot_mask1_w)
- AM_RANGE(0x0c60, 0x0c61) AM_MIRROR(0x000e) AM_WRITE(pot_mask2_w)
- AM_RANGE(0x0c70, 0x0c71) AM_MIRROR(0x000e) AM_WRITE(coincount_w)
+ AM_RANGE(0x0c00, 0x0c7f) AM_WRITE(output_latch_w)
AM_RANGE(0x0c80, 0x0c80) AM_MIRROR(0x007f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x0e00, 0x0e00) AM_MIRROR(0x007f) AM_WRITE(irq_ack_w)
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x03ff) AM_READ(sync2_r)
@@ -586,6 +584,14 @@ static MACHINE_CONFIG_START( sbrkout )
MCFG_CPU_ADD("maincpu", M6502,MAIN_CLOCK/16) /* 375 KHz? Should be 750KHz? */
MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_DEVICE_ADD("outlatch", F9334, 0) // H8
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sbrkout_state, serve_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sbrkout_state, start_1_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(sbrkout_state, start_2_led_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sbrkout_state, pot_mask1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sbrkout_state, pot_mask2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(sbrkout_state, coincount_w))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
@@ -610,6 +616,9 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED(sbrkoutct, sbrkout)
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(sbrkoutct_main_map)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sbrkout_state, serve_2_led_w))
MACHINE_CONFIG_END
/*************************************
diff --git a/src/mame/drivers/shangkid.cpp b/src/mame/drivers/shangkid.cpp
index a351a801723..4c69f6aa042 100644
--- a/src/mame/drivers/shangkid.cpp
+++ b/src/mame/drivers/shangkid.cpp
@@ -54,6 +54,7 @@ Games by Nihon Game/Culture Brain:
#include "includes/shangkid.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
@@ -63,31 +64,21 @@ Games by Nihon Game/Culture Brain:
/***************************************************************************************/
-WRITE8_MEMBER(shangkid_state::maincpu_bank_w)
+WRITE_LINE_MEMBER(shangkid_state::cpu_reset_w)
{
- membank("bank1")->set_entry(data & 1);
-}
-
-WRITE8_MEMBER(shangkid_state::bbx_enable_w)
-{
- m_bbx->set_input_line(INPUT_LINE_HALT, data?0:1 );
-}
-
-WRITE8_MEMBER(shangkid_state::cpu_reset_w)
-{
- if( data == 0 )
+ if (!state)
{
- m_bbx->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
+ //m_bbx->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
}
- else if( data == 1 )
+ else
{
m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
}
}
-WRITE8_MEMBER(shangkid_state::sound_enable_w)
+WRITE_LINE_MEMBER(shangkid_state::sound_enable_w)
{
- m_bbx_sound_enable = data;
+ m_bbx_sound_enable = state;
}
WRITE8_MEMBER(shangkid_state::chinhero_ay8910_porta_w)
@@ -150,14 +141,10 @@ DRIVER_INIT_MEMBER(shangkid_state,shangkid)
MACHINE_RESET_MEMBER(shangkid_state,chinhero)
{
- m_bbx->set_input_line(INPUT_LINE_HALT, 1 );
}
MACHINE_RESET_MEMBER(shangkid_state,shangkid)
{
- m_bbx->set_input_line(INPUT_LINE_HALT, 1 );
-
- membank("bank1")->set_entry(0);
membank("bank2")->set_entry(0);
}
@@ -244,12 +231,7 @@ GFXDECODE_END
static ADDRESS_MAP_START( chinhero_main_map, AS_PROGRAM, 8, shangkid_state )
AM_RANGE(0x0000, 0x9fff) AM_ROM
AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
- AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
- AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
- AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */
- AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */
- AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
- AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
@@ -264,13 +246,7 @@ static ADDRESS_MAP_START( shangkid_main_map, AS_PROGRAM, 8, shangkid_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")
AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
- AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
- AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
- AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */
- AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */
- AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
- AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */
- AM_RANGE(0xb007, 0xb007) AM_WRITE(maincpu_bank_w)
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
@@ -286,12 +262,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( chinhero_bbx_map, AS_PROGRAM, 8, shangkid_state )
AM_RANGE(0x0000, 0x9fff) AM_ROM
AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
- AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
- AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
- AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */
- AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */
- AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
- AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
@@ -304,13 +275,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( shangkid_bbx_map, AS_PROGRAM, 8, shangkid_state )
AM_RANGE(0x0000, 0x9fff) AM_ROM
AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
- AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
- AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
- AM_RANGE(0xb002, 0xb002) AM_WRITENOP /* main CPU interrupt-related */
- AM_RANGE(0xb003, 0xb003) AM_WRITENOP /* BBX interrupt-related */
- AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
- AM_RANGE(0xb006, 0xb006) AM_WRITENOP /* coin counter */
- AM_RANGE(0xb007, 0xb007) AM_WRITE(maincpu_bank_w)
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
@@ -365,6 +330,14 @@ static MACHINE_CONFIG_START( chinhero )
MCFG_CPU_PROGRAM_MAP(chinhero_sound_map)
MCFG_CPU_IO_MAP(sound_portmap)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(INPUTLINE("bbx", INPUT_LINE_HALT)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(shangkid_state, sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) /* main CPU interrupt-related */
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) /* BBX interrupt-related */
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(shangkid_state, cpu_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) /* coin counter */
+
MCFG_MACHINE_RESET_OVERRIDE(shangkid_state,chinhero)
MCFG_QUANTUM_TIME(attotime::from_hz(600))
@@ -409,6 +382,9 @@ static MACHINE_CONFIG_DERIVED( shangkid, chinhero )
MCFG_CPU_MODIFY("audiocpu")
MCFG_CPU_PROGRAM_MAP(shangkid_sound_map)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(MEMBANK("bank1"))
+
MCFG_MACHINE_RESET_OVERRIDE(shangkid_state,shangkid)
/* video hardware */
diff --git a/src/mame/drivers/shougi.cpp b/src/mame/drivers/shougi.cpp
index 2fb3da8b000..be853dd5849 100644
--- a/src/mame/drivers/shougi.cpp
+++ b/src/mame/drivers/shougi.cpp
@@ -78,6 +78,7 @@ PROM : Type MB7051
**************************************************************************/
#include "emu.h"
+#include "machine/74259.h"
#include "machine/alpha8201.h"
#include "machine/watchdog.h"
#include "cpu/z80/z80.h"
@@ -95,6 +96,7 @@ public:
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "sub"),
m_alpha_8201(*this, "alpha_8201"),
+ m_mainlatch(*this, "mainlatch"),
m_videoram(*this, "videoram")
{ }
@@ -102,14 +104,15 @@ public:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
required_device<alpha_8201_device> m_alpha_8201;
+ required_device<ls259_device> m_mainlatch;
required_shared_ptr<uint8_t> m_videoram;
- uint8_t m_control[8];
uint8_t m_nmi_enabled;
int m_r;
DECLARE_WRITE8_MEMBER(control_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
DECLARE_READ8_MEMBER(semaphore_r);
DECLARE_PALETTE_INIT(shougi);
@@ -118,30 +121,20 @@ public:
INTERRUPT_GEN_MEMBER(vblank_nmi);
virtual void machine_start() override;
- virtual void machine_reset() override;
};
void shougi_state::machine_start()
{
// zerofill
- memset(m_control, 0, sizeof(m_control));
m_nmi_enabled = 0;
m_r = 0;
// register for savestates
- save_item(NAME(m_control));
save_item(NAME(m_nmi_enabled));
save_item(NAME(m_r));
}
-void shougi_state::machine_reset()
-{
- // 74LS259 is auto CLR on reset
- for (int i = 0; i < 8; i++)
- control_w(m_maincpu->space(), i, 0);
-}
-
/***************************************************************************
@@ -241,40 +234,20 @@ WRITE8_MEMBER(shougi_state::control_w)
{
// 4800-480f connected to the 74LS259, A3 is data line
// so 4800-4807 write 0, and 4808-480f write 1
- data = offset >> 3 & 1;
- offset &= 7;
+ m_mainlatch->write_bit(offset & 7, BIT(offset, 3));
+}
+
- switch (offset)
+WRITE_LINE_MEMBER(shougi_state::nmi_enable_w)
+{
+ m_nmi_enabled = state;
+
+ // NMI lines are tied together on both CPUs and connected to the LS74 /Q output
+ if (!m_nmi_enabled)
{
- case 1:
- m_nmi_enabled = data;
-
- // NMI lines are tied together on both CPUs and connected to the LS74 /Q output
- if (!m_nmi_enabled)
- {
- m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
- m_subcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
- }
- break;
-
- case 3:
- // start/halt ALPHA-8201
- m_alpha_8201->mcu_start_w(data);
- break;
-
- case 4:
- // ALPHA-8201 shared RAM bus direction: 0: mcu, 1: maincpu
- m_alpha_8201->bus_dir_w(!data);
- break;
-
- default:
- // 0: 0: sharedram = sub, 1: sharedram = main (TODO!)
- // 2: ?
- // 7: nothing? connected to +5v via resistor
- break;
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ m_subcpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
-
- m_control[offset] = data;
}
@@ -411,6 +384,14 @@ static MACHINE_CONFIG_START( shougi )
MCFG_DEVICE_ADD("alpha_8201", ALPHA_8201, XTAL_10MHz/4/8)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // 0: sharedram = sub, 1: sharedram = main (TODO!)
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(shougi_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // ?
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("alpha_8201", alpha_8201_device, mcu_start_w)) // start/halt ALPHA-8201
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("alpha_8201", alpha_8201_device, bus_dir_w)) MCFG_DEVCB_INVERT // ALPHA-8201 shared RAM bus direction: 0: mcu, 1: maincpu
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // nothing? connected to +5v via resistor
+
MCFG_QUANTUM_PERFECT_CPU("maincpu")
MCFG_WATCHDOG_ADD("watchdog")
diff --git a/src/mame/drivers/skyarmy.cpp b/src/mame/drivers/skyarmy.cpp
index c7f8b03d4c1..fa494e4b695 100644
--- a/src/mame/drivers/skyarmy.cpp
+++ b/src/mame/drivers/skyarmy.cpp
@@ -26,6 +26,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
@@ -56,12 +57,12 @@ public:
tilemap_t* m_tilemap;
int m_nmi;
- DECLARE_WRITE8_MEMBER(flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
- DECLARE_WRITE8_MEMBER(coin_counter_w);
- DECLARE_WRITE8_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
TILE_GET_INFO_MEMBER(get_tile_info);
@@ -79,14 +80,14 @@ void skyarmy_state::machine_start()
save_item(NAME(m_nmi));
}
-WRITE8_MEMBER(skyarmy_state::flip_screen_x_w)
+WRITE_LINE_MEMBER(skyarmy_state::flip_screen_x_w)
{
- flip_screen_x_set(data & 0x01);
+ flip_screen_x_set(state);
}
-WRITE8_MEMBER(skyarmy_state::flip_screen_y_w)
+WRITE_LINE_MEMBER(skyarmy_state::flip_screen_y_w)
{
- flip_screen_y_set(data & 0x01);
+ flip_screen_y_set(state);
}
TILE_GET_INFO_MEMBER(skyarmy_state::get_tile_info)
@@ -192,15 +193,15 @@ INTERRUPT_GEN_MEMBER(skyarmy_state::nmi_source)
}
-WRITE8_MEMBER(skyarmy_state::coin_counter_w)
+WRITE_LINE_MEMBER(skyarmy_state::coin_counter_w)
{
- machine().bookkeeping().coin_counter_w(0, data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(skyarmy_state::nmi_enable_w)
+WRITE_LINE_MEMBER(skyarmy_state::nmi_enable_w)
{
- m_nmi=data & 1;
+ m_nmi = state;
if (!m_nmi)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
@@ -213,14 +214,11 @@ static ADDRESS_MAP_START( skyarmy_map, AS_PROGRAM, 8, skyarmy_state )
AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") /* Color RAM */
AM_RANGE(0x9800, 0x983f) AM_RAM AM_SHARE("spriteram") /* Sprites */
AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("scrollram") /* Scroll RAM */
- AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW") AM_WRITE(coin_counter_w)
+ AM_RANGE(0xa000, 0xa000) AM_READ_PORT("DSW")
AM_RANGE(0xa001, 0xa001) AM_READ_PORT("P1")
AM_RANGE(0xa002, 0xa002) AM_READ_PORT("P2")
AM_RANGE(0xa003, 0xa003) AM_READ_PORT("SYSTEM")
- AM_RANGE(0xa004, 0xa004) AM_WRITE(nmi_enable_w) // ???
- AM_RANGE(0xa005, 0xa005) AM_WRITE(flip_screen_x_w)
- AM_RANGE(0xa006, 0xa006) AM_WRITE(flip_screen_y_w)
- AM_RANGE(0xa007, 0xa007) AM_WRITENOP // video RAM buffering?
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( skyarmy_io_map, AS_IO, 8, skyarmy_state )
@@ -325,6 +323,13 @@ static MACHINE_CONFIG_START( skyarmy )
MCFG_CPU_VBLANK_INT_DRIVER("screen", skyarmy_state, irq0_line_hold)
MCFG_CPU_PERIODIC_INT_DRIVER(skyarmy_state, nmi_source, 650) /* Hz */
+ MCFG_DEVICE_ADD("latch", LS259, 0) // 11C
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(skyarmy_state, coin_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(skyarmy_state, nmi_enable_w)) // ???
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(skyarmy_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(skyarmy_state, flip_screen_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // video RAM buffering?
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/skydiver.cpp b/src/mame/drivers/skydiver.cpp
index a02eb02254d..511a08074d9 100644
--- a/src/mame/drivers/skydiver.cpp
+++ b/src/mame/drivers/skydiver.cpp
@@ -144,9 +144,9 @@ PALETTE_INIT_MEMBER(skydiver_state, skydiver)
*
*************************************/
-WRITE8_MEMBER(skydiver_state::nmion_w)
+WRITE_LINE_MEMBER(skydiver_state::nmion_w)
{
- m_nmion = offset;
+ m_nmion = state;
}
@@ -168,24 +168,6 @@ INTERRUPT_GEN_MEMBER(skydiver_state::interrupt)
/*************************************
*
- * Sound handlers
- *
- *************************************/
-
-WRITE8_MEMBER(skydiver_state::sound_enable_w)
-{
- m_discrete->write(space, SKYDIVER_SOUND_EN, offset);
-}
-
-WRITE8_MEMBER(skydiver_state::whistle_w)
-{
- m_discrete->write(space, NODE_RELATIVE(SKYDIVER_WHISTLE1_EN, (offset >> 1)), offset & 0x01);
-}
-
-
-
-/*************************************
- *
* Main CPU memory handlers
*
*************************************/
@@ -195,19 +177,8 @@ static ADDRESS_MAP_START( skydiver_map, AS_PROGRAM, 8, skydiver_state )
AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x4300) AM_READWRITE(wram_r, wram_w)
AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x4000) AM_RAM /* RAM B1 */
AM_RANGE(0x0400, 0x07ff) AM_MIRROR(0x4000) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") /* RAMs K1,M1,P1,J1,N1,K/L1,L1,H/J1 */
- AM_RANGE(0x0800, 0x0801) AM_MIRROR(0x47f0) AM_WRITE(lamp_s_w)
- AM_RANGE(0x0802, 0x0803) AM_MIRROR(0x47f0) AM_WRITE(lamp_k_w)
- AM_RANGE(0x0804, 0x0805) AM_MIRROR(0x47f0) AM_WRITE(start_lamp_1_w)
- AM_RANGE(0x0806, 0x0807) AM_MIRROR(0x47f0) AM_WRITE(start_lamp_2_w)
- AM_RANGE(0x0808, 0x0809) AM_MIRROR(0x47f0) AM_WRITE(lamp_y_w)
- AM_RANGE(0x080a, 0x080b) AM_MIRROR(0x47f0) AM_WRITE(lamp_d_w)
- AM_RANGE(0x080c, 0x080d) AM_MIRROR(0x47f0) AM_WRITE(sound_enable_w)
- // AM_RANGE(0x1000, 0x1001) AM_MIRROR(0x47f0) AM_WRITE(jump1_lamps_w)
- AM_RANGE(0x1002, 0x1003) AM_MIRROR(0x47f0) AM_WRITE(coin_lockout_w)
- // AM_RANGE(0x1006, 0x1007) AM_MIRROR(0x47f0) AM_WRITE(jump2_lamps_w)
- AM_RANGE(0x1008, 0x100b) AM_MIRROR(0x47f0) AM_WRITE(whistle_w)
- AM_RANGE(0x100c, 0x100d) AM_MIRROR(0x47f0) AM_WRITE(nmion_w)
- AM_RANGE(0x100e, 0x100f) AM_MIRROR(0x47f0) AM_WRITE(width_w)
+ AM_RANGE(0x0800, 0x080f) AM_MIRROR(0x47f0) AM_DEVWRITE("latch1", f9334_device, write_a0)
+ AM_RANGE(0x1000, 0x100f) AM_MIRROR(0x47f0) AM_DEVWRITE("latch2", f9334_device, write_a0)
AM_RANGE(0x1800, 0x1800) AM_MIRROR(0x47e0) AM_READ_PORT("IN0")
AM_RANGE(0x1801, 0x1801) AM_MIRROR(0x47e0) AM_READ_PORT("IN1")
AM_RANGE(0x1802, 0x1802) AM_MIRROR(0x47e0) AM_READ_PORT("IN2")
@@ -222,7 +193,7 @@ static ADDRESS_MAP_START( skydiver_map, AS_PROGRAM, 8, skydiver_state )
AM_RANGE(0x180b, 0x180b) AM_MIRROR(0x47e4) AM_READ_PORT("IN11")
AM_RANGE(0x1810, 0x1810) AM_MIRROR(0x47e4) AM_READ_PORT("IN12")
AM_RANGE(0x1811, 0x1811) AM_MIRROR(0x47e4) AM_READ_PORT("IN13")
- AM_RANGE(0x2000, 0x201f) AM_MIRROR(0x47e0) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(_2000_201F_w)
+ AM_RANGE(0x2000, 0x201f) AM_MIRROR(0x47e0) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_WRITE(latch3_watchdog_w)
AM_RANGE(0x2800, 0x2fff) AM_MIRROR(0x4000) AM_ROM
AM_RANGE(0x3000, 0x37ff) AM_MIRROR(0x4000) AM_ROM
AM_RANGE(0x3800, 0x3fff) AM_ROM
@@ -385,6 +356,30 @@ static MACHINE_CONFIG_START( skydiver )
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8) // 128V clocks the same as VBLANK
+ MCFG_DEVICE_ADD("latch1", F9334, 0) // F12
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(skydiver_state, lamp_s_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(skydiver_state, lamp_k_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(skydiver_state, start_lamp_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(skydiver_state, start_lamp_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(skydiver_state, lamp_y_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(skydiver_state, lamp_d_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_SOUND_EN>))
+ MCFG_DEVICE_ADD("latch2", F9334, 0) // H12
+ //MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(skydiver_state, jump1_lamps_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(skydiver_state, coin_lockout_w))
+ //MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(skydiver_state, jump2_lamps_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_WHISTLE1_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_WHISTLE2_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(skydiver_state, nmion_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(skydiver_state, width_w))
+ MCFG_DEVICE_ADD("latch3", F9334, 0) // A11
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(skydiver_state, lamp_i_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(skydiver_state, lamp_v_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(skydiver_state, lamp_e_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(skydiver_state, lamp_r_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_OCT1_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_OCT2_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SKYDIVER_NOISE_RST>))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp
index 881ec6bf79d..d36e2a0c466 100644
--- a/src/mame/drivers/slapfght.cpp
+++ b/src/mame/drivers/slapfght.cpp
@@ -262,6 +262,7 @@ Stephh's notes (based on the games Z80 code and some tests) :
#include "cpu/z80/z80.h"
#include "cpu/m6805/m6805.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "speaker.h"
@@ -367,82 +368,49 @@ INTERRUPT_GEN_MEMBER(slapfght_state::vblank_irq)
device.execute().set_input_line(0, ASSERT_LINE);
}
-WRITE8_MEMBER(slapfght_state::irq_enable_w)
+WRITE_LINE_MEMBER(slapfght_state::irq_enable_w)
{
- m_main_irq_enabled = offset ? true : false;
+ m_main_irq_enabled = state ? true : false;
if (!m_main_irq_enabled)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
-WRITE8_MEMBER(slapfght_state::sound_reset_w)
+WRITE_LINE_MEMBER(slapfght_state::sound_reset_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, offset ? CLEAR_LINE : ASSERT_LINE);
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
- if (offset == 0)
+ if (state == 0)
m_sound_nmi_enabled = false;
}
-WRITE8_MEMBER(slapfght_state::prg_bank_w)
-{
- membank("bank1")->set_entry(offset);
-}
-
READ8_MEMBER(slapfght_state::vblank_r)
{
return m_screen->vblank() ? 1 : 0;
}
-static ADDRESS_MAP_START( perfrman_io_map, AS_IO, 8, slapfght_state )
+static ADDRESS_MAP_START( io_map_nomcu, AS_IO, 8, slapfght_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ(vblank_r)
- AM_RANGE(0x00, 0x01) AM_WRITE(sound_reset_w)
- AM_RANGE(0x02, 0x03) AM_WRITE(flipscreen_w)
- AM_RANGE(0x06, 0x07) AM_WRITE(irq_enable_w)
- AM_RANGE(0x0c, 0x0d) AM_WRITE(palette_bank_w)
-ADDRESS_MAP_END
-
-
-static ADDRESS_MAP_START( tigerh_io_map, AS_IO, 8, slapfght_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ(tigerh_mcu_status_r)
- AM_RANGE(0x00, 0x01) AM_WRITE(sound_reset_w)
- AM_RANGE(0x02, 0x03) AM_WRITE(flipscreen_w)
- AM_RANGE(0x06, 0x07) AM_WRITE(irq_enable_w)
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( tigerhb_io_map, AS_IO, 8, slapfght_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ(vblank_r) // no MCU
- AM_IMPORT_FROM( tigerh_io_map )
+ AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0)
ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( slapfigh_io_map, AS_IO, 8, slapfght_state )
+static ADDRESS_MAP_START( io_map_mcu, AS_IO, 8, slapfght_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ(tigerh_mcu_status_r)
- AM_RANGE(0x00, 0x01) AM_WRITE(sound_reset_w)
- AM_RANGE(0x02, 0x03) AM_WRITE(flipscreen_w)
- AM_RANGE(0x06, 0x07) AM_WRITE(irq_enable_w)
- AM_RANGE(0x08, 0x09) AM_WRITE(prg_bank_w)
+ AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( slapfighb1_io_map, AS_IO, 8, slapfght_state )
+static ADDRESS_MAP_START( getstarb1_io_map, AS_IO, 8, slapfght_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ(vblank_r) // no MCU
- AM_IMPORT_FROM( slapfigh_io_map )
+ AM_RANGE(0x00, 0x00) AM_READ(getstarb1_prot_r)
+ AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( getstar_io_map, AS_IO, 8, slapfght_state )
+static ADDRESS_MAP_START( getstarb2_io_map, AS_IO, 8, slapfght_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ(getstar_mcusim_status_r)
- AM_IMPORT_FROM( slapfigh_io_map )
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( getstarb1_io_map, AS_IO, 8, slapfght_state )
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ(getstarb1_prot_r)
- AM_IMPORT_FROM( getstar_io_map )
+ AM_RANGE(0x00, 0x0f) AM_DEVWRITE("mainlatch", ls259_device, write_a0)
ADDRESS_MAP_END
@@ -910,9 +878,15 @@ static MACHINE_CONFIG_START( perfrman )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/4) // 4MHz? XTAL is known, divider is guessed
MCFG_CPU_PROGRAM_MAP(perfrman_map)
- MCFG_CPU_IO_MAP(perfrman_io_map)
+ MCFG_CPU_IO_MAP(io_map_nomcu)
MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(slapfght_state, sound_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(slapfght_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(slapfght_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(slapfght_state, palette_bank_w))
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/8) // 2MHz? XTAL is known, divider is guessed
MCFG_CPU_PROGRAM_MAP(perfrman_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 240) // music speed, verified
@@ -955,9 +929,14 @@ static MACHINE_CONFIG_START( tigerh )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_36MHz/6) // 6MHz
MCFG_CPU_PROGRAM_MAP(tigerh_map_mcu)
- MCFG_CPU_IO_MAP(tigerh_io_map)
+ MCFG_CPU_IO_MAP(io_map_mcu)
MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(slapfght_state, sound_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(slapfght_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(slapfght_state, irq_enable_w))
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_36MHz/12) // 3MHz
MCFG_CPU_PROGRAM_MAP(tigerh_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 360) // music speed, verified with pcb recording
@@ -1001,7 +980,7 @@ static MACHINE_CONFIG_DERIVED( tigerhb1, tigerh )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(tigerhb1_map)
- MCFG_CPU_IO_MAP(tigerhb_io_map)
+ MCFG_CPU_IO_MAP(io_map_nomcu)
MCFG_DEVICE_REMOVE("bmcu")
MACHINE_CONFIG_END
@@ -1019,9 +998,15 @@ static MACHINE_CONFIG_START( slapfigh )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL_36MHz/6) // 6MHz
MCFG_CPU_PROGRAM_MAP(slapfigh_map_mcu)
- MCFG_CPU_IO_MAP(slapfigh_io_map)
+ MCFG_CPU_IO_MAP(io_map_mcu)
MCFG_CPU_VBLANK_INT_DRIVER("screen", slapfght_state, vblank_irq)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(slapfght_state, sound_reset_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(slapfght_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(slapfght_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1"))
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_36MHz/12) // 3MHz
MCFG_CPU_PROGRAM_MAP(tigerh_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(slapfght_state, sound_nmi, 180)
@@ -1066,7 +1051,7 @@ static MACHINE_CONFIG_DERIVED( slapfighb1, slapfigh )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(slapfighb1_map)
- MCFG_CPU_IO_MAP(slapfighb1_io_map)
+ MCFG_CPU_IO_MAP(io_map_nomcu)
MCFG_DEVICE_REMOVE("bmcu")
MACHINE_CONFIG_END
@@ -1090,7 +1075,7 @@ static MACHINE_CONFIG_DERIVED( getstarb2, slapfighb1 )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(getstar_map)
- MCFG_CPU_IO_MAP(getstar_io_map)
+ MCFG_CPU_IO_MAP(getstarb2_io_map)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/sonson.cpp b/src/mame/drivers/sonson.cpp
index a5aacf161b2..9c35e66cd07 100644
--- a/src/mame/drivers/sonson.cpp
+++ b/src/mame/drivers/sonson.cpp
@@ -54,33 +54,28 @@ TODO:
#include "includes/sonson.h"
#include "cpu/m6809/m6809.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "sound/ay8910.h"
#include "screen.h"
#include "speaker.h"
-WRITE8_MEMBER(sonson_state::sonson_sh_irqtrigger_w)
+WRITE_LINE_MEMBER(sonson_state::sh_irqtrigger_w)
{
- data &= 1;
-
- if (m_last_irq == 0 && data == 1)
- {
- /* setting bit 0 low then high triggers IRQ on the sound CPU */
+ // setting bit 0 low then high triggers IRQ on the sound CPU
+ if (state)
m_audiocpu->set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
- }
-
- m_last_irq = data;
}
-WRITE8_MEMBER(sonson_state::sonson_coin1_counter_w)
+WRITE_LINE_MEMBER(sonson_state::coin1_counter_w)
{
- machine().bookkeeping().coin_counter_w(0, data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(sonson_state::sonson_coin2_counter_w)
+WRITE_LINE_MEMBER(sonson_state::coin2_counter_w)
{
- machine().bookkeeping().coin_counter_w(1, data & 1);
+ machine().bookkeeping().coin_counter_w(1, state);
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sonson_state )
@@ -96,10 +91,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, sonson_state )
AM_RANGE(0x3006, 0x3006) AM_READ_PORT("DSW2")
AM_RANGE(0x3008, 0x3008) AM_WRITENOP // might be Y scroll, but the game always sets it to 0
AM_RANGE(0x3010, 0x3010) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
- AM_RANGE(0x3018, 0x3018) AM_WRITE(sonson_flipscreen_w)
- AM_RANGE(0x3019, 0x3019) AM_WRITE(sonson_sh_irqtrigger_w)
- AM_RANGE(0x301e, 0x301e) AM_WRITE(sonson_coin2_counter_w)
- AM_RANGE(0x301f, 0x301f) AM_WRITE(sonson_coin1_counter_w)
+ AM_RANGE(0x3018, 0x301f) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -231,16 +223,6 @@ GFXDECODE_END
-void sonson_state::machine_start()
-{
- save_item(NAME(m_last_irq));
-}
-
-void sonson_state::machine_reset()
-{
- m_last_irq = 0;
-}
-
static MACHINE_CONFIG_START( sonson )
/* basic machine hardware */
@@ -252,6 +234,11 @@ static MACHINE_CONFIG_START( sonson )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(sonson_state, irq0_line_hold, 4*60) /* FIRQs are triggered by the main CPU */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // A9
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sonson_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sonson_state, sh_irqtrigger_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sonson_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(sonson_state, coin1_counter_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/splash.cpp b/src/mame/drivers/splash.cpp
index 6f8e92a3f5e..222c0a70f12 100644
--- a/src/mame/drivers/splash.cpp
+++ b/src/mame/drivers/splash.cpp
@@ -74,22 +74,29 @@ WRITE16_MEMBER(splash_state::roldf_sh_irqtrigger_w)
space.device().execute().spin_until_time(attotime::from_usec(40));
}
-WRITE16_MEMBER(splash_state::coin_w)
+WRITE8_MEMBER(splash_state::coin_w)
{
- if (ACCESSING_BITS_8_15)
- {
- switch ((offset >> 3))
- {
- case 0x00: /* Coin Lockouts */
- case 0x01:
- machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, (data & 0x0400) >> 8);
- break;
- case 0x02: /* Coin Counters */
- case 0x03:
- machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, (data & 0x0100) >> 8);
- break;
- }
- }
+ m_outlatch->write_bit(offset >> 3, BIT(data, 0));
+}
+
+WRITE_LINE_MEMBER(splash_state::coin1_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, !state);
+}
+
+WRITE_LINE_MEMBER(splash_state::coin2_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(1, !state);
+}
+
+WRITE_LINE_MEMBER(splash_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(splash_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
static ADDRESS_MAP_START( splash_map, AS_PROGRAM, 16, splash_state )
@@ -99,8 +106,8 @@ static ADDRESS_MAP_START( splash_map, AS_PROGRAM, 16, splash_state )
AM_RANGE(0x840002, 0x840003) AM_READ_PORT("DSW2")
AM_RANGE(0x840004, 0x840005) AM_READ_PORT("P1")
AM_RANGE(0x840006, 0x840007) AM_READ_PORT("P2")
+ AM_RANGE(0x84000a, 0x84000b) AM_SELECT(0x000070) AM_WRITE8(coin_w, 0xff00) /* Coin Counters + Coin Lockout */
AM_RANGE(0x84000e, 0x84000f) AM_WRITE(splash_sh_irqtrigger_w) /* Sound command */
- AM_RANGE(0x84000a, 0x84003b) AM_WRITE(coin_w) /* Coin Counters + Coin Lockout */
AM_RANGE(0x880000, 0x8817ff) AM_RAM_WRITE(vram_w) AM_SHARE("videoram") /* Video RAM */
AM_RANGE(0x881800, 0x881803) AM_RAM AM_SHARE("vregs") /* Scroll registers */
AM_RANGE(0x881804, 0x881fff) AM_RAM /* Work RAM */
@@ -172,8 +179,8 @@ static ADDRESS_MAP_START( roldfrog_map, AS_PROGRAM, 16, splash_state )
AM_RANGE(0x840002, 0x840003) AM_READ_PORT("DSW2")
AM_RANGE(0x840004, 0x840005) AM_READ_PORT("P1")
AM_RANGE(0x840006, 0x840007) AM_READ_PORT("P2")
+ AM_RANGE(0x84000a, 0x84000b) AM_SELECT(0x000070) AM_WRITE8(coin_w, 0xff00) /* Coin Counters + Coin Lockout */
AM_RANGE(0x84000e, 0x84000f) AM_WRITE(roldf_sh_irqtrigger_w) /* Sound command */
- AM_RANGE(0x84000a, 0x84003b) AM_WRITE(coin_w) /* Coin Counters + Coin Lockout */
AM_RANGE(0x880000, 0x8817ff) AM_RAM_WRITE(vram_w) AM_SHARE("videoram") /* Video RAM */
AM_RANGE(0x881800, 0x881803) AM_RAM AM_SHARE("vregs") /* Scroll registers */
AM_RANGE(0x881804, 0x881fff) AM_RAM /* Work RAM */
@@ -501,6 +508,12 @@ static MACHINE_CONFIG_START( splash )
MCFG_CPU_PROGRAM_MAP(splash_sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(splash_state, nmi_line_pulse, 60*64) /* needed for the msm5205 to play the samples */
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // A8
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(splash_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(splash_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(splash_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(splash_state, coin2_counter_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(58)
@@ -557,6 +570,12 @@ static MACHINE_CONFIG_START( roldfrog )
MCFG_CPU_IO_MAP(roldfrog_sound_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", splash_state, roldfrog_interrupt)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(splash_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(splash_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(splash_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(splash_state, coin2_counter_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/sprint2.cpp b/src/mame/drivers/sprint2.cpp
index 915292612da..73e075122e9 100644
--- a/src/mame/drivers/sprint2.cpp
+++ b/src/mame/drivers/sprint2.cpp
@@ -47,8 +47,6 @@ DRIVER_INIT_MEMBER(sprint2_state,dominos4)
{
m_game = 3;
m_maincpu->space(AS_PROGRAM).install_read_port(0x0880, 0x0880, "SELFTTEST");
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x0c50, 0x0c5f, write8_delegate(FUNC(sprint2_state::dominos4_lamp3_w),this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x0c60, 0x0c6f, write8_delegate(FUNC(sprint2_state::dominos4_lamp4_w),this));
}
int sprint2_state::service_mode()
@@ -170,7 +168,7 @@ READ8_MEMBER(sprint2_state::sprint2_sync_r)
{
uint8_t val = 0;
- if (m_attract != 0)
+ if (m_outlatch->q0_r() != 0)
val |= 0x10;
if (m_screen->vpos() == 261)
@@ -212,12 +210,9 @@ WRITE8_MEMBER(sprint2_state::sprint2_wram_w)
}
-WRITE8_MEMBER(sprint2_state::sprint2_attract_w)
+WRITE8_MEMBER(sprint2_state::output_latch_w)
{
- m_attract = offset & 1;
-
- // also DOMINOS_ATTRACT_EN
- m_discrete->write(space, SPRINT2_ATTRACT_EN, m_attract);
+ m_outlatch->write_bit(offset >> 4, offset & 1);
}
@@ -227,34 +222,24 @@ WRITE8_MEMBER(sprint2_state::sprint2_noise_reset_w)
}
-WRITE8_MEMBER(sprint2_state::sprint2_skid1_w)
+WRITE_LINE_MEMBER(sprint2_state::lamp1_w)
{
- // also DOMINOS_TUMBLE_EN
- m_discrete->write(space, SPRINT2_SKIDSND1_EN, offset & 1);
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(sprint2_state::sprint2_skid2_w)
+WRITE_LINE_MEMBER(sprint2_state::lamp2_w)
{
- m_discrete->write(space, SPRINT2_SKIDSND2_EN, offset & 1);
+ output().set_led_value(1, state);
}
-
-WRITE8_MEMBER(sprint2_state::sprint2_lamp1_w)
+WRITE_LINE_MEMBER(sprint2_state::lamp3_w)
{
- output().set_led_value(0, offset & 1);
-}
-WRITE8_MEMBER(sprint2_state::sprint2_lamp2_w)
-{
- output().set_led_value(1, offset & 1);
+ output().set_led_value(2, state);
}
-WRITE8_MEMBER(sprint2_state::dominos4_lamp3_w)
+WRITE_LINE_MEMBER(sprint2_state::lamp4_w)
{
- output().set_led_value(2, offset & 1);
-}
-WRITE8_MEMBER(sprint2_state::dominos4_lamp4_w)
-{
- output().set_led_value(3, offset & 1);
+ output().set_led_value(3, state);
}
static ADDRESS_MAP_START( sprint2_map, AS_PROGRAM, 8, sprint2_state )
@@ -268,12 +253,7 @@ static ADDRESS_MAP_START( sprint2_map, AS_PROGRAM, 8, sprint2_state )
AM_RANGE(0x0880, 0x08bf) AM_READ(sprint2_steering1_r)
AM_RANGE(0x08c0, 0x08ff) AM_READ(sprint2_steering2_r)
AM_RANGE(0x0c00, 0x0fff) AM_READ(sprint2_sync_r)
- AM_RANGE(0x0c00, 0x0c0f) AM_WRITE(sprint2_attract_w)
- AM_RANGE(0x0c10, 0x0c1f) AM_WRITE(sprint2_skid1_w)
- AM_RANGE(0x0c20, 0x0c2f) AM_WRITE(sprint2_skid2_w)
- AM_RANGE(0x0c30, 0x0c3f) AM_WRITE(sprint2_lamp1_w)
- AM_RANGE(0x0c40, 0x0c4f) AM_WRITE(sprint2_lamp2_w)
- AM_RANGE(0x0c60, 0x0c6f) AM_WRITENOP /* SPARE */
+ AM_RANGE(0x0c00, 0x0c7f) AM_WRITE(output_latch_w)
AM_RANGE(0x0c80, 0x0cff) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x0d00, 0x0d7f) AM_WRITE(sprint2_collision_reset1_w)
AM_RANGE(0x0d80, 0x0dff) AM_WRITE(sprint2_collision_reset2_w)
@@ -556,6 +536,14 @@ static MACHINE_CONFIG_START( sprint2 )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_DEVICE_ADD("outlatch", F9334, 0) // at H8
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT2_ATTRACT_EN>)) // also DOMINOS_ATTRACT_EN
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT2_SKIDSND1_EN>)) // also DOMINOS_TUMBLE_EN
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT2_SKIDSND2_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sprint2_state, lamp1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(sprint2_state, lamp2_w))
+ //MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sprint2_state, sprint2_spare_w))
+
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
MCFG_DISCRETE_INTF(sprint2)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
@@ -592,6 +580,12 @@ static MACHINE_CONFIG_DERIVED( dominos, sprint2 )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( dominos4, dominos )
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(sprint2_state, lamp3_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(sprint2_state, lamp4_w))
+MACHINE_CONFIG_END
+
ROM_START( sprint1 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "6290-01.b1", 0x2000, 0x0800, CRC(41fc985e) SHA1(7178846480cbf8d15955ccd987d0b0e902ab9f90) )
@@ -721,4 +715,4 @@ GAME( 1976, sprint2, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "
GAME( 1976, sprint2a, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "Atari (Kee Games)", "Sprint 2 (set 2)", 0 )
GAME( 1976, sprint2h, sprint1, sprint2, sprint2, sprint2_state, sprint2, ROT0, "hack", "Sprint 2 (color kit, Italy)", MACHINE_WRONG_COLORS ) // Italian hack, supposedly is color instead of b/w? how?
GAME( 1977, dominos, 0, dominos, dominos, sprint2_state, dominos, ROT0, "Atari", "Dominos", 0 )
-GAME( 1977, dominos4, dominos, dominos, dominos4,sprint2_state, dominos4,ROT0, "Atari", "Dominos 4 (Cocktail)", 0 )
+GAME( 1977, dominos4, dominos, dominos4, dominos4,sprint2_state, dominos4,ROT0, "Atari", "Dominos 4 (Cocktail)", 0 )
diff --git a/src/mame/drivers/sprint4.cpp b/src/mame/drivers/sprint4.cpp
index 56fe8c86c7f..b65be1a2ca3 100644
--- a/src/mame/drivers/sprint4.cpp
+++ b/src/mame/drivers/sprint4.cpp
@@ -11,6 +11,7 @@ Atari Sprint 4 driver
#include "audio/sprint4.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "speaker.h"
#define MASTER_CLOCK 12096000
@@ -195,43 +196,35 @@ WRITE8_MEMBER(sprint4_state::da_latch_w)
}
-WRITE8_MEMBER(sprint4_state::lamp_w)
+WRITE_LINE_MEMBER(sprint4_state::lamp0_w)
{
- output().set_led_value((offset >> 1) & 3, offset & 1);
+ output().set_led_value(0, state);
}
-
-#ifdef UNUSED_FUNCTION
-WRITE8_MEMBER(sprint4_state::lockout_w)
+WRITE_LINE_MEMBER(sprint4_state::lamp1_w)
{
- machine().bookkeeping().coin_lockout_global_w(~offset & 1);
+ output().set_led_value(1, state);
}
-#endif
-
-WRITE8_MEMBER(sprint4_state::screech_1_w)
+WRITE_LINE_MEMBER(sprint4_state::lamp2_w)
{
- m_discrete->write(space, SPRINT4_SCREECH_EN_1, offset & 1);
+ output().set_led_value(2, state);
}
-
-WRITE8_MEMBER(sprint4_state::screech_2_w)
+WRITE_LINE_MEMBER(sprint4_state::lamp3_w)
{
- m_discrete->write(space, SPRINT4_SCREECH_EN_2, offset & 1);
+ output().set_led_value(3, state);
}
-WRITE8_MEMBER(sprint4_state::screech_3_w)
+#ifdef UNUSED_FUNCTION
+WRITE8_MEMBER(sprint4_state::lockout_w)
{
- m_discrete->write(space, SPRINT4_SCREECH_EN_3, offset & 1);
+ machine().bookkeeping().coin_lockout_global_w(~offset & 1);
}
+#endif
-WRITE8_MEMBER(sprint4_state::screech_4_w)
-{
- m_discrete->write(space, SPRINT4_SCREECH_EN_4, offset & 1);
-}
-
WRITE8_MEMBER(sprint4_state::bang_w)
{
m_discrete->write(space, SPRINT4_BANG_DATA, data & 0x0f);
@@ -264,11 +257,7 @@ static ADDRESS_MAP_START( sprint4_cpu_map, AS_PROGRAM, 8, sprint4_state )
AM_RANGE(0x0040, 0x0041) AM_MIRROR(0x718) AM_WRITE(da_latch_w)
AM_RANGE(0x0042, 0x0043) AM_MIRROR(0x718) AM_WRITE(bang_w)
AM_RANGE(0x0044, 0x0045) AM_MIRROR(0x718) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x0060, 0x0067) AM_MIRROR(0x710) AM_WRITE(lamp_w)
- AM_RANGE(0x0068, 0x0069) AM_MIRROR(0x710) AM_WRITE(screech_1_w)
- AM_RANGE(0x006a, 0x006b) AM_MIRROR(0x710) AM_WRITE(screech_2_w)
- AM_RANGE(0x006c, 0x006d) AM_MIRROR(0x710) AM_WRITE(screech_3_w)
- AM_RANGE(0x006e, 0x006f) AM_MIRROR(0x710) AM_WRITE(screech_4_w)
+ AM_RANGE(0x0060, 0x006f) AM_MIRROR(0x710) AM_DEVWRITE("latch", f9334_device, write_a0)
AM_RANGE(0x2000, 0x27ff) AM_NOP /* diagnostic ROM */
AM_RANGE(0x2800, 0x3fff) AM_ROM
@@ -433,6 +422,16 @@ static MACHINE_CONFIG_START( sprint4 )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+ MCFG_DEVICE_ADD("latch", F9334, 0) // at E11
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(sprint4_state, lamp0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(sprint4_state, lamp1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(sprint4_state, lamp2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(sprint4_state, lamp3_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_1>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_2>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_3>))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SPRINT4_SCREECH_EN_4>))
+
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
MCFG_DISCRETE_INTF(sprint4)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
diff --git a/src/mame/drivers/sprint8.cpp b/src/mame/drivers/sprint8.cpp
index 1787e21f7cc..45b5b4dc6ba 100644
--- a/src/mame/drivers/sprint8.cpp
+++ b/src/mame/drivers/sprint8.cpp
@@ -9,7 +9,6 @@ Atari Sprint 8 driver
#include "emu.h"
#include "includes/sprint8.h"
#include "cpu/m6800/m6800.h"
-#include "speaker.h"
@@ -96,14 +95,19 @@ WRITE8_MEMBER(sprint8_state::lockout_w)
}
-WRITE8_MEMBER(sprint8_state::int_reset_w)
+WRITE_LINE_MEMBER(sprint8_state::int_reset_w)
{
- m_collision_reset = !(data & 1);
+ m_collision_reset = !state;
if (m_collision_reset)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
+WRITE_LINE_MEMBER(sprint8_state::team_w)
+{
+ m_team = state;
+}
+
static ADDRESS_MAP_START( sprint8_map, AS_PROGRAM, 8, sprint8_state )
AM_RANGE(0x0000, 0x00ff) AM_RAM
@@ -117,14 +121,8 @@ static ADDRESS_MAP_START( sprint8_map, AS_PROGRAM, 8, sprint8_state )
AM_RANGE(0x1c10, 0x1c1f) AM_WRITEONLY AM_SHARE("pos_v_ram")
AM_RANGE(0x1c20, 0x1c2f) AM_WRITEONLY AM_SHARE("pos_d_ram")
AM_RANGE(0x1c30, 0x1c37) AM_WRITE(lockout_w)
- AM_RANGE(0x1d00, 0x1d00) AM_WRITE(int_reset_w)
- AM_RANGE(0x1d01, 0x1d01) AM_WRITE(crash_w)
- AM_RANGE(0x1d02, 0x1d02) AM_WRITE(screech_w)
- AM_RANGE(0x1d03, 0x1d03) AM_WRITENOP
- AM_RANGE(0x1d04, 0x1d04) AM_WRITENOP
- AM_RANGE(0x1d05, 0x1d05) AM_WRITEONLY AM_SHARE("team")
- AM_RANGE(0x1d06, 0x1d06) AM_WRITE(attract_w)
- AM_RANGE(0x1e00, 0x1e07) AM_WRITE(motor_w)
+ AM_RANGE(0x1d00, 0x1d07) AM_DEVWRITE("latch", f9334_device, write_d0)
+ AM_RANGE(0x1e00, 0x1e07) AM_DEVWRITE("motor", f9334_device, write_d0)
AM_RANGE(0x1f00, 0x1f00) AM_WRITENOP /* probably a watchdog, disabled in service mode */
AM_RANGE(0x2000, 0x3fff) AM_ROM
AM_RANGE(0xf800, 0xffff) AM_ROM
@@ -479,23 +477,7 @@ static MACHINE_CONFIG_START( sprint8 )
MCFG_PALETTE_INDIRECT_ENTRIES(18)
MCFG_PALETTE_INIT_OWNER(sprint8_state, sprint8)
- /* sound hardware */
- /* the proper way is to hook up 4 speakers, but they are not really
- * F/R/L/R speakers. Though you can pretend the 1-2 mix is the front. */
- MCFG_SPEAKER_ADD("speaker_1_2", 0.0, 0.0, 1.0) /* front */
- MCFG_SPEAKER_ADD("speaker_3_7", -0.2, 0.0, 1.0) /* left */
- MCFG_SPEAKER_ADD("speaker_5_6", 0.0, 0.0, -0.5) /* back */
- MCFG_SPEAKER_ADD("speaker_4_8", 0.2, 0.0, 1.0) /* right */
-
- MCFG_SOUND_ADD("discrete", DISCRETE, 0)
- MCFG_DISCRETE_INTF(sprint8)
- MCFG_SOUND_ROUTE(0, "speaker_1_2", 1.0)
- /* volumes on other channels defaulted to off, */
- /* user can turn them up if needed. */
- /* The game does not sound good with all channels mixed to stereo. */
- MCFG_SOUND_ROUTE(1, "speaker_3_7", 0.0)
- MCFG_SOUND_ROUTE(2, "speaker_5_6", 0.0)
- MCFG_SOUND_ROUTE(3, "speaker_4_8", 0.0)
+ MCFG_FRAGMENT_ADD(sprint8_audio)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/starshp1.cpp b/src/mame/drivers/starshp1.cpp
index 5f57715c250..705cccc77af 100644
--- a/src/mame/drivers/starshp1.cpp
+++ b/src/mame/drivers/starshp1.cpp
@@ -12,6 +12,7 @@ Atari Starship 1 driver
#include "emu.h"
#include "includes/starshp1.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "speaker.h"
@@ -24,42 +25,23 @@ INTERRUPT_GEN_MEMBER(starshp1_state::starshp1_interrupt)
}
-WRITE8_MEMBER(starshp1_state::starshp1_audio_w)
+WRITE_LINE_MEMBER(starshp1_state::attract_w)
{
- data &= 1;
-
- switch (offset & 7)
- {
- case 0:
- m_attract = data;
- m_discrete->write(space, STARSHP1_ATTRACT, data);
- break;
- case 1:
- m_phasor = data;
- m_discrete->write(space, STARSHP1_PHASOR_ON, data);
- break;
- case 2:
- m_discrete->write(space, STARSHP1_KICKER, data);
- break;
- case 3:
- m_discrete->write(space, STARSHP1_SL1, data);
- break;
- case 4:
- m_discrete->write(space, STARSHP1_SL2, data);
- break;
- case 5:
- m_discrete->write(space, STARSHP1_MOLVL, data);
- break;
- case 6:
- m_discrete->write(space, STARSHP1_NOISE_FREQ, data);
- break;
- }
+ m_attract = state;
+ m_discrete->write(machine().dummy_space(), STARSHP1_ATTRACT, state);
machine().bookkeeping().coin_lockout_w(0, !m_attract);
machine().bookkeeping().coin_lockout_w(1, !m_attract);
}
+WRITE_LINE_MEMBER(starshp1_state::phasor_w)
+{
+ m_phasor = state;
+ m_discrete->write(machine().dummy_space(), STARSHP1_PHASOR_ON, state);
+}
+
+
WRITE8_MEMBER(starshp1_state::starshp1_collision_reset_w)
{
m_collision_latch = 0;
@@ -131,37 +113,45 @@ WRITE8_MEMBER(starshp1_state::starshp1_analog_out_w)
}
-WRITE8_MEMBER(starshp1_state::starshp1_misc_w)
+WRITE_LINE_MEMBER(starshp1_state::ship_explode_w)
{
- data &= 1;
+ m_ship_explode = state;
+}
- switch (offset & 7)
- {
- case 0:
- m_ship_explode = data;
- break;
- case 1:
- m_circle_mod = data;
- break;
- case 2:
- m_circle_kill = !data;
- break;
- case 3:
- m_starfield_kill = data;
- break;
- case 4:
- m_inverse = data;
- break;
- case 5:
- /* BLACK HOLE, not used */
- break;
- case 6:
- m_mux = data;
- break;
- case 7:
- output().set_led_value(0, !data);
- break;
- }
+
+WRITE_LINE_MEMBER(starshp1_state::circle_mod_w)
+{
+ m_circle_mod = state;
+}
+
+
+WRITE_LINE_MEMBER(starshp1_state::circle_kill_w)
+{
+ m_circle_kill = !state;
+}
+
+
+WRITE_LINE_MEMBER(starshp1_state::starfield_kill_w)
+{
+ m_starfield_kill = state;
+}
+
+
+WRITE_LINE_MEMBER(starshp1_state::inverse_w)
+{
+ m_inverse = state;
+}
+
+
+WRITE_LINE_MEMBER(starshp1_state::mux_w)
+{
+ m_mux = state;
+}
+
+
+WRITE_LINE_MEMBER(starshp1_state::led_w)
+{
+ output().set_led_value(0, !state);
}
@@ -179,9 +169,9 @@ static ADDRESS_MAP_START( starshp1_map, AS_PROGRAM, 8, starshp1_state )
AM_RANGE(0xd400, 0xd40f) AM_WRITEONLY AM_SHARE("obj_ram")
AM_RANGE(0xd800, 0xd800) AM_READ(starshp1_rng_r)
AM_RANGE(0xd800, 0xd80f) AM_WRITE(starshp1_collision_reset_w)
- AM_RANGE(0xdc00, 0xdc0f) AM_WRITE(starshp1_misc_w)
+ AM_RANGE(0xdc00, 0xdc07) AM_MIRROR(0x0008) AM_DEVWRITE("misclatch", f9334_device, write_d0)
AM_RANGE(0xdd00, 0xdd0f) AM_WRITE(starshp1_analog_in_w)
- AM_RANGE(0xde00, 0xde0f) AM_WRITE(starshp1_audio_w)
+ AM_RANGE(0xde00, 0xde07) AM_MIRROR(0x0008) AM_DEVWRITE("audiolatch", f9334_device, write_d0)
AM_RANGE(0xdf00, 0xdf0f) AM_WRITE(starshp1_analog_out_w)
AM_RANGE(0xf000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -305,6 +295,16 @@ static MACHINE_CONFIG_START( starshp1 )
MCFG_CPU_PROGRAM_MAP(starshp1_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", starshp1_state, starshp1_interrupt)
+ MCFG_DEVICE_ADD("misclatch", F9334, 0) // C8
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(starshp1_state, ship_explode_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(starshp1_state, circle_mod_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(starshp1_state, circle_kill_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(starshp1_state, starfield_kill_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(starshp1_state, inverse_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // BLACK HOLE, not used
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(starshp1_state, mux_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(starshp1_state, led_w))
+
/* video hardware */
@@ -325,6 +325,15 @@ static MACHINE_CONFIG_START( starshp1 )
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
MCFG_DISCRETE_INTF(starshp1)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+
+ MCFG_DEVICE_ADD("audiolatch", F9334, 0) // D9
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(starshp1_state, attract_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(starshp1_state, phasor_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_KICKER>))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_SL1>))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_SL2>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_MOLVL>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<STARSHP1_NOISE_FREQ>))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/starwars.cpp b/src/mame/drivers/starwars.cpp
index 116706f7fef..54f911cac1e 100644
--- a/src/mame/drivers/starwars.cpp
+++ b/src/mame/drivers/starwars.cpp
@@ -29,6 +29,7 @@
#include "includes/slapstic.h"
#include "cpu/m6809/m6809.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "video/vector.h"
#include "video/avgdvg.h"
@@ -63,17 +64,12 @@ WRITE8_MEMBER(starwars_state::quad_pokeyn_w)
void starwars_state::machine_reset()
{
/* ESB-specific */
- if (m_is_esb)
+ if (m_slapstic_device.found())
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
/* reset the slapstic */
m_slapstic_device->slapstic_reset();
m_slapstic_current_bank = m_slapstic_device->slapstic_bank();
memcpy(m_slapstic_base, &m_slapstic_source[m_slapstic_current_bank * 0x2000], 0x2000);
-
- /* reset all the banks */
- starwars_out_w(space, 4, 0);
}
/* reset the matrix processor */
@@ -150,7 +146,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, starwars_state )
AM_RANGE(0x4620, 0x463f) AM_DEVWRITE("avg", avg_starwars_device, reset_w)
AM_RANGE(0x4640, 0x465f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x4660, 0x467f) AM_WRITE(irq_ack_w)
- AM_RANGE(0x4680, 0x469f) AM_READNOP AM_WRITE(starwars_out_w)
+ AM_RANGE(0x4680, 0x4687) AM_READNOP AM_MIRROR(0x0018) AM_DEVWRITE("outlatch", ls259_device, write_d7)
AM_RANGE(0x46a0, 0x46bf) AM_WRITE(starwars_nstore_w)
AM_RANGE(0x46c0, 0x46c2) AM_WRITE(starwars_adc_select_w)
AM_RANGE(0x46e0, 0x46e0) AM_WRITE(starwars_soundrst_w)
@@ -320,6 +316,16 @@ static MACHINE_CONFIG_START( starwars )
MCFG_X2212_ADD_AUTOSAVE("x2212") /* nvram */
+ MCFG_DEVICE_ADD("outlatch", LS259, 0) // 9L/M
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(starwars_state, coin1_counter_w)) // Coin counter 1
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(starwars_state, coin2_counter_w)) // Coin counter 2
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(starwars_state, led3_w)) // LED 3
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(starwars_state, led2_w)) // LED 2
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1")) // bank switch
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(starwars_state, prng_reset_w)) // reset PRNG
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(starwars_state, led1_w)) // LED 1
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(starwars_state, recall_w)) // NVRAM array recall
+
/* video hardware */
MCFG_VECTOR_ADD("vector")
MCFG_SCREEN_ADD("screen", VECTOR)
@@ -359,6 +365,10 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( esb, starwars )
MCFG_SLAPSTIC_ADD("slapstic", 101)
+
+ MCFG_DEVICE_MODIFY("outlatch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(MEMBANK("bank1"))
+ MCFG_DEVCB_CHAIN_OUTPUT(MEMBANK("bank2"))
MACHINE_CONFIG_END
@@ -528,7 +538,6 @@ ROM_END
DRIVER_INIT_MEMBER(starwars_state,starwars)
{
/* prepare the mathbox */
- m_is_esb = 0;
starwars_mproc_init();
/* initialize banking */
@@ -553,7 +562,6 @@ DRIVER_INIT_MEMBER(starwars_state,esb)
m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xffff, "bank2");
/* prepare the matrix processor */
- m_is_esb = 1;
starwars_mproc_init();
/* initialize banking */
diff --git a/src/mame/drivers/subs.cpp b/src/mame/drivers/subs.cpp
index 76a30841615..70faf483713 100644
--- a/src/mame/drivers/subs.cpp
+++ b/src/mame/drivers/subs.cpp
@@ -23,7 +23,7 @@
#include "includes/subs.h"
#include "cpu/m6502/m6502.h"
-#include "sound/discrete.h"
+#include "machine/74259.h"
#include "rendlay.h"
#include "screen.h"
#include "speaker.h"
@@ -59,15 +59,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, subs_state )
AM_RANGE(0x0020, 0x0027) AM_READ(coin_r)
// AM_RANGE(0x0040, 0x0040) AM_WRITE(timer_reset_w)
AM_RANGE(0x0060, 0x0063) AM_READ(options_r)
- AM_RANGE(0x0060, 0x0061) AM_WRITE(lamp1_w)
- AM_RANGE(0x0062, 0x0063) AM_WRITE(lamp2_w)
- AM_RANGE(0x0064, 0x0065) AM_WRITE(sonar2_w)
- AM_RANGE(0x0066, 0x0067) AM_WRITE(sonar1_w)
-// Schematics show crash and explode reversed. But this is proper.
- AM_RANGE(0x0068, 0x0069) AM_WRITE(explode_w)
- AM_RANGE(0x006a, 0x006b) AM_WRITE(crash_w)
- AM_RANGE(0x006c, 0x006d) AM_WRITE(invert1_w)
- AM_RANGE(0x006e, 0x006f) AM_WRITE(invert2_w)
+ AM_RANGE(0x0060, 0x006f) AM_DEVWRITE("latch", ls259_device, write_a0)
AM_RANGE(0x0090, 0x009f) AM_SHARE("spriteram")
AM_RANGE(0x0000, 0x01ff) AM_RAM
AM_RANGE(0x0800, 0x0bff) AM_RAM AM_SHARE("videoram")
@@ -220,6 +212,17 @@ static MACHINE_CONFIG_START( subs )
MCFG_DISCRETE_INTF(subs)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DEVICE_ADD("latch", LS259, 0) // C9
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(subs_state, lamp1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(subs_state, lamp2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_SONAR2_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_SONAR1_EN>))
+ // Schematics show crash and explode reversed. But this is proper.
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_EXPLODE_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<SUBS_CRASH_EN>))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(subs_state, invert1_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(subs_state, invert2_w))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/tankbatt.cpp b/src/mame/drivers/tankbatt.cpp
index ba260df01cf..74c6f313695 100644
--- a/src/mame/drivers/tankbatt.cpp
+++ b/src/mame/drivers/tankbatt.cpp
@@ -62,6 +62,7 @@ Known issues:
#include "includes/tankbatt.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "sound/samples.h"
#include "screen.h"
#include "speaker.h"
@@ -73,9 +74,14 @@ void tankbatt_state::machine_start()
save_item(NAME(m_sound_enable));
}
-WRITE8_MEMBER(tankbatt_state::led_w)
+WRITE_LINE_MEMBER(tankbatt_state::led0_w)
{
- output().set_led_value(offset,data & 1);
+ machine().output().set_led_value(0, state);
+}
+
+WRITE_LINE_MEMBER(tankbatt_state::led1_w)
+{
+ machine().output().set_led_value(1, state);
}
READ8_MEMBER(tankbatt_state::in0_r)
@@ -102,21 +108,21 @@ READ8_MEMBER(tankbatt_state::dsw_r)
return ((val << (7 - offset)) & 0x80);
}
-WRITE8_MEMBER(tankbatt_state::interrupt_enable_w)
+WRITE_LINE_MEMBER(tankbatt_state::interrupt_enable_w)
{
- m_nmi_enable = !data;
- m_sound_enable = !data;
+ m_nmi_enable = !state;
+ m_sound_enable = !state;
/* hack - turn off the engine noise if the normal game nmi's are disabled */
- if (data) m_samples->stop(2);
+ if (state) m_samples->stop(2);
}
-WRITE8_MEMBER(tankbatt_state::demo_interrupt_enable_w)
+WRITE_LINE_MEMBER(tankbatt_state::demo_interrupt_enable_w)
{
- m_nmi_enable = data;
+ m_nmi_enable = state;
}
-WRITE8_MEMBER(tankbatt_state::sh_expl_w)
+WRITE_LINE_MEMBER(tankbatt_state::sh_expl_w)
{
if (m_sound_enable)
{
@@ -124,11 +130,11 @@ WRITE8_MEMBER(tankbatt_state::sh_expl_w)
}
}
-WRITE8_MEMBER(tankbatt_state::sh_engine_w)
+WRITE_LINE_MEMBER(tankbatt_state::sh_engine_w)
{
if (m_sound_enable)
{
- if (data)
+ if (state)
m_samples->start(2, 2, true);
else
m_samples->start(2, 1, true);
@@ -136,7 +142,7 @@ WRITE8_MEMBER(tankbatt_state::sh_engine_w)
else m_samples->stop(2);
}
-WRITE8_MEMBER(tankbatt_state::sh_fire_w)
+WRITE_LINE_MEMBER(tankbatt_state::sh_fire_w)
{
if (m_sound_enable)
{
@@ -150,16 +156,15 @@ WRITE8_MEMBER(tankbatt_state::irq_ack_w)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
-WRITE8_MEMBER(tankbatt_state::coincounter_w)
+WRITE_LINE_MEMBER(tankbatt_state::coincounter_w)
{
- machine().bookkeeping().coin_counter_w(0,data & 1);
- machine().bookkeeping().coin_counter_w(1,data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(tankbatt_state::coinlockout_w)
+WRITE_LINE_MEMBER(tankbatt_state::coinlockout_w)
{
- machine().bookkeeping().coin_lockout_w(0,data & 1);
- machine().bookkeeping().coin_lockout_w(1,data & 1);
+ machine().bookkeeping().coin_lockout_w(0, state);
+ machine().bookkeeping().coin_lockout_w(1, state);
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tankbatt_state )
@@ -167,18 +172,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tankbatt_state )
AM_RANGE(0x0010, 0x01ff) AM_RAM
AM_RANGE(0x0200, 0x07ff) AM_RAM
AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x0c00, 0x0c07) AM_READ(in0_r)
- AM_RANGE(0x0c00, 0x0c01) AM_WRITE(led_w)
- AM_RANGE(0x0c02, 0x0c02) AM_WRITE(coincounter_w)
- AM_RANGE(0x0c03, 0x0c03) AM_WRITE(coinlockout_w)
- AM_RANGE(0x0c08, 0x0c0f) AM_READ(in1_r)
- AM_RANGE(0x0c08, 0x0c08) AM_WRITENOP //coin counter mirror?
- AM_RANGE(0x0c0a, 0x0c0a) AM_WRITE(interrupt_enable_w)
- AM_RANGE(0x0c0b, 0x0c0b) AM_WRITE(sh_engine_w)
- AM_RANGE(0x0c0c, 0x0c0c) AM_WRITE(sh_fire_w)
- AM_RANGE(0x0c0d, 0x0c0d) AM_WRITE(sh_expl_w) // bit 7 == led for the start 2 button
- AM_RANGE(0x0c0e, 0x0c0e) AM_WRITENOP //bit 7 == led for the start 1 button
- AM_RANGE(0x0c0f, 0x0c0f) AM_WRITE(demo_interrupt_enable_w)
+ AM_RANGE(0x0c00, 0x0c07) AM_READ(in0_r) AM_DEVWRITE("outlatch", cd4099_device, write_d0)
+ AM_RANGE(0x0c08, 0x0c0f) AM_READ(in1_r) AM_DEVWRITE("mainlatch", cd4099_device, write_d0)
AM_RANGE(0x0c10, 0x0c10) AM_WRITE(irq_ack_w)
AM_RANGE(0x0c18, 0x0c1f) AM_READ(dsw_r)
AM_RANGE(0x0c18, 0x0c18) AM_WRITENOP /* watchdog ?? */
@@ -289,6 +284,21 @@ static MACHINE_CONFIG_START( tankbatt )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", tankbatt_state, interrupt)
+ MCFG_DEVICE_ADD("mainlatch", CD4099, 0) // latches at 4H and 5H (are the empty 4J and 5J locations for LS259 substitution?)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) //coin counter mirror?
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tankbatt_state, interrupt_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tankbatt_state, sh_engine_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tankbatt_state, sh_fire_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tankbatt_state, sh_expl_w)) // bit 7 also set by ASL instruction
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // bit 7 also set by ASL instruction
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tankbatt_state, demo_interrupt_enable_w))
+
+ MCFG_DEVICE_ADD("outlatch", CD4099, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tankbatt_state, led0_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tankbatt_state, led1_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tankbatt_state, coincounter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tankbatt_state, coinlockout_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/targeth.cpp b/src/mame/drivers/targeth.cpp
index 58a4a8f7768..d9ca413b922 100644
--- a/src/mame/drivers/targeth.cpp
+++ b/src/mame/drivers/targeth.cpp
@@ -101,9 +101,19 @@ WRITE16_MEMBER(targeth_state::OKIM6295_bankswitch_w)
}
}
-WRITE16_MEMBER(targeth_state::coin_counter_w)
+WRITE16_MEMBER(targeth_state::output_latch_w)
{
- machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
+ m_outlatch->write_bit(offset >> 3, BIT(data, 0));
+}
+
+WRITE_LINE_MEMBER(targeth_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(targeth_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
WRITE8_MEMBER(targeth_state::shareram_w)
@@ -139,10 +149,10 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, targeth_state )
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("DSW1")
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("SYSTEM") /* Coins, Start & Fire buttons */
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SERVICE") /* Service & Guns Reload? */
+ AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE(output_latch_w)
AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) /* OKI6295 bankswitch */
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */
- AM_RANGE(0x700010, 0x70001b) AM_WRITENOP /* ??? Guns reload related? */
- AM_RANGE(0x70002a, 0x70003b) AM_WRITE(coin_counter_w) /* Coin counters */
+ AM_RANGE(0x700010, 0x700011) AM_WRITENOP /* ??? Guns reload related? */
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
ADDRESS_MAP_END
@@ -253,6 +263,10 @@ static MACHINE_CONFIG_START( targeth )
MCFG_DEVICE_ADD("gaelco_ds5002fp", GAELCO_DS5002FP, XTAL_24MHz / 2)
MCFG_DEVICE_ADDRESS_MAP(0, mcu_hostmem_map)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(targeth_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(targeth_state, coin2_counter_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/thepit.cpp b/src/mame/drivers/thepit.cpp
index 3b32028b4f3..2fe4fd84105 100644
--- a/src/mame/drivers/thepit.cpp
+++ b/src/mame/drivers/thepit.cpp
@@ -156,6 +156,7 @@ Player 2 and Player 1 share the same controls !
#include "includes/thepit.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -187,14 +188,21 @@ READ8_MEMBER(thepit_state::intrepid_colorram_mirror_r)
return m_colorram[offset];
}
-WRITE8_MEMBER(thepit_state::sound_enable_w)
+WRITE_LINE_MEMBER(thepit_state::coin_lockout_w)
{
- machine().sound().system_enable(data);
+ machine().bookkeeping().coin_lockout_w(0, !state);
}
-WRITE8_MEMBER(thepit_state::nmi_mask_w)
+WRITE_LINE_MEMBER(thepit_state::sound_enable_w)
{
- m_nmi_mask = data & 1;
+ machine().sound().system_enable(state);
+}
+
+WRITE_LINE_MEMBER(thepit_state::nmi_mask_w)
+{
+ m_nmi_mask = state;
+ if (!m_nmi_mask)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
@@ -208,13 +216,8 @@ static ADDRESS_MAP_START( thepit_main_map, AS_PROGRAM, 8, thepit_state )
AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
- AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
- AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w)
- AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w)
- AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w)
+ AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
ADDRESS_MAP_END
@@ -228,13 +231,8 @@ static ADDRESS_MAP_START( desertdan_main_map, AS_PROGRAM, 8, thepit_state )
AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
- AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
- AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w)
- AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w)
- AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w)
+ AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
ADDRESS_MAP_END
@@ -249,14 +247,8 @@ static ADDRESS_MAP_START( intrepid_main_map, AS_PROGRAM, 8, thepit_state )
AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
- AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
- AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
- AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w)
- AM_RANGE(0xb004, 0xb004) AM_WRITENOP // Unused, but initialized
- AM_RANGE(0xb005, 0xb005) AM_WRITE(intrepid_graphics_bank_w)
- AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w)
- AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w)
+ AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
ADDRESS_MAP_END
@@ -706,7 +698,7 @@ GFXDECODE_END
INTERRUPT_GEN_MEMBER(thepit_state::vblank_irq)
{
if(m_nmi_mask)
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
static MACHINE_CONFIG_START( thepit )
@@ -721,6 +713,13 @@ static MACHINE_CONFIG_START( thepit )
MCFG_CPU_IO_MAP(audio_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", thepit_state, irq0_line_hold)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC42
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(thepit_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) // marked "LOCK OUT" on Centuri schematic but never written
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(thepit_state, sound_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(thepit_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(thepit_state, flip_screen_y_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -746,7 +745,12 @@ static MACHINE_CONFIG_START( thepit )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( desertdn, thepit )
+static MACHINE_CONFIG_DERIVED( fitter, thepit )
+ MCFG_DEVICE_MODIFY("mainlatch") // IC42
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(thepit_state, coin_lockout_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( desertdn, fitter )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -759,12 +763,15 @@ static MACHINE_CONFIG_DERIVED( desertdn, thepit )
MCFG_GFXDECODE_MODIFY("gfxdecode", intrepid)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( intrepid, thepit )
+static MACHINE_CONFIG_DERIVED( intrepid, fitter )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(intrepid_main_map)
+ MCFG_DEVICE_MODIFY("mainlatch") // 2F on Funny Mouse main board; IC46 on Port Man main board
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(thepit_state, intrepid_graphics_bank_w))
+
/* video hardware */
MCFG_GFXDECODE_MODIFY("gfxdecode", intrepid)
MACHINE_CONFIG_END
@@ -1268,10 +1275,10 @@ DRIVER_INIT_MEMBER(thepit_state,rtriv)
}
-GAME( 1981, roundup, 0, thepit, roundup, thepit_state, 0, ROT90, "Taito Corporation (Amenip/Centuri license)", "Round-Up", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, fitter, roundup, thepit, fitter, thepit_state, 0, ROT90, "Taito Corporation", "Fitter", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, fitterbl, roundup, thepit, fitter, thepit_state, 0, ROT90, "bootleg", "Fitter (bootleg of Round-Up)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ttfitter, roundup, thepit, fitter, thepit_state, 0, ROT90, "Taito Corporation", "T.T Fitter (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, roundup, 0, fitter, roundup, thepit_state, 0, ROT90, "Taito Corporation (Amenip/Centuri license)", "Round-Up", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, fitter, roundup, fitter, fitter, thepit_state, 0, ROT90, "Taito Corporation", "Fitter", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, fitterbl, roundup, fitter, fitter, thepit_state, 0, ROT90, "bootleg", "Fitter (bootleg of Round-Up)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, ttfitter, roundup, fitter, fitter, thepit_state, 0, ROT90, "Taito Corporation", "T.T Fitter (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, thepit, 0, thepit, thepit, thepit_state, 0, ROT90, "Zilec Electronics", "The Pit", MACHINE_SUPPORTS_SAVE ) // AW == Andy Walker
GAME( 1982, thepitu1, thepit, thepit, thepit, thepit_state, 0, ROT90, "Zilec Electronics (Centuri license)", "The Pit (US set 1)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/thoop2.cpp b/src/mame/drivers/thoop2.cpp
index 297291c49b1..7a9c8b01d1d 100644
--- a/src/mame/drivers/thoop2.cpp
+++ b/src/mame/drivers/thoop2.cpp
@@ -32,30 +32,34 @@ void thoop2_state::machine_start()
membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
}
-WRITE16_MEMBER(thoop2_state::OKIM6295_bankswitch_w)
+WRITE8_MEMBER(thoop2_state::OKIM6295_bankswitch_w)
{
- if (ACCESSING_BITS_0_7){
- membank("okibank")->set_entry(data & 0x0f);
- }
+ membank("okibank")->set_entry(data & 0x0f);
}
-WRITE16_MEMBER(thoop2_state::coin_w)
+WRITE8_MEMBER(thoop2_state::coin_w)
{
- if (ACCESSING_BITS_0_7){
- switch ((offset >> 3)){
- case 0x00: /* Coin Lockouts */
- case 0x01:
- machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01);
- break;
- case 0x02: /* Coin Counters */
- case 0x03:
- machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
- break;
- }
- }
-
- /* 04b unknown. Sound related? */
- /* 05b unknown */
+ m_outlatch->write_bit(offset >> 3, BIT(data, 0));
+}
+
+WRITE_LINE_MEMBER(thoop2_state::coin1_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, !state);
+}
+
+WRITE_LINE_MEMBER(thoop2_state::coin2_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(1, !state);
+}
+
+WRITE_LINE_MEMBER(thoop2_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(thoop2_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
WRITE8_MEMBER(thoop2_state::shareram_w)
@@ -88,9 +92,9 @@ static ADDRESS_MAP_START( thoop2_map, AS_PROGRAM, 16, thoop2_state )
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("P1")
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("P2")
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SYSTEM")
- AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) /* OKI6295 bankswitch */
+ AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(coin_w, 0x00ff) /* Coin Counters + Coin Lockout */
+ AM_RANGE(0x70000c, 0x70000d) AM_WRITE8(OKIM6295_bankswitch_w, 0x00ff) /* OKI6295 bankswitch */
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 data register */
- AM_RANGE(0x70000a, 0x70005b) AM_WRITE(coin_w) /* Coin Counters + Coin Lockout */
AM_RANGE(0xfe0000, 0xfe7fff) AM_RAM /* Work RAM */
AM_RANGE(0xfe8000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with D5002FP) */
ADDRESS_MAP_END
@@ -224,6 +228,14 @@ static MACHINE_CONFIG_START( thoop2 )
MCFG_DEVICE_ADD("gaelco_ds5002fp", GAELCO_DS5002FP, XTAL_24MHz / 2)
MCFG_DEVICE_ADDRESS_MAP(0, mcu_hostmem_map)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(thoop2_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(thoop2_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(thoop2_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(thoop2_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // unknown. Sound related?
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP) // unknown
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/timelimt.cpp b/src/mame/drivers/timelimt.cpp
index 4495ca7d196..9c260fb7796 100644
--- a/src/mame/drivers/timelimt.cpp
+++ b/src/mame/drivers/timelimt.cpp
@@ -18,6 +18,7 @@ Notes:
#include "includes/timelimt.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
@@ -33,20 +34,16 @@ void timelimt_state::machine_start()
save_item(NAME(m_nmi_enabled));
}
-void timelimt_state::machine_reset()
+WRITE_LINE_MEMBER(timelimt_state::nmi_enable_w)
{
- m_nmi_enabled = 0;
+ m_nmi_enabled = state;
+ if (!m_nmi_enabled)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
-WRITE8_MEMBER(timelimt_state::nmi_enable_w)
+WRITE_LINE_MEMBER(timelimt_state::coin_lockout_w)
{
- m_nmi_enabled = data & 1; /* bit 0 = nmi enable */
-}
-
-WRITE8_MEMBER(timelimt_state::sound_reset_w)
-{
- if (data & 1)
- m_audiocpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
+ machine().bookkeeping().coin_lockout_w(0, !state);
}
/***************************************************************************/
@@ -60,8 +57,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, timelimt_state )
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("INPUTS")
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW")
- AM_RANGE(0xb000, 0xb000) AM_WRITE(nmi_enable_w) /* nmi enable */
- AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_reset_w)/* sound reset ? */
+ AM_RANGE(0xb000, 0xb007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xb800, 0xb800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) /* sound write */
AM_RANGE(0xb800, 0xb800) AM_READNOP /* NMI ack? */
AM_RANGE(0xc800, 0xc800) AM_WRITE(scroll_x_lsb_w)
@@ -103,7 +99,7 @@ static INPUT_PORTS_START( timelimt )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* probably unused */
@@ -148,7 +144,7 @@ static INPUT_PORTS_START( progress )
PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* probably unused */
@@ -216,8 +212,8 @@ GFXDECODE_END
INTERRUPT_GEN_MEMBER(timelimt_state::irq)
{
- if ( m_nmi_enabled )
- device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ if (m_nmi_enabled)
+ device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
/***************************************************************************/
@@ -237,6 +233,13 @@ static MACHINE_CONFIG_START( timelimt )
MCFG_QUANTUM_TIME(attotime::from_hz(3000))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // IC15
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(timelimt_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(timelimt_state, coin_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) // probably flip screen
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // probably flip screen
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -295,7 +298,7 @@ ROM_START( timelimt )
ROM_LOAD( "tl2", 0x2000, 0x2000, CRC(4693b849) SHA1(fbebedde53599fb1eaedc648bd704b321ab096b5) )
ROM_LOAD( "tl1", 0x0000, 0x2000, CRC(c4007caf) SHA1(ae05af3319545d5ca98a046bfc100138a5a3ed96) )
- ROM_REGION( 0x0060, "proms", 0 )
+ ROM_REGION( 0x0060, "proms", 0 ) // N82S123N color PROMs
ROM_LOAD( "clr.35", 0x0000, 0x0020, CRC(9c9e6073) SHA1(98496175bf19a8cdb0018705bc1a2193b8a782e1) )
ROM_LOAD( "clr.48", 0x0020, 0x0020, CRC(a0bcac59) SHA1(e5832831b21981363509b79d89766757bd9273b0) ) /* FIXED BITS (xxxxxx1x) */
ROM_LOAD( "clr.57", 0x0040, 0x0020, CRC(3a9f5394) SHA1(0b501f81ce1df722cf7ef982c03e0be337bfe9ee) )
diff --git a/src/mame/drivers/timeplt.cpp b/src/mame/drivers/timeplt.cpp
index 39a502f1af3..bc9e3d8f277 100644
--- a/src/mame/drivers/timeplt.cpp
+++ b/src/mame/drivers/timeplt.cpp
@@ -72,9 +72,9 @@ INTERRUPT_GEN_MEMBER(timeplt_state::interrupt)
}
-WRITE8_MEMBER(timeplt_state::nmi_enable_w)
+WRITE_LINE_MEMBER(timeplt_state::nmi_enable_w)
{
- m_nmi_enable = data & 1;
+ m_nmi_enable = state;
if (!m_nmi_enable)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
@@ -87,9 +87,19 @@ WRITE8_MEMBER(timeplt_state::nmi_enable_w)
*
*************************************/
-WRITE8_MEMBER(timeplt_state::coincounter_w)
+WRITE8_MEMBER(timeplt_state::mainlatch_w)
{
- machine().bookkeeping().coin_counter_w(offset >> 1, data);
+ m_mainlatch->write_d0(space, offset >> 1, data);
+}
+
+WRITE_LINE_MEMBER(timeplt_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(timeplt_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
READ8_MEMBER(timeplt_state::psurge_protection_r)
@@ -125,7 +135,7 @@ CUSTOM_INPUT_MEMBER(timeplt_state::chkun_hopper_status_r)
*
*************************************/
-static ADDRESS_MAP_START( common_main_map, AS_PROGRAM, 8, timeplt_state )
+static ADDRESS_MAP_START( timeplt_main_map, AS_PROGRAM, 8, timeplt_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
@@ -136,22 +146,14 @@ static ADDRESS_MAP_START( common_main_map, AS_PROGRAM, 8, timeplt_state )
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(scanline_r) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_READ_PORT("DSW1") AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0c9f) AM_READ_PORT("IN0")
- AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(flipscreen_w)
- AM_RANGE(0xc304, 0xc304) AM_MIRROR(0x0cf1) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
- AM_RANGE(0xc30a, 0xc30d) AM_MIRROR(0x0cf0) AM_WRITE(coincounter_w) // handler ignores low bit of offset
+ AM_RANGE(0xc300, 0xc30f) AM_MIRROR(0x0cf0) AM_WRITE(mainlatch_w) // handler ignores low bit of offset
AM_RANGE(0xc320, 0xc320) AM_MIRROR(0x0c9f) AM_READ_PORT("IN1")
AM_RANGE(0xc340, 0xc340) AM_MIRROR(0x0c9f) AM_READ_PORT("IN2")
AM_RANGE(0xc360, 0xc360) AM_MIRROR(0x0c9f) AM_READ_PORT("DSW0")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( timeplt_main_map, AS_PROGRAM, 8, timeplt_state )
- AM_IMPORT_FROM(common_main_map)
- AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0cf1) AM_WRITE(nmi_enable_w)
- AM_RANGE(0xc308, 0xc308) AM_MIRROR(0x0cf1) AM_WRITE(video_enable_w)
-ADDRESS_MAP_END
-
static ADDRESS_MAP_START( psurge_main_map, AS_PROGRAM, 8, timeplt_state )
- AM_IMPORT_FROM(common_main_map)
+ AM_IMPORT_FROM(timeplt_main_map)
AM_RANGE(0x6004, 0x6004) AM_READ(psurge_protection_r)
ADDRESS_MAP_END
@@ -421,7 +423,6 @@ void timeplt_state::machine_start()
void timeplt_state::machine_reset()
{
- m_nmi_enable = 0;
}
static MACHINE_CONFIG_START( timeplt )
@@ -431,6 +432,16 @@ static MACHINE_CONFIG_START( timeplt )
MCFG_CPU_PROGRAM_MAP(timeplt_main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", timeplt_state, interrupt)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // B3
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(timeplt_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(timeplt_state, flipscreen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(timeplt_state, video_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(timeplt_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(timeplt_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) // PAY OUT - not used
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -461,6 +472,12 @@ static MACHINE_CONFIG_DERIVED( psurge, timeplt )
MCFG_CPU_PROGRAM_MAP(psurge_main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", timeplt_state, nmi_line_pulse)
+ MCFG_DEVICE_MODIFY("mainlatch")
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(NOOP)
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP)
+
MCFG_VIDEO_START_OVERRIDE(timeplt_state,psurge)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/toaplan1.cpp b/src/mame/drivers/toaplan1.cpp
index bf27b7a3764..c5e07316232 100644
--- a/src/mame/drivers/toaplan1.cpp
+++ b/src/mame/drivers/toaplan1.cpp
@@ -612,6 +612,7 @@ Stephh's and AWJ's notes (based on the games M68000 and Z80 code and some tests)
#include "cpu/tms32010/tms32010.h"
#include "cpu/z80/z80.h"
#include "cpu/z180/z180.h"
+#include "machine/74259.h"
#include "sound/3812intf.h"
#include "speaker.h"
@@ -842,7 +843,7 @@ static ADDRESS_MAP_START( rallybik_sound_io_map, AS_IO, 8, toaplan1_rallybik_sta
AM_RANGE(0x00, 0x00) AM_READ_PORT("P1")
AM_RANGE(0x10, 0x10) AM_READ_PORT("P2")
AM_RANGE(0x20, 0x20) AM_READ_PORT("SYSTEM")
- AM_RANGE(0x30, 0x30) AM_WRITE(rallybik_coin_w) /* Coin counter/lockout */
+ AM_RANGE(0x30, 0x30) AM_DEVWRITE("coinlatch", ls259_device, write_nibble) /* Coin counter/lockout */
AM_RANGE(0x40, 0x40) AM_READ_PORT("DSWA")
AM_RANGE(0x50, 0x50) AM_READ_PORT("DSWB")
AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
@@ -1899,6 +1900,12 @@ static MACHINE_CONFIG_START( rallybik )
MCFG_QUANTUM_TIME(attotime::from_hz(600))
+ MCFG_DEVICE_ADD("coinlatch", LS259, 0) // 19L
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_lockout_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(toaplan1_rallybik_state, coin_lockout_2_w))
+
MCFG_MACHINE_RESET_OVERRIDE(toaplan1_state,toaplan1)
/* video hardware */
diff --git a/src/mame/drivers/tomcat.cpp b/src/mame/drivers/tomcat.cpp
index 34455a5593d..a2d946078c3 100644
--- a/src/mame/drivers/tomcat.cpp
+++ b/src/mame/drivers/tomcat.cpp
@@ -30,6 +30,7 @@
#include "cpu/m6502/m6502.h"
#include "video/vector.h"
#include "video/avgdvg.h"
+#include "machine/74259.h"
#include "machine/timekpr.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
@@ -50,7 +51,8 @@ public:
m_tms(*this, "tms"),
m_shared_ram(*this, "shared_ram"),
m_maincpu(*this, "maincpu"),
- m_dsp(*this, "dsp") { }
+ m_dsp(*this, "dsp"),
+ m_mainlatch(*this, "mainlatch") { }
required_device<tms5220_device> m_tms;
int m_control_num;
@@ -61,22 +63,15 @@ public:
DECLARE_WRITE16_MEMBER(tomcat_adcon_w);
DECLARE_READ16_MEMBER(tomcat_adcread_r);
DECLARE_READ16_MEMBER(tomcat_inputs_r);
- DECLARE_WRITE16_MEMBER(tomcat_led1on_w);
- DECLARE_WRITE16_MEMBER(tomcat_led2on_w);
- DECLARE_WRITE16_MEMBER(tomcat_led2off_w);
- DECLARE_WRITE16_MEMBER(tomcat_led1off_w);
- DECLARE_WRITE16_MEMBER(tomcat_lnkmodel_w);
- DECLARE_WRITE16_MEMBER(tomcat_errl_w);
- DECLARE_WRITE16_MEMBER(tomcat_errh_w);
- DECLARE_WRITE16_MEMBER(tomcat_ackl_w);
- DECLARE_WRITE16_MEMBER(tomcat_ackh_w);
- DECLARE_WRITE16_MEMBER(tomcat_lnkmodeh_w);
- DECLARE_WRITE16_MEMBER(tomcat_txbuffl_w);
- DECLARE_WRITE16_MEMBER(tomcat_txbuffh_w);
- DECLARE_WRITE16_MEMBER(tomcat_sndresl_w);
- DECLARE_WRITE16_MEMBER(tomcat_sndresh_w);
- DECLARE_WRITE16_MEMBER(tomcat_mresl_w);
- DECLARE_WRITE16_MEMBER(tomcat_mresh_w);
+ DECLARE_WRITE16_MEMBER(main_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
+ DECLARE_WRITE_LINE_MEMBER(lnkmode_w);
+ DECLARE_WRITE_LINE_MEMBER(err_w);
+ DECLARE_WRITE_LINE_MEMBER(ack_w);
+ DECLARE_WRITE_LINE_MEMBER(txbuff_w);
+ DECLARE_WRITE_LINE_MEMBER(sndres_w);
+ DECLARE_WRITE_LINE_MEMBER(mres_w);
DECLARE_WRITE16_MEMBER(tomcat_irqclr_w);
DECLARE_READ16_MEMBER(tomcat_inputs2_r);
DECLARE_READ16_MEMBER(tomcat_320bio_r);
@@ -87,6 +82,7 @@ public:
virtual void machine_start() override;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_dsp;
+ required_device<ls259_device> m_mainlatch;
};
@@ -115,93 +111,61 @@ READ16_MEMBER(tomcat_state::tomcat_inputs_r)
return result;
}
-WRITE16_MEMBER(tomcat_state::tomcat_led1on_w)
+WRITE16_MEMBER(tomcat_state::main_latch_w)
{
- output().set_led_value(1, 1);
+ // A1-A3 = address, A4 = data
+ m_mainlatch->write_bit(offset & 7, BIT(offset, 3));
}
-WRITE16_MEMBER(tomcat_state::tomcat_led2on_w)
+WRITE_LINE_MEMBER(tomcat_state::led1_w)
{
- output().set_led_value(2, 1);
+ // Low = ON, High = OFF
+ output().set_led_value(1, !state);
}
-WRITE16_MEMBER(tomcat_state::tomcat_led2off_w)
+WRITE_LINE_MEMBER(tomcat_state::led2_w)
{
- output().set_led_value(2, 0);
+ // Low = ON, High = OFF
+ output().set_led_value(2, !state);
}
-WRITE16_MEMBER(tomcat_state::tomcat_led1off_w)
+WRITE_LINE_MEMBER(tomcat_state::lnkmode_w)
{
- output().set_led_value(1, 0);
+ // Link Mode
+ // When Low: Master does not respond to Interrupts
}
-WRITE16_MEMBER(tomcat_state::tomcat_lnkmodel_w)
+WRITE_LINE_MEMBER(tomcat_state::err_w)
{
- // Link Mode Low (address strobe)
- // Master does not respond to Interrupts
+ // Link Error Flag
}
-WRITE16_MEMBER(tomcat_state::tomcat_errl_w)
+WRITE_LINE_MEMBER(tomcat_state::ack_w)
{
- // Link Error Flag Low (address strobe)
+ // Link ACK Flag
}
-WRITE16_MEMBER(tomcat_state::tomcat_errh_w)
+WRITE_LINE_MEMBER(tomcat_state::txbuff_w)
{
- // Link Error Flag High (address strobe)
+ // Link Buffer Control
+ // When High: Turn off TX (Link) Buffer
}
-WRITE16_MEMBER(tomcat_state::tomcat_ackl_w)
+WRITE_LINE_MEMBER(tomcat_state::sndres_w)
{
- // Link ACK Flag Low (address strobe)
+ // Sound Reset
+ // When Low: Reset Sound System
+ // When High: Release reset of sound system
}
-WRITE16_MEMBER(tomcat_state::tomcat_ackh_w)
+WRITE_LINE_MEMBER(tomcat_state::mres_w)
{
- // Link ACK Flag High (address strobe)
-}
-
-WRITE16_MEMBER(tomcat_state::tomcat_lnkmodeh_w)
-{
- // Link Mode high (address strobe)
-}
-
-WRITE16_MEMBER(tomcat_state::tomcat_txbuffl_w)
-{
- // Link Buffer Control (address strobe)
-}
-
-WRITE16_MEMBER(tomcat_state::tomcat_txbuffh_w)
-{
- // Link Buffer Control high (address strobe)
- // Turn off TX (Link) Buffer
-}
-
-WRITE16_MEMBER(tomcat_state::tomcat_sndresl_w)
-{
- // Sound Reset Low (Address Strobe)
- // Reset Sound System
-}
-
-WRITE16_MEMBER(tomcat_state::tomcat_sndresh_w)
-{
- // Sound Reset high (Address Strobe)
- // Release reset of sound system
-}
-
-WRITE16_MEMBER(tomcat_state::tomcat_mresl_w)
-{
- // 320 Reset Low (Address Strobe)
- // Reset TMS320
- m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
-}
-
-WRITE16_MEMBER(tomcat_state::tomcat_mresh_w)
-{
- // 320 Reset high (Address Strobe)
- // Release reset of TMS320
- m_dsp_BIO = 0;
- m_dsp->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ // 320 Reset
+ // When Low: Reset TMS320
+ // When High: Release reset of TMS320
+ if (state)
+ m_dsp_BIO = 0;
+ m_dsp->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE);
}
WRITE16_MEMBER(tomcat_state::tomcat_irqclr_w)
@@ -281,22 +245,7 @@ static ADDRESS_MAP_START( tomcat_map, AS_PROGRAM, 16, tomcat_state )
AM_RANGE(0x406000, 0x406001) AM_DEVWRITE("avg", avg_tomcat_device, reset_word_w)
AM_RANGE(0x408000, 0x408001) AM_READ(tomcat_inputs2_r) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x40a000, 0x40a001) AM_READWRITE(tomcat_320bio_r, tomcat_irqclr_w)
- AM_RANGE(0x40e000, 0x40e001) AM_WRITE(tomcat_led1on_w)
- AM_RANGE(0x40e002, 0x40e003) AM_WRITE(tomcat_led2on_w)
- AM_RANGE(0x40e004, 0x40e005) AM_WRITE(tomcat_mresl_w)
- AM_RANGE(0x40e006, 0x40e007) AM_WRITE(tomcat_sndresl_w)
- AM_RANGE(0x40e008, 0x40e009) AM_WRITE(tomcat_lnkmodel_w)
- AM_RANGE(0x40e00a, 0x40e00b) AM_WRITE(tomcat_errl_w)
- AM_RANGE(0x40e00c, 0x40e00d) AM_WRITE(tomcat_ackl_w)
- AM_RANGE(0x40e00e, 0x40e00f) AM_WRITE(tomcat_txbuffl_w)
- AM_RANGE(0x40e010, 0x40e011) AM_WRITE(tomcat_led1off_w)
- AM_RANGE(0x40e012, 0x40e013) AM_WRITE(tomcat_led2off_w)
- AM_RANGE(0x40e014, 0x40e015) AM_WRITE(tomcat_mresh_w)
- AM_RANGE(0x40e016, 0x40e017) AM_WRITE(tomcat_sndresh_w)
- AM_RANGE(0x40e018, 0x40e019) AM_WRITE(tomcat_lnkmodeh_w)
- AM_RANGE(0x40e01a, 0x40e01b) AM_WRITE(tomcat_errh_w)
- AM_RANGE(0x40e01c, 0x40e01d) AM_WRITE(tomcat_ackh_w)
- AM_RANGE(0x40e01e, 0x40e01f) AM_WRITE(tomcat_txbuffh_w)
+ AM_RANGE(0x40e000, 0x40e01f) AM_WRITE(main_latch_w)
AM_RANGE(0x800000, 0x803fff) AM_RAM AM_SHARE("vectorram")
AM_RANGE(0xffa000, 0xffbfff) AM_RAM AM_SHARE("shared_ram")
AM_RANGE(0xffc000, 0xffcfff) AM_RAM
@@ -402,6 +351,16 @@ static MACHINE_CONFIG_START( tomcat )
MCFG_QUANTUM_TIME(attotime::from_hz(4000))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tomcat_state, led1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tomcat_state, led2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tomcat_state, mres_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tomcat_state, sndres_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tomcat_state, lnkmode_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tomcat_state, err_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(tomcat_state, ack_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tomcat_state, txbuff_w))
+
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_WATCHDOG_ADD("watchdog")
diff --git a/src/mame/drivers/tp84.cpp b/src/mame/drivers/tp84.cpp
index e4d8546dbd5..ef213ea248a 100644
--- a/src/mame/drivers/tp84.cpp
+++ b/src/mame/drivers/tp84.cpp
@@ -69,6 +69,7 @@ C004 76489 #4 trigger
#include "cpu/m6809/m6809.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "sound/flt_rc.h"
@@ -79,6 +80,49 @@ C004 76489 #4 trigger
void tp84_state::machine_start()
{
+ save_item(NAME(m_irq_enable));
+ save_item(NAME(m_sub_irq_mask));
+ save_item(NAME(m_flipscreen_x));
+ save_item(NAME(m_flipscreen_y));
+}
+
+
+INTERRUPT_GEN_MEMBER(tp84_state::main_vblank_irq)
+{
+ if (m_irq_enable)
+ device.execute().set_input_line(0, ASSERT_LINE);
+}
+
+
+WRITE_LINE_MEMBER(tp84_state::irq_enable_w)
+{
+ m_irq_enable = state;
+ if (!m_irq_enable)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+}
+
+
+WRITE_LINE_MEMBER(tp84_state::coin_counter_1_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+
+WRITE_LINE_MEMBER(tp84_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+
+WRITE_LINE_MEMBER(tp84_state::flip_screen_x_w)
+{
+ m_flipscreen_x = state;
+}
+
+
+WRITE_LINE_MEMBER(tp84_state::flip_screen_y_w)
+{
+ m_flipscreen_y = state;
}
@@ -132,9 +176,8 @@ static ADDRESS_MAP_START( tp84_cpu1_map, AS_PROGRAM, 8, tp84_state )
AM_RANGE(0x2820, 0x2820) AM_READ_PORT("P1")
AM_RANGE(0x2840, 0x2840) AM_READ_PORT("P2")
AM_RANGE(0x2860, 0x2860) AM_READ_PORT("DSW1")
- AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW2") AM_WRITEONLY
- AM_RANGE(0x3004, 0x3004) AM_WRITEONLY AM_SHARE("flipscreen_x")
- AM_RANGE(0x3005, 0x3005) AM_WRITEONLY AM_SHARE("flipscreen_y")
+ AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW2")
+ AM_RANGE(0x3000, 0x3007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x3800, 0x3800) AM_WRITE(tp84_sh_irqtrigger_w)
AM_RANGE(0x3a00, 0x3a00) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x3c00, 0x3c00) AM_WRITEONLY AM_SHARE("scroll_x")
@@ -158,9 +201,8 @@ static ADDRESS_MAP_START( tp84b_cpu1_map, AS_PROGRAM, 8, tp84_state )
AM_RANGE(0x1a20, 0x1a20) AM_READ_PORT("P1")
AM_RANGE(0x1a40, 0x1a40) AM_READ_PORT("P2")
AM_RANGE(0x1a60, 0x1a60) AM_READ_PORT("DSW1")
- AM_RANGE(0x1c00, 0x1c00) AM_READ_PORT("DSW2") AM_WRITENOP
- AM_RANGE(0x1c04, 0x1c04) AM_WRITEONLY AM_SHARE("flipscreen_x")
- AM_RANGE(0x1c05, 0x1c05) AM_WRITEONLY AM_SHARE("flipscreen_y")
+ AM_RANGE(0x1c00, 0x1c00) AM_READ_PORT("DSW2")
+ AM_RANGE(0x1c00, 0x1c07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x1e00, 0x1e00) AM_WRITE(tp84_sh_irqtrigger_w)
AM_RANGE(0x1e80, 0x1e80) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x1f00, 0x1f00) AM_WRITEONLY AM_SHARE("scroll_x")
@@ -291,7 +333,7 @@ static MACHINE_CONFIG_START( tp84 )
/* basic machine hardware */
MCFG_CPU_ADD("cpu1",M6809, XTAL_18_432MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(tp84_cpu1_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", tp84_state, irq0_line_hold)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", tp84_state, main_vblank_irq)
MCFG_CPU_ADD("sub", M6809, XTAL_18_432MHz/12) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(cpu2_map)
@@ -303,6 +345,13 @@ static MACHINE_CONFIG_START( tp84 )
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3B
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tp84_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tp84_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tp84_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tp84_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tp84_state, flip_screen_y_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/triplhnt.cpp b/src/mame/drivers/triplhnt.cpp
index fe020337307..cd4db00a741 100644
--- a/src/mame/drivers/triplhnt.cpp
+++ b/src/mame/drivers/triplhnt.cpp
@@ -30,48 +30,42 @@ void triplhnt_state::set_collision(int code)
}
-void triplhnt_state::update_misc(address_space &space, int offset)
+WRITE_LINE_MEMBER(triplhnt_state::ram_2_w)
{
- uint8_t is_witch_hunt;
- uint8_t bit = offset >> 1;
-
- /* BIT0 => UNUSED */
- /* BIT1 => LAMP */
- /* BIT2 => SCREECH */
- /* BIT3 => LOCKOUT */
- /* BIT4 => SPRITE ZOOM */
- /* BIT5 => CMOS WRITE */
- /* BIT6 => TAPE CTRL */
- /* BIT7 => SPRITE BANK */
-
- if (offset & 1)
- {
- m_misc_flags |= 1 << bit;
-
- if (bit == 5)
- {
- m_cmos[m_cmos_latch] = m_da_latch;
- }
- }
- else
- {
- m_misc_flags &= ~(1 << bit);
- }
+ if (state)
+ m_cmos[m_cmos_latch] = m_da_latch;
+}
- m_sprite_zoom = (m_misc_flags >> 4) & 1;
- m_sprite_bank = (m_misc_flags >> 7) & 1;
- output().set_led_value(0, m_misc_flags & 0x02);
+WRITE_LINE_MEMBER(triplhnt_state::sprite_zoom_w)
+{
+ m_sprite_zoom = state;
+}
- machine().bookkeeping().coin_lockout_w(0, !(m_misc_flags & 0x08));
- machine().bookkeeping().coin_lockout_w(1, !(m_misc_flags & 0x08));
- m_discrete->write(space, TRIPLHNT_SCREECH_EN, m_misc_flags & 0x04); // screech
- m_discrete->write(space, TRIPLHNT_LAMP_EN, m_misc_flags & 0x02); // Lamp is used to reset noise
- m_discrete->write(space, TRIPLHNT_BEAR_EN, m_misc_flags & 0x80); // bear
+WRITE_LINE_MEMBER(triplhnt_state::sprite_bank_w)
+{
+ m_sprite_bank = state;
+}
+
+
+WRITE_LINE_MEMBER(triplhnt_state::lamp1_w)
+{
+ output().set_led_value(0, state);
+}
- is_witch_hunt = ioport("0C09")->read() == 0x40;
- bit = ~m_misc_flags & 0x40;
+
+WRITE_LINE_MEMBER(triplhnt_state::coin_lockout_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, !state);
+ machine().bookkeeping().coin_lockout_w(1, !state);
+}
+
+
+WRITE_LINE_MEMBER(triplhnt_state::tape_control_w)
+{
+ bool is_witch_hunt = ioport("0C09")->read() == 0x40;
+ bool bit = !state;
/* if we're not playing the sample yet, start it */
if (!m_samples->playing(0))
@@ -85,12 +79,6 @@ void triplhnt_state::update_misc(address_space &space, int offset)
}
-WRITE8_MEMBER(triplhnt_state::misc_w)
-{
- update_misc(space, offset);
-}
-
-
READ8_MEMBER(triplhnt_state::cmos_r)
{
m_cmos_latch = offset;
@@ -108,7 +96,7 @@ READ8_MEMBER(triplhnt_state::input_port_4_r)
READ8_MEMBER(triplhnt_state::misc_r)
{
- update_misc(space, offset);
+ m_latch->write_a0(space, offset, 0);
return ioport("VBLANK")->read() | m_hit_code;
}
@@ -141,7 +129,7 @@ static ADDRESS_MAP_START( triplhnt_map, AS_PROGRAM, 8, triplhnt_state )
AM_RANGE(0x0c0b, 0x0c0b) AM_READ(input_port_4_r)
AM_RANGE(0x0c10, 0x0c1f) AM_READ(da_latch_r)
AM_RANGE(0x0c20, 0x0c2f) AM_READ(cmos_r) AM_SHARE("nvram")
- AM_RANGE(0x0c30, 0x0c3f) AM_READWRITE(misc_r, misc_w)
+ AM_RANGE(0x0c30, 0x0c3f) AM_READ(misc_r) AM_DEVWRITE("latch", f9334_device, write_a0)
AM_RANGE(0x0c40, 0x0c40) AM_READ_PORT("0C40")
AM_RANGE(0x0c48, 0x0c48) AM_READ_PORT("0C48")
AM_RANGE(0x7000, 0x7fff) AM_ROM /* program */
@@ -308,7 +296,19 @@ static MACHINE_CONFIG_START( triplhnt )
MCFG_CPU_PROGRAM_MAP(triplhnt_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", triplhnt_state, irq0_line_hold)
- MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_NVRAM_ADD_0FILL("nvram") // battery-backed 74C89 at J5
+
+ MCFG_DEVICE_ADD("latch", F9334, 0) // J7
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // unused
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(triplhnt_state, lamp1_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("discrete", discrete_device, write_line<TRIPLHNT_LAMP_EN>)) // Lamp is used to reset noise
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<TRIPLHNT_SCREECH_EN>)) // screech
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(triplhnt_state, coin_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(triplhnt_state, sprite_zoom_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(triplhnt_state, ram_2_w)) // CMOS write
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(triplhnt_state, tape_control_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(triplhnt_state, sprite_bank_w))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("discrete", discrete_device, write_line<TRIPLHNT_BEAR_EN>)) // bear
MCFG_WATCHDOG_ADD("watchdog")
diff --git a/src/mame/drivers/tsamurai.cpp b/src/mame/drivers/tsamurai.cpp
index 1b98bfcd4cb..eaff6bfa1fe 100644
--- a/src/mame/drivers/tsamurai.cpp
+++ b/src/mame/drivers/tsamurai.cpp
@@ -42,6 +42,7 @@ the "America" release.
#include "includes/tsamurai.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/volt_reg.h"
@@ -73,9 +74,9 @@ MACHINE_START_MEMBER(tsamurai_state, vsgongf)
machine_start();
}
-WRITE8_MEMBER(tsamurai_state::nmi_enable_w)
+WRITE_LINE_MEMBER(tsamurai_state::nmi_enable_w)
{
- m_nmi_enabled = data;
+ m_nmi_enabled = state;
}
INTERRUPT_GEN_MEMBER(tsamurai_state::interrupt)
@@ -126,14 +127,19 @@ WRITE8_MEMBER(tsamurai_state::m660_sound_command3_w)
m_audio3->set_input_line(0, HOLD_LINE );
}
-WRITE8_MEMBER(tsamurai_state::flip_screen_w)
+WRITE_LINE_MEMBER(tsamurai_state::flip_screen_w)
{
- flip_screen_set(data);
+ flip_screen_set(state);
}
-WRITE8_MEMBER(tsamurai_state::coincounter_w)
+WRITE_LINE_MEMBER(tsamurai_state::coin1_counter_w)
{
- machine().bookkeeping().coin_counter_w(offset,data);
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(tsamurai_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -164,10 +170,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tsamurai_state )
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW1")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2")
- AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flip_screen_w)
- AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_enable_w)
- AM_RANGE(0xfc02, 0xfc02) AM_WRITE(textbank1_w)
- AM_RANGE(0xfc03, 0xfc04) AM_WRITE(coincounter_w)
+ AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( m660_map, AS_PROGRAM, 8, tsamurai_state )
@@ -198,11 +201,7 @@ static ADDRESS_MAP_START( m660_map, AS_PROGRAM, 8, tsamurai_state )
AM_RANGE(0xf804, 0xf804) AM_READ_PORT("DSW1")
AM_RANGE(0xf805, 0xf805) AM_READ_PORT("DSW2")
- AM_RANGE(0xfc00, 0xfc00) AM_WRITE(flip_screen_w)
- AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_enable_w)
- AM_RANGE(0xfc02, 0xfc02) AM_WRITE(textbank1_w)
- AM_RANGE(0xfc03, 0xfc04) AM_WRITE(coincounter_w)
- AM_RANGE(0xfc07, 0xfc07) AM_WRITE(m660_textbank2_w)/* Mission 660 uses a bit here */
+ AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( z80_io_map, AS_IO, 8, tsamurai_state )
@@ -354,10 +353,7 @@ static ADDRESS_MAP_START( vsgongf_map, AS_PROGRAM, 8, tsamurai_state )
AM_RANGE(0xf800, 0xf800) AM_WRITENOP
AM_RANGE(0xf801, 0xf801) AM_WRITENOP /* vreg? always 0 */
AM_RANGE(0xf803, 0xf803) AM_WRITENOP /* vreg? always 0 */
- AM_RANGE(0xfc00, 0xfc00) AM_RAM /* vreg? always 0 */
- AM_RANGE(0xfc01, 0xfc01) AM_WRITE(nmi_enable_w)
- AM_RANGE(0xfc02, 0xfc03) AM_WRITE(coincounter_w)
- AM_RANGE(0xfc04, 0xfc04) AM_WRITE(textbank1_w)
+ AM_RANGE(0xfc00, 0xfc07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_vsgongf_map, AS_PROGRAM, 8, tsamurai_state )
@@ -722,6 +718,13 @@ static MACHINE_CONFIG_START( tsamurai )
MCFG_MACHINE_START_OVERRIDE(tsamurai_state,tsamurai)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tsamurai_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tsamurai_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tsamurai_state, textbank1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tsamurai_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tsamurai_state, coin2_counter_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -763,6 +766,13 @@ static MACHINE_CONFIG_START( vsgongf )
MCFG_MACHINE_START_OVERRIDE(tsamurai_state,vsgongf)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 4L
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(NOOP) // vreg? always 0
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tsamurai_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tsamurai_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tsamurai_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tsamurai_state, textbank1_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -811,6 +821,14 @@ static MACHINE_CONFIG_START( m660 )
MCFG_MACHINE_START_OVERRIDE(tsamurai_state,m660)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tsamurai_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tsamurai_state, nmi_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tsamurai_state, textbank1_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tsamurai_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(tsamurai_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tsamurai_state, textbank2_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/tubep.cpp b/src/mame/drivers/tubep.cpp
index fd3dec57bef..551d1cb4874 100644
--- a/src/mame/drivers/tubep.cpp
+++ b/src/mame/drivers/tubep.cpp
@@ -106,6 +106,7 @@ TP-S.1 TP-S.2 TP-S.3 TP-B.1 8212 TP-B.2 TP-B.3 TP-B.4
#include "cpu/m6800/m6800.h"
#include "cpu/z80/z80.h"
#include "cpu/m6805/m6805.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
#include "speaker.h"
@@ -118,33 +119,14 @@ TP-S.1 TP-S.2 TP-S.3 TP-B.1 8212 TP-B.2 TP-B.3 TP-B.4
*************************************/
-WRITE8_MEMBER(tubep_state::tubep_LS259_w)
+WRITE_LINE_MEMBER(tubep_state::coin1_counter_w)
{
- switch(offset)
- {
- case 0:
- case 1:
- /*
- port b0: bit0 - coin 1 counter
- port b1 bit0 - coin 2 counter
- */
- machine().bookkeeping().coin_counter_w(offset,data&1);
- break;
- case 2:
- //something...
- break;
- case 5:
- //screen_flip_w(offset,data&1); /* bit 0 = screen flip, active high */
- break;
- case 6:
- tubep_background_romselect_w(space,offset,data); /* bit0 = 0->select roms: B1,B3,B5; bit0 = 1->select roms: B2,B4,B6 */
- break;
- case 7:
- tubep_colorproms_A4_line_w(space,offset,data); /* bit0 = line A4 (color proms address) state */
- break;
- default:
- break;
- }
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(tubep_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
}
@@ -181,7 +163,7 @@ static ADDRESS_MAP_START( tubep_main_portmap, AS_IO, 8, tubep_state )
AM_RANGE(0xd0, 0xd0) AM_READ_PORT("P1")
AM_RANGE(0x80, 0x80) AM_WRITE(main_cpu_irq_line_clear_w)
- AM_RANGE(0xb0, 0xb7) AM_WRITE(tubep_LS259_w)
+ AM_RANGE(0xb0, 0xb7) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xd0, 0xd0) AM_WRITE(tubep_soundlatch_w)
ADDRESS_MAP_END
@@ -395,23 +377,6 @@ ADDRESS_MAP_END
*
*************************************/
-WRITE8_MEMBER(tubep_state::rjammer_LS259_w)
-{
- switch(offset)
- {
- case 0:
- case 1:
- machine().bookkeeping().coin_counter_w(offset,data&1); /* bit 0 = coin counter */
- break;
- case 5:
- //screen_flip_w(offset,data&1); /* bit 0 = screen flip, active high */
- break;
- default:
- break;
- }
-}
-
-
WRITE8_MEMBER(tubep_state::rjammer_soundlatch_w)
{
m_sound_latch = data;
@@ -436,7 +401,7 @@ static ADDRESS_MAP_START( rjammer_main_portmap, AS_IO, 8, tubep_state )
AM_RANGE(0xb0, 0xb0) AM_READ_PORT("P1")
AM_RANGE(0xc0, 0xc0) AM_READ_PORT("P2")
- AM_RANGE(0xd0, 0xd7) AM_WRITE(rjammer_LS259_w)
+ AM_RANGE(0xd0, 0xd7) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xe0, 0xe0) AM_WRITE(main_cpu_irq_line_clear_w) /* clear IRQ interrupt */
AM_RANGE(0xf0, 0xf0) AM_WRITE(rjammer_soundlatch_w)
ADDRESS_MAP_END
@@ -875,6 +840,14 @@ static MACHINE_CONFIG_START( tubep )
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tubep_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tubep_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(NOOP) //something...
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tubep_state, screen_flip_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(tubep_state, background_romselect_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tubep_state, colorproms_A4_line_w))
+
MCFG_MACHINE_START_OVERRIDE(tubep_state,tubep)
MCFG_MACHINE_RESET_OVERRIDE(tubep_state,tubep)
@@ -936,6 +909,11 @@ static MACHINE_CONFIG_START( rjammer )
MCFG_CPU_ADD("mcu",NSC8105,6000000) /* 6 MHz Xtal - divided internally ??? */
MCFG_CPU_PROGRAM_MAP(nsc_map)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 3A
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tubep_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(tubep_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(tubep_state, screen_flip_w))
+
MCFG_MACHINE_START_OVERRIDE(tubep_state,rjammer)
MCFG_MACHINE_RESET_OVERRIDE(tubep_state,rjammer)
diff --git a/src/mame/drivers/tutankhm.cpp b/src/mame/drivers/tutankhm.cpp
index f674fce3246..50507d7aba8 100644
--- a/src/mame/drivers/tutankhm.cpp
+++ b/src/mame/drivers/tutankhm.cpp
@@ -53,9 +53,9 @@
#include "emu.h"
#include "includes/tutankhm.h"
#include "includes/konamipt.h"
-#include "audio/timeplt.h"
#include "cpu/m6809/m6809.h"
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "machine/watchdog.h"
#include "screen.h"
@@ -76,9 +76,9 @@ INTERRUPT_GEN_MEMBER(tutankhm_state::tutankhm_interrupt)
}
-WRITE8_MEMBER(tutankhm_state::irq_enable_w)
+WRITE_LINE_MEMBER(tutankhm_state::irq_enable_w)
{
- m_irq_enable = data & 1;
+ m_irq_enable = state;
if (!m_irq_enable)
m_maincpu->set_input_line(0, CLEAR_LINE);
}
@@ -102,15 +102,22 @@ WRITE8_MEMBER(tutankhm_state::tutankhm_bankselect_w)
*
*************************************/
-WRITE8_MEMBER(tutankhm_state::sound_mute_w)
+WRITE_LINE_MEMBER(tutankhm_state::coin_counter_1_w)
{
- machine().sound().system_mute(data & 1);
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE8_MEMBER(tutankhm_state::tutankhm_coin_counter_w)
+WRITE_LINE_MEMBER(tutankhm_state::coin_counter_2_w)
{
- machine().bookkeeping().coin_counter_w(offset ^ 1, data);
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+
+WRITE8_MEMBER(tutankhm_state::sound_on_w)
+{
+ m_timeplt_audio->sh_irqtrigger_w(0);
+ m_timeplt_audio->sh_irqtrigger_w(1);
}
@@ -130,14 +137,9 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tutankhm_state )
AM_RANGE(0x81a0, 0x81a0) AM_MIRROR(0x000f) AM_READ_PORT("IN1") /* IN1: Player 1 I/O */
AM_RANGE(0x81c0, 0x81c0) AM_MIRROR(0x000f) AM_READ_PORT("IN2") /* IN2: Player 2 I/O */
AM_RANGE(0x81e0, 0x81e0) AM_MIRROR(0x000f) AM_READ_PORT("DSW1") /* DSW1 (inverted bits) */
- AM_RANGE(0x8200, 0x8200) AM_MIRROR(0x00f8) AM_READNOP AM_WRITE(irq_enable_w)
- AM_RANGE(0x8202, 0x8203) AM_MIRROR(0x00f8) AM_WRITE(tutankhm_coin_counter_w)
- AM_RANGE(0x8204, 0x8204) AM_MIRROR(0x00f8) AM_WRITENOP // starfield?
- AM_RANGE(0x8205, 0x8205) AM_MIRROR(0x00f8) AM_WRITE(sound_mute_w)
- AM_RANGE(0x8206, 0x8206) AM_MIRROR(0x00f8) AM_WRITE(tutankhm_flip_screen_x_w)
- AM_RANGE(0x8207, 0x8207) AM_MIRROR(0x00f8) AM_WRITE(tutankhm_flip_screen_y_w)
+ AM_RANGE(0x8200, 0x8207) AM_MIRROR(0x00f8) AM_READNOP AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0x8300, 0x8300) AM_MIRROR(0x00ff) AM_WRITE(tutankhm_bankselect_w)
- AM_RANGE(0x8600, 0x8600) AM_MIRROR(0x00ff) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
+ AM_RANGE(0x8600, 0x8600) AM_MIRROR(0x00ff) AM_WRITE(sound_on_w)
AM_RANGE(0x8700, 0x8700) AM_MIRROR(0x00ff) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
AM_RANGE(0x8800, 0x8fff) AM_RAM
AM_RANGE(0x9000, 0x9fff) AM_ROMBANK("bank1")
@@ -218,9 +220,6 @@ MACHINE_START_MEMBER(tutankhm_state,tutankhm)
MACHINE_RESET_MEMBER(tutankhm_state,tutankhm)
{
m_irq_toggle = 0;
- m_irq_enable = 0;
- m_flip_x = 0;
- m_flip_y = 0;
}
static MACHINE_CONFIG_START( tutankhm )
@@ -233,6 +232,16 @@ static MACHINE_CONFIG_START( tutankhm )
MCFG_MACHINE_START_OVERRIDE(tutankhm_state,tutankhm)
MCFG_MACHINE_RESET_OVERRIDE(tutankhm_state,tutankhm)
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // C3
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(tutankhm_state, irq_enable_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(NOOP) // PAY OUT - not used
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(tutankhm_state, coin_counter_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(tutankhm_state, coin_counter_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // starfield?
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("timeplt_audio", timeplt_audio_device, mute_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(tutankhm_state, flip_screen_x_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(tutankhm_state, flip_screen_y_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/ultratnk.cpp b/src/mame/drivers/ultratnk.cpp
index 6ab14d4c161..369e6891b68 100644
--- a/src/mame/drivers/ultratnk.cpp
+++ b/src/mame/drivers/ultratnk.cpp
@@ -10,6 +10,7 @@ Atari Ultra Tank driver
#include "includes/ultratnk.h"
#include "audio/sprint4.h"
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "speaker.h"
#define MASTER_CLOCK XTAL_12_096MHz
@@ -134,30 +135,22 @@ WRITE8_MEMBER(ultratnk_state::da_latch_w)
}
-WRITE8_MEMBER(ultratnk_state::led_1_w)
+WRITE_LINE_MEMBER(ultratnk_state::led_1_w)
{
- output().set_led_value(0, offset & 1); /* left player start */
+ output().set_led_value(0, state); /* left player start */
}
-WRITE8_MEMBER(ultratnk_state::led_2_w)
+WRITE_LINE_MEMBER(ultratnk_state::led_2_w)
{
- output().set_led_value(1, offset & 1); /* right player start */
+ output().set_led_value(1, state); /* right player start */
}
-WRITE8_MEMBER(ultratnk_state::lockout_w)
+WRITE_LINE_MEMBER(ultratnk_state::lockout_w)
{
- machine().bookkeeping().coin_lockout_global_w(~offset & 1);
+ machine().bookkeeping().coin_lockout_global_w(!state);
}
-WRITE8_MEMBER(ultratnk_state::fire_1_w)
-{
- m_discrete->write(space, ULTRATNK_FIRE_EN_1, offset & 1);
-}
-WRITE8_MEMBER(ultratnk_state::fire_2_w)
-{
- m_discrete->write(space, ULTRATNK_FIRE_EN_2, offset & 1);
-}
WRITE8_MEMBER(ultratnk_state::attract_w)
{
m_discrete->write(space, ULTRATNK_ATTRACT_EN, data & 1);
@@ -189,11 +182,7 @@ static ADDRESS_MAP_START( ultratnk_cpu_map, AS_PROGRAM, 8, ultratnk_state )
AM_RANGE(0x2040, 0x2041) AM_MIRROR(0x718) AM_WRITE(da_latch_w)
AM_RANGE(0x2042, 0x2043) AM_MIRROR(0x718) AM_WRITE(explosion_w)
AM_RANGE(0x2044, 0x2045) AM_MIRROR(0x718) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
- AM_RANGE(0x2066, 0x2067) AM_MIRROR(0x710) AM_WRITE(lockout_w)
- AM_RANGE(0x2068, 0x2069) AM_MIRROR(0x710) AM_WRITE(led_1_w)
- AM_RANGE(0x206a, 0x206b) AM_MIRROR(0x710) AM_WRITE(led_2_w)
- AM_RANGE(0x206c, 0x206d) AM_MIRROR(0x710) AM_WRITE(fire_2_w)
- AM_RANGE(0x206e, 0x206f) AM_MIRROR(0x710) AM_WRITE(fire_1_w)
+ AM_RANGE(0x2060, 0x206f) AM_MIRROR(0x710) AM_DEVWRITE("latch", f9334_device, write_a0)
AM_RANGE(0x2800, 0x2fff) AM_NOP /* diagnostic ROM */
AM_RANGE(0x3000, 0x3fff) AM_ROM
@@ -315,6 +304,13 @@ static MACHINE_CONFIG_START( ultratnk )
MCFG_CPU_ADD("maincpu", M6502, PIXEL_CLOCK / 8)
MCFG_CPU_PROGRAM_MAP(ultratnk_cpu_map)
+ MCFG_DEVICE_ADD("latch", F9334, 0) // E11
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ultratnk_state, lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ultratnk_state, led_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ultratnk_state, led_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ULTRATNK_FIRE_EN_2>))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("discrete", discrete_device, write_line<ULTRATNK_FIRE_EN_1>))
+
MCFG_WATCHDOG_ADD("watchdog")
MCFG_WATCHDOG_VBLANK_INIT("screen", 8)
diff --git a/src/mame/drivers/vastar.cpp b/src/mame/drivers/vastar.cpp
index de2ec1c4445..3f845e90a97 100644
--- a/src/mame/drivers/vastar.cpp
+++ b/src/mame/drivers/vastar.cpp
@@ -106,6 +106,7 @@ Vsync : 60.58hz
#include "includes/vastar.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "screen.h"
@@ -119,9 +120,6 @@ void vastar_state::machine_start()
void vastar_state::machine_reset()
{
- /* we must start with the second CPU halted */
- m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
- m_nmi_mask = 0;
m_sprite_priority[0] = 0;
m_spriteram1 = m_fgvideoram + 0x000;
@@ -131,20 +129,14 @@ void vastar_state::machine_reset()
m_spriteram3 = m_fgvideoram + 0x800;
}
-WRITE8_MEMBER(vastar_state::hold_cpu2_w)
+WRITE_LINE_MEMBER(vastar_state::flip_screen_w)
{
- /* I'm not sure that this works exactly like this */
- m_subcpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
+ flip_screen_set(state);
}
-WRITE8_MEMBER(vastar_state::flip_screen_w)
+WRITE_LINE_MEMBER(vastar_state::nmi_mask_w)
{
- flip_screen_set(data);
-}
-
-WRITE8_MEMBER(vastar_state::nmi_mask_w)
-{
- m_nmi_mask = data & 1;
+ m_nmi_mask = state;
}
@@ -160,9 +152,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( main_port_map, AS_IO, 8, vastar_state )
ADDRESS_MAP_GLOBAL_MASK(0x0f)
- AM_RANGE(0x00, 0x00) AM_WRITE(nmi_mask_w)
- AM_RANGE(0x01, 0x01) AM_WRITE(flip_screen_w)
- AM_RANGE(0x02, 0x02) AM_WRITE(hold_cpu2_w)
+ AM_RANGE(0x00, 0x07) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -438,6 +428,11 @@ static MACHINE_CONFIG_START( vastar )
MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - seems enough to ensure proper synchronization of the CPUs */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(vastar_state, nmi_mask_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(vastar_state, flip_screen_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(INPUTLINE("sub", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/warpwarp.cpp b/src/mame/drivers/warpwarp.cpp
index 39e819805a1..60bc71de95e 100644
--- a/src/mame/drivers/warpwarp.cpp
+++ b/src/mame/drivers/warpwarp.cpp
@@ -130,6 +130,7 @@ Notes:
#include "includes/warpwarp.h"
#include "cpu/i8085/i8085.h"
+#include "machine/74259.h"
#include "screen.h"
#include "speaker.h"
@@ -193,40 +194,47 @@ WRITE8_MEMBER(warpwarp_state::geebee_out6_w)
}
}
-WRITE8_MEMBER(warpwarp_state::geebee_out7_w)
+WRITE_LINE_MEMBER(warpwarp_state::lamp_1_w)
{
- switch (offset & 7)
- {
- case 0:
- output().set_led_value(0,data & 1);
- break;
- case 1:
- output().set_led_value(1,data & 1);
- break;
- case 2:
- output().set_led_value(2,data & 1);
- break;
- case 3:
- machine().bookkeeping().coin_counter_w(0,data & 1);
- break;
- case 4:
- if (strcmp(machine().system().name, "geebeeb"))
- machine().bookkeeping().coin_lockout_global_w(~data & 1);
- break;
- case 5:
- if( m_geebee_bgw != (data & 1) )
- machine().tilemap().mark_all_dirty();
- m_geebee_bgw = data & 1;
- break;
- case 6:
- m_ball_on = data & 1;
- if (~data & 1)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
- case 7:
- flip_screen_set(data & 1);
- break;
- }
+ output().set_led_value(0, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::lamp_2_w)
+{
+ output().set_led_value(1, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::lamp_3_w)
+{
+ output().set_led_value(2, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::lock_out_w)
+{
+ machine().bookkeeping().coin_lockout_global_w(!state);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::geebee_bgw_w)
+{
+ m_geebee_bgw = state;
+ machine().tilemap().mark_all_dirty();
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::ball_on_w)
+{
+ m_ball_on = state;
+ if (!state)
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+}
+
+WRITE_LINE_MEMBER(warpwarp_state::inv_w)
+{
+ flip_screen_set(state);
}
@@ -280,39 +288,6 @@ WRITE8_MEMBER(warpwarp_state::warpwarp_out0_w)
}
}
-WRITE8_MEMBER(warpwarp_state::warpwarp_out3_w)
-{
- switch (offset & 7)
- {
- case 0:
- output().set_led_value(0,data & 1);
- break;
- case 1:
- output().set_led_value(1,data & 1);
- break;
- case 2:
- output().set_led_value(2,data & 1);
- break;
- case 3:
- /* n.c. */
- break;
- case 4:
- machine().bookkeeping().coin_lockout_global_w(~data & 1);
- break;
- case 5:
- machine().bookkeeping().coin_counter_w(0,data & 1);
- break;
- case 6:
- m_ball_on = data & 1;
- if (~data & 1)
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
- case 7:
- flip_screen_set(data & 1);
- break;
- }
-}
-
static ADDRESS_MAP_START( geebee_map, AS_PROGRAM, 8, warpwarp_state )
@@ -322,13 +297,13 @@ static ADDRESS_MAP_START( geebee_map, AS_PROGRAM, 8, warpwarp_state )
AM_RANGE(0x4000, 0x40ff) AM_RAM
AM_RANGE(0x5000, 0x53ff) AM_READ(geebee_in_r)
AM_RANGE(0x6000, 0x6fff) AM_WRITE(geebee_out6_w)
- AM_RANGE(0x7000, 0x7fff) AM_WRITE(geebee_out7_w)
+ AM_RANGE(0x7000, 0x7007) AM_MIRROR(0x0ff8) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( geebee_port_map, AS_IO, 8, warpwarp_state )
AM_RANGE(0x50, 0x53) AM_READ(geebee_in_r)
AM_RANGE(0x60, 0x6f) AM_WRITE(geebee_out6_w)
- AM_RANGE(0x70, 0x7f) AM_WRITE(geebee_out7_w)
+ AM_RANGE(0x70, 0x77) AM_MIRROR(0x08) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -340,7 +315,7 @@ static ADDRESS_MAP_START( bombbee_map, AS_PROGRAM, 8, warpwarp_state )
AM_RANGE(0x6000, 0x600f) AM_READWRITE(warpwarp_sw_r, warpwarp_out0_w)
AM_RANGE(0x6010, 0x601f) AM_READ(warpwarp_vol_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music1_w)
AM_RANGE(0x6020, 0x602f) AM_READ(warpwarp_dsw1_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music2_w)
- AM_RANGE(0x6030, 0x603f) AM_WRITE(warpwarp_out3_w)
+ AM_RANGE(0x6030, 0x6037) AM_MIRROR(0x0008) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( warpwarp_map, AS_PROGRAM, 8, warpwarp_state )
@@ -351,7 +326,7 @@ static ADDRESS_MAP_START( warpwarp_map, AS_PROGRAM, 8, warpwarp_state )
AM_RANGE(0xc000, 0xc00f) AM_READWRITE(warpwarp_sw_r, warpwarp_out0_w)
AM_RANGE(0xc010, 0xc01f) AM_READ(warpwarp_vol_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music1_w)
AM_RANGE(0xc020, 0xc02f) AM_READ(warpwarp_dsw1_r) AM_DEVWRITE("warpwarp_custom", warpwarp_sound_device, music2_w)
- AM_RANGE(0xc030, 0xc03f) AM_WRITE(warpwarp_out3_w)
+ AM_RANGE(0xc030, 0xc037) AM_MIRROR(0x0008) AM_DEVWRITE("latch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -738,6 +713,16 @@ static MACHINE_CONFIG_START( geebee )
MCFG_CPU_IO_MAP(geebee_port_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", warpwarp_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // 5N
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(warpwarp_state, lamp_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(warpwarp_state, lamp_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(warpwarp_state, lamp_3_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(warpwarp_state, counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(warpwarp_state, lock_out_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(warpwarp_state, geebee_bgw_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(warpwarp_state, ball_on_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(warpwarp_state, inv_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/3, 384, 0, 272, 264, 0, 224)
@@ -757,6 +742,11 @@ static MACHINE_CONFIG_START( geebee )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( geebeeb, geebee )
+ MCFG_DEVICE_MODIFY("latch")
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // remove coin lockout
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( navarone, geebee )
/* basic machine hardware */
@@ -775,6 +765,16 @@ static MACHINE_CONFIG_START( bombbee )
MCFG_CPU_PROGRAM_MAP(bombbee_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", warpwarp_state, vblank_irq)
+ MCFG_DEVICE_ADD("latch", LS259, 0) // 6L on Warp Warp
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(warpwarp_state, lamp_1_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(warpwarp_state, lamp_2_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(warpwarp_state, lamp_3_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(NOOP) // n.c.
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(warpwarp_state, lock_out_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(warpwarp_state, counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(warpwarp_state, ball_on_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(warpwarp_state, inv_w))
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
@@ -997,7 +997,7 @@ DRIVER_INIT_MEMBER(warpwarp_state,warpwarp)
/* B & W games */
GAMEL(1978, geebee, 0, geebee, geebee, warpwarp_state, geebee, ROT90, "Namco", "Gee Bee (Japan)", MACHINE_SUPPORTS_SAVE, layout_geebee )
-GAMEL(1978, geebeeb, geebee, geebee, geebeeb, warpwarp_state, geebee, ROT90, "Namco (F.lli Bertolino license)", "Gee Bee (Europe)", MACHINE_SUPPORTS_SAVE, layout_geebee ) // Fratelli Bertolino
+GAMEL(1978, geebeeb, geebee, geebeeb, geebeeb, warpwarp_state, geebee, ROT90, "Namco (F.lli Bertolino license)", "Gee Bee (Europe)", MACHINE_SUPPORTS_SAVE, layout_geebee ) // Fratelli Bertolino
GAMEL(1978, geebeeg, geebee, geebee, geebee, warpwarp_state, geebee, ROT90, "Namco (Gremlin license)", "Gee Bee (US)", MACHINE_SUPPORTS_SAVE, layout_geebee )
GAMEL(1980, navarone, 0, navarone, navarone, warpwarp_state, navarone, ROT90, "Namco", "Navarone", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_navarone )
diff --git a/src/mame/drivers/wiping.cpp b/src/mame/drivers/wiping.cpp
index 5f79e91e739..64d31775af3 100644
--- a/src/mame/drivers/wiping.cpp
+++ b/src/mame/drivers/wiping.cpp
@@ -40,6 +40,7 @@ dip: 6.7 7.7
#include "audio/wiping.h"
#include "cpu/z80/z80.h"
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "screen.h"
#include "speaker.h"
@@ -67,19 +68,14 @@ READ8_MEMBER(wiping_state::ports_r)
// irq/reset controls like in clshroad.cpp
-WRITE8_MEMBER(wiping_state::subcpu_reset_w)
+WRITE_LINE_MEMBER(wiping_state::main_irq_mask_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
+ m_main_irq_mask = state;
}
-WRITE8_MEMBER(wiping_state::main_irq_mask_w)
+WRITE_LINE_MEMBER(wiping_state::sound_irq_mask_w)
{
- m_main_irq_mask = data & 1;
-}
-
-WRITE8_MEMBER(wiping_state::sound_irq_mask_w)
-{
- m_sound_irq_mask = data & 1;
+ m_sound_irq_mask = state;
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, wiping_state )
@@ -90,9 +86,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, wiping_state )
AM_RANGE(0x8000, 0x8bff) AM_RAM
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("share2")
- AM_RANGE(0xa000, 0xa000) AM_WRITE(main_irq_mask_w)
- AM_RANGE(0xa002, 0xa002) AM_WRITE(flipscreen_w)
- AM_RANGE(0xa003, 0xa003) AM_WRITE(subcpu_reset_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
AM_RANGE(0xa800, 0xa807) AM_READ(ports_r)
AM_RANGE(0xb000, 0xb7ff) AM_RAM
AM_RANGE(0xb800, 0xb800) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
@@ -103,7 +97,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, wiping_state )
AM_RANGE(0x4000, 0x7fff) AM_DEVWRITE("wiping", wiping_sound_device, sound_w)
AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("share2")
- AM_RANGE(0xa001, 0xa001) AM_WRITE(sound_irq_mask_w)
+ AM_RANGE(0xa000, 0xa007) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
ADDRESS_MAP_END
@@ -300,6 +294,12 @@ static MACHINE_CONFIG_START( wiping )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_PERIODIC_INT_DRIVER(wiping_state, sound_timer_irq, 120) /* periodic interrupt, don't know about the frequency */
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0) // 5A
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(wiping_state, main_irq_mask_w)) // INT1
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(wiping_state, sound_irq_mask_w)) // INT2
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(wiping_state, flipscreen_w)) // INV
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(INPUTLINE("audiocpu", INPUT_LINE_RESET)) MCFG_DEVCB_INVERT // CP2RE
+
MCFG_WATCHDOG_ADD("watchdog")
/* video hardware */
diff --git a/src/mame/drivers/wrally.cpp b/src/mame/drivers/wrally.cpp
index 62aae7a0506..0fb3aaa0452 100644
--- a/src/mame/drivers/wrally.cpp
+++ b/src/mame/drivers/wrally.cpp
@@ -153,13 +153,9 @@ static ADDRESS_MAP_START( wrally_map, AS_PROGRAM, 16, wrally_state )
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("P1_P2")
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("WHEEL")
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x70000a, 0x70000b) AM_SELECT(0x000070) AM_WRITE8(latch_w, 0x00ff)
AM_RANGE(0x70000c, 0x70000d) AM_WRITE(okim6295_bankswitch_w) /* OKI6295 bankswitch */
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status/data register */
- AM_RANGE(0x70000a, 0x70001b) AM_WRITE(coin_lockout_w) /* Coin lockouts */
- AM_RANGE(0x70002a, 0x70003b) AM_WRITE(coin_counter_w) /* Coin counters */
- AM_RANGE(0x70004a, 0x70004b) AM_WRITENOP /* Sound muting */
- AM_RANGE(0x70005a, 0x70005b) AM_WRITE(flipscreen_w) /* Flip screen */
- AM_RANGE(0x70006a, 0x70007b) AM_WRITENOP /* ??? */
AM_RANGE(0xfec000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM (shared with DS5002FP) */
ADDRESS_MAP_END
@@ -284,6 +280,16 @@ static MACHINE_CONFIG_START( wrally )
MCFG_PALETTE_ADD("palette", 1024*8)
MCFG_PALETTE_FORMAT(xxxxBBBBRRRRGGGG)
+ MCFG_DEVICE_ADD("outlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(wrally_state, coin1_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(wrally_state, coin2_lockout_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(wrally_state, coin1_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(wrally_state, coin2_counter_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) /* Sound muting */
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(wrally_state, flipscreen_w)) /* Flip screen */
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(NOOP) /* ??? */
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(NOOP) /* ??? */
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/xorworld.cpp b/src/mame/drivers/xorworld.cpp
index 143c2499857..498b3948d45 100644
--- a/src/mame/drivers/xorworld.cpp
+++ b/src/mame/drivers/xorworld.cpp
@@ -33,6 +33,7 @@ EEPROM chip: 93C46
#include "includes/xorworld.h"
#include "cpu/m68000/m68000.h"
+#include "machine/74259.h"
#include "machine/eepromser.h"
#include "sound/saa1099.h"
@@ -50,24 +51,6 @@ EEPROM chip: 93C46
EEPROM read/write/control
****************************************************************/
-WRITE16_MEMBER(xorworld_state::eeprom_chip_select_w)
-{
- /* bit 0 is CS (active low) */
- m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-WRITE16_MEMBER(xorworld_state::eeprom_serial_clock_w)
-{
- /* bit 0 is SK (active high) */
- m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-WRITE16_MEMBER(xorworld_state::eeprom_data_w)
-{
- /* bit 0 is EEPROM data (DIN) */
- m_eeprom->di_write(data & 0x01);
-}
-
WRITE16_MEMBER(xorworld_state::irq2_ack_w)
{
m_maincpu->set_input_line(2, CLEAR_LINE);
@@ -84,13 +67,11 @@ static ADDRESS_MAP_START( xorworld_map, AS_PROGRAM, 16, xorworld_state )
AM_RANGE(0x400000, 0x400001) AM_READ_PORT("P2")
AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW")
AM_RANGE(0x800000, 0x800003) AM_DEVWRITE8("saa", saa1099_device, write, 0x00ff)
- AM_RANGE(0xa00008, 0xa00009) AM_WRITE(eeprom_chip_select_w)
- AM_RANGE(0xa0000a, 0xa0000b) AM_WRITE(eeprom_serial_clock_w)
- AM_RANGE(0xa0000c, 0xa0000d) AM_WRITE(eeprom_data_w)
+ AM_RANGE(0xa00000, 0xa0000f) AM_DEVWRITE8("mainlatch", ls259_device, write_d0, 0x00ff)
AM_RANGE(0xffc000, 0xffc7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0xffc800, 0xffc87f) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0xffc880, 0xffc881) AM_WRITE(irq2_ack_w)
- AM_RANGE(0xffc882, 0xffc883) AM_WRITE(irq6_ack_w)
+ AM_RANGE(0xffc880, 0xffc881) AM_WRITE(irq2_ack_w) AM_READNOP
+ AM_RANGE(0xffc882, 0xffc883) AM_WRITE(irq6_ack_w) AM_READNOP
AM_RANGE(0xffc884, 0xffffff) AM_RAM
ADDRESS_MAP_END
@@ -184,6 +165,11 @@ static MACHINE_CONFIG_START( xorworld )
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
+ MCFG_DEVICE_ADD("mainlatch", LS259, 0)
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) // CS (active low)
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, clk_write)) // SK (active high)
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) // EEPROM data (DIN)
+
// video hardware
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/includes/asteroid.h b/src/mame/includes/asteroid.h
index 76f90210483..314f3bc672d 100644
--- a/src/mame/includes/asteroid.h
+++ b/src/mame/includes/asteroid.h
@@ -9,6 +9,28 @@
#include "sound/discrete.h"
#include "video/avgdvg.h"
+#define ASTEROID_SAUCER_SND_EN NODE_01
+#define ASTEROID_SAUCER_FIRE_EN NODE_02
+#define ASTEROID_SAUCER_SEL NODE_03
+#define ASTEROID_THRUST_EN NODE_04
+#define ASTEROID_SHIP_FIRE_EN NODE_05
+#define ASTEROID_LIFE_EN NODE_06
+#define ASTEROID_NOISE_RESET NODE_07
+
+#define ASTEROID_THUMP_EN NODE_08
+#define ASTEROID_THUMP_DATA NODE_09
+#define ASTEROID_EXPLODE_DATA NODE_10
+#define ASTEROID_EXPLODE_PITCH NODE_11
+
+#define ASTEROID_NOISE NODE_20
+#define ASTEROID_THUMP_SND NODE_21
+#define ASTEROID_SAUCER_SND NODE_22
+#define ASTEROID_LIFE_SND NODE_23
+#define ASTEROID_SAUCER_FIRE_SND NODE_24
+#define ASTEROID_SHIP_FIRE_SND NODE_25
+#define ASTEROID_EXPLODE_SND NODE_26
+#define ASTEROID_THRUST_SND NODE_27
+
class asteroid_state : public driver_device
{
public:
@@ -29,19 +51,19 @@ public:
optional_memory_bank m_ram1;
optional_memory_bank m_ram2;
- DECLARE_WRITE8_MEMBER(astdelux_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
DECLARE_WRITE8_MEMBER(llander_led_w);
DECLARE_READ8_MEMBER(asteroid_IN0_r);
DECLARE_READ8_MEMBER(asterock_IN0_r);
DECLARE_READ8_MEMBER(asteroid_IN1_r);
DECLARE_READ8_MEMBER(asteroid_DSW1_r);
DECLARE_WRITE8_MEMBER(asteroid_bank_switch_w);
- DECLARE_WRITE8_MEMBER(astdelux_bank_switch_w);
- DECLARE_WRITE8_MEMBER(astdelux_led_w);
+ DECLARE_WRITE_LINE_MEMBER(start1_led_w);
+ DECLARE_WRITE_LINE_MEMBER(start2_led_w);
DECLARE_WRITE8_MEMBER(asteroid_explode_w);
DECLARE_WRITE8_MEMBER(asteroid_thump_w);
- DECLARE_WRITE8_MEMBER(asteroid_sounds_w);
- DECLARE_WRITE8_MEMBER(astdelux_sounds_w);
DECLARE_WRITE8_MEMBER(asteroid_noise_reset_w);
DECLARE_WRITE8_MEMBER(llander_snd_reset_w);
DECLARE_WRITE8_MEMBER(llander_sounds_w);
diff --git a/src/mame/includes/atarisy1.h b/src/mame/includes/atarisy1.h
index 8cd6c99220f..6c684e63454 100644
--- a/src/mame/includes/atarisy1.h
+++ b/src/mame/includes/atarisy1.h
@@ -6,8 +6,10 @@
*************************************************************************/
+#include "machine/74259.h"
#include "machine/atarigen.h"
#include "sound/tms5220.h"
+#include "sound/ym2151.h"
#include "video/atarimo.h"
class atarisy1_state : public atarigen_state
@@ -25,7 +27,9 @@ public:
m_yscroll_reset_timer(*this, "yreset_timer"),
m_scanline_timer(*this, "scan_timer"),
m_int3off_timer(*this, "int3off_timer"),
- m_tms(*this, "tms") { }
+ m_tms(*this, "tms"),
+ m_ymsnd(*this, "ymsnd"),
+ m_outlatch(*this, "outlatch") { }
required_device<cpu_device> m_audiocpu;
required_device<atari_sound_comm_device> m_soundcomm;
@@ -57,6 +61,9 @@ public:
/* speech */
required_device<tms5220_device> m_tms;
+ required_device<ym2151_device> m_ymsnd;
+ required_device<ls259_device> m_outlatch;
+
/* graphics bank tracking */
uint8_t m_bank_gfx[3][8];
uint8_t m_bank_color_shift[MAX_GFX_ELEMENTS];
@@ -67,7 +74,11 @@ public:
DECLARE_WRITE16_MEMBER(joystick_w);
DECLARE_READ16_MEMBER(trakball_r);
DECLARE_READ8_MEMBER(switch_6502_r);
- DECLARE_WRITE8_MEMBER(led_w);
+ DECLARE_WRITE_LINE_MEMBER(music_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(led_1_w);
+ DECLARE_WRITE_LINE_MEMBER(led_2_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
DECLARE_WRITE8_MEMBER(via_pa_w);
DECLARE_READ8_MEMBER(via_pa_r);
DECLARE_WRITE8_MEMBER(via_pb_w);
diff --git a/src/mame/includes/avalnche.h b/src/mame/includes/avalnche.h
index 6f61d5a6b38..6c42bdfd902 100644
--- a/src/mame/includes/avalnche.h
+++ b/src/mame/includes/avalnche.h
@@ -8,6 +8,13 @@
#include "sound/discrete.h"
+/* Avalanche Discrete Sound Input Nodes */
+#define AVALNCHE_AUD0_EN NODE_01
+#define AVALNCHE_AUD1_EN NODE_02
+#define AVALNCHE_AUD2_EN NODE_03
+#define AVALNCHE_SOUNDLVL_DATA NODE_04
+#define AVALNCHE_ATTRACT_EN NODE_05
+
class avalnche_state : public driver_device
{
@@ -23,18 +30,18 @@ public:
uint8_t m_avalance_video_inverted;
- DECLARE_WRITE8_MEMBER(avalance_video_invert_w);
+ DECLARE_WRITE_LINE_MEMBER(video_invert_w);
DECLARE_WRITE8_MEMBER(catch_coin_counter_w);
- DECLARE_WRITE8_MEMBER(avalance_credit_1_lamp_w);
- DECLARE_WRITE8_MEMBER(avalance_credit_2_lamp_w);
- DECLARE_WRITE8_MEMBER(avalance_start_lamp_w);
+ DECLARE_WRITE_LINE_MEMBER(credit_1_lamp_w);
+ DECLARE_WRITE_LINE_MEMBER(credit_2_lamp_w);
+ DECLARE_WRITE_LINE_MEMBER(start_lamp_w);
virtual void machine_start() override;
virtual void machine_reset() override;
uint32_t screen_update_avalnche(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE8_MEMBER(avalnche_noise_amplitude_w);
- DECLARE_WRITE8_MEMBER(avalnche_attract_enable_w);
- DECLARE_WRITE8_MEMBER(avalnche_audio_w);
- DECLARE_WRITE8_MEMBER(catch_audio_w);
+ DECLARE_WRITE_LINE_MEMBER(catch_aud0_w);
+ DECLARE_WRITE_LINE_MEMBER(catch_aud1_w);
+ DECLARE_WRITE_LINE_MEMBER(catch_aud2_w);
required_device<cpu_device> m_maincpu;
};
diff --git a/src/mame/includes/bagman.h b/src/mame/includes/bagman.h
index b7c640942de..fe2394a3b49 100644
--- a/src/mame/includes/bagman.h
+++ b/src/mame/includes/bagman.h
@@ -1,5 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
+
+#include "machine/74259.h"
#include "sound/tms5110.h"
class bagman_state : public driver_device
@@ -11,23 +13,23 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_tmsprom(*this, "tmsprom"),
+ m_tmslatch(*this, "tmslatch"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
- m_video_enable(*this, "video_enable"),
m_spriteram(*this, "spriteram") { }
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_device<tmsprom_device> m_tmsprom;
+ optional_device<ls259_device> m_tmslatch;
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_colorram;
- required_shared_ptr<uint8_t> m_video_enable;
required_shared_ptr<uint8_t> m_spriteram;
- uint8_t m_irq_mask;
- uint8_t m_ls259_buf[8];
+ bool m_irq_mask;
+ bool m_video_enable;
uint8_t m_p1_res;
uint8_t m_p1_old_val;
uint8_t m_p2_res;
@@ -45,14 +47,19 @@ public:
tilemap_t *m_bg_tilemap;
// common
- DECLARE_WRITE8_MEMBER(coincounter_w);
- DECLARE_WRITE8_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(video_enable_w);
// bagman
DECLARE_WRITE8_MEMBER(ls259_w);
+ DECLARE_WRITE_LINE_MEMBER(tmsprom_bit_w);
+ DECLARE_WRITE_LINE_MEMBER(tmsprom_csq0_w);
+ DECLARE_WRITE_LINE_MEMBER(tmsprom_csq1_w);
DECLARE_WRITE8_MEMBER(pal16r6_w);
DECLARE_READ8_MEMBER(pal16r6_r);
@@ -63,12 +70,10 @@ public:
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void machine_start() override;
- DECLARE_MACHINE_START(bagman);
DECLARE_MACHINE_START(squaitsa);
virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(bagman);
- DECLARE_DRIVER_INIT(bagman);
INTERRUPT_GEN_MEMBER(vblank_irq);
diff --git a/src/mame/includes/bosco.h b/src/mame/includes/bosco.h
index 2a0a17c0003..001abc62e73 100644
--- a/src/mame/includes/bosco.h
+++ b/src/mame/includes/bosco.h
@@ -14,14 +14,12 @@ public:
: galaga_state(mconfig, type, tag)
, m_bosco_radarattr(*this, "bosco_radarattr")
, m_bosco_starcontrol(*this, "starcontrol")
- , m_bosco_starblink(*this, "bosco_starblink")
{
}
required_shared_ptr<uint8_t> m_bosco_radarattr;
required_shared_ptr<uint8_t> m_bosco_starcontrol;
- required_shared_ptr<uint8_t> m_bosco_starblink;
uint8_t *m_bosco_radarx;
uint8_t *m_bosco_radary;
@@ -29,7 +27,6 @@ public:
uint8_t *m_spriteram;
uint8_t *m_spriteram2;
uint32_t m_spriteram_size;
- DECLARE_WRITE8_MEMBER(bosco_flip_screen_w);
TILEMAP_MAPPER_MEMBER(fg_tilemap_scan);
TILE_GET_INFO_MEMBER(bg_get_tile_info);
TILE_GET_INFO_MEMBER(fg_get_tile_info);
diff --git a/src/mame/includes/bsktball.h b/src/mame/includes/bsktball.h
index d0e0206549b..3e9a9ca0095 100644
--- a/src/mame/includes/bsktball.h
+++ b/src/mame/includes/bsktball.h
@@ -50,12 +50,12 @@ public:
int m_last_p1_vert;
int m_last_p2_horiz;
int m_last_p2_vert;
- DECLARE_WRITE8_MEMBER(bsktball_nmion_w);
- DECLARE_WRITE8_MEMBER(bsktball_ld1_w);
- DECLARE_WRITE8_MEMBER(bsktball_ld2_w);
+ DECLARE_WRITE_LINE_MEMBER(nmion_w);
+ DECLARE_WRITE_LINE_MEMBER(ld1_w);
+ DECLARE_WRITE_LINE_MEMBER(ld2_w);
DECLARE_READ8_MEMBER(bsktball_in0_r);
- DECLARE_WRITE8_MEMBER(bsktball_led1_w);
- DECLARE_WRITE8_MEMBER(bsktball_led2_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
DECLARE_WRITE8_MEMBER(bsktball_videoram_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void machine_start() override;
@@ -66,7 +66,6 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(bsktball_scanline);
DECLARE_WRITE8_MEMBER(bsktball_bounce_w);
DECLARE_WRITE8_MEMBER(bsktball_note_w);
- DECLARE_WRITE8_MEMBER(bsktball_noise_reset_w);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
diff --git a/src/mame/includes/canyon.h b/src/mame/includes/canyon.h
index 1bc774e35e2..902e6484c4f 100644
--- a/src/mame/includes/canyon.h
+++ b/src/mame/includes/canyon.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/discrete.h"
@@ -26,6 +27,7 @@ public:
canyon_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
+ m_outlatch(*this, "outlatch"),
m_discrete(*this, "discrete"),
m_maincpu(*this, "maincpu"),
m_watchdog(*this, "watchdog"),
@@ -35,13 +37,16 @@ public:
/* memory pointers */
required_shared_ptr<uint8_t> m_videoram;
+ required_device<f9334_device> m_outlatch;
required_device<discrete_device> m_discrete;
/* video-related */
tilemap_t *m_bg_tilemap;
DECLARE_READ8_MEMBER(canyon_switches_r);
DECLARE_READ8_MEMBER(canyon_options_r);
- DECLARE_WRITE8_MEMBER(canyon_led_w);
+ DECLARE_WRITE8_MEMBER(output_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
DECLARE_WRITE8_MEMBER(canyon_videoram_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void video_start() override;
@@ -49,8 +54,6 @@ public:
uint32_t screen_update_canyon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE8_MEMBER(canyon_motor_w);
DECLARE_WRITE8_MEMBER(canyon_explode_w);
- DECLARE_WRITE8_MEMBER(canyon_attract_w);
- DECLARE_WRITE8_MEMBER(canyon_whistle_w);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
void draw_bombs( bitmap_ind16 &bitmap, const rectangle &cliprect );
required_device<cpu_device> m_maincpu;
diff --git a/src/mame/includes/cclimber.h b/src/mame/includes/cclimber.h
index 2b1ec8a32b6..4e42ad5282a 100644
--- a/src/mame/includes/cclimber.h
+++ b/src/mame/includes/cclimber.h
@@ -1,6 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
+#include "machine/74259.h"
#include "machine/gen_latch.h"
class cclimber_state : public driver_device
@@ -12,6 +13,7 @@ public:
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_mainlatch(*this, "mainlatch"),
m_soundlatch(*this, "soundlatch"),
m_bigsprite_videoram(*this, "bigspriteram"),
m_videoram(*this, "videoram"),
@@ -19,9 +21,6 @@ public:
m_spriteram(*this, "spriteram"),
m_bigsprite_control(*this, "bigspritectrl"),
m_colorram(*this, "colorram"),
- m_flip_screen(*this, "flip_screen"),
- m_swimmer_side_background_enabled(*this, "sidebg_enable"),
- m_swimmer_palettebank(*this, "palettebank"),
m_swimmer_background_color(*this, "bgcolor"),
m_toprollr_bg_videoram(*this, "bg_videoram"),
m_toprollr_bg_coloram(*this, "bg_coloram"),
@@ -31,6 +30,7 @@ public:
optional_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_mainlatch;
optional_device<generic_latch_8_device> m_soundlatch;
required_shared_ptr<uint8_t> m_bigsprite_videoram;
@@ -39,18 +39,20 @@ public:
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_bigsprite_control;
required_shared_ptr<uint8_t> m_colorram;
- required_shared_ptr<uint8_t> m_flip_screen;
- optional_shared_ptr<uint8_t> m_swimmer_side_background_enabled;
- optional_shared_ptr<uint8_t> m_swimmer_palettebank;
optional_shared_ptr<uint8_t> m_swimmer_background_color;
optional_shared_ptr<uint8_t> m_toprollr_bg_videoram;
optional_shared_ptr<uint8_t> m_toprollr_bg_coloram;
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
+ bool m_flip_x;
+ bool m_flip_y;
+ bool m_swimmer_side_background_enabled;
+ bool m_swimmer_palettebank;
+
uint8_t m_yamato_p0;
uint8_t m_yamato_p1;
uint8_t m_toprollr_rombank;
- uint8_t m_nmi_mask;
+ bool m_nmi_mask;
tilemap_t *m_pf_tilemap;
tilemap_t *m_bs_tilemap;
tilemap_t *m_toproller_bg_tilemap;
@@ -61,11 +63,14 @@ public:
DECLARE_WRITE8_MEMBER(yamato_p1_w);
DECLARE_READ8_MEMBER(yamato_p0_r);
DECLARE_READ8_MEMBER(yamato_p1_r);
- DECLARE_WRITE8_MEMBER(toprollr_rombank_w);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(toprollr_rombank_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_READ8_MEMBER(bagmanf_a000_r);
DECLARE_WRITE8_MEMBER(cclimber_colorram_w);
- DECLARE_WRITE8_MEMBER(cannonb_flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(sidebg_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(palette_bank_w);
virtual void machine_start() override;
DECLARE_DRIVER_INIT(cclimber);
@@ -77,7 +82,6 @@ public:
DECLARE_DRIVER_INIT(cannonb);
DECLARE_DRIVER_INIT(dking);
DECLARE_DRIVER_INIT(rpatrol);
- DECLARE_MACHINE_RESET(cclimber);
DECLARE_VIDEO_START(cclimber);
DECLARE_PALETTE_INIT(cclimber);
DECLARE_VIDEO_START(swimmer);
diff --git a/src/mame/includes/centiped.h b/src/mame/includes/centiped.h
index 552e0354600..f152257a275 100644
--- a/src/mame/includes/centiped.h
+++ b/src/mame/includes/centiped.h
@@ -57,14 +57,19 @@ public:
DECLARE_READ8_MEMBER(centiped_IN2_r);
DECLARE_READ8_MEMBER(milliped_IN1_r);
DECLARE_READ8_MEMBER(milliped_IN2_r);
- DECLARE_WRITE8_MEMBER(input_select_w);
- DECLARE_WRITE8_MEMBER(control_select_w);
+ DECLARE_WRITE_LINE_MEMBER(input_select_w);
+ DECLARE_WRITE_LINE_MEMBER(control_select_w);
DECLARE_READ8_MEMBER(mazeinv_input_r);
DECLARE_WRITE8_MEMBER(mazeinv_input_select_w);
DECLARE_READ8_MEMBER(bullsdrt_data_port_r);
- DECLARE_WRITE8_MEMBER(led_w);
- DECLARE_WRITE8_MEMBER(coin_count_w);
- DECLARE_WRITE8_MEMBER(bullsdrt_coin_count_w);
+ DECLARE_WRITE_LINE_MEMBER(led_1_w);
+ DECLARE_WRITE_LINE_MEMBER(led_2_w);
+ DECLARE_WRITE_LINE_MEMBER(led_3_w);
+ DECLARE_WRITE_LINE_MEMBER(led_4_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
+ DECLARE_WRITE_LINE_MEMBER(bullsdrt_coin_count_w);
DECLARE_READ8_MEMBER(caterplr_unknown_r);
DECLARE_WRITE8_MEMBER(caterplr_AY8910_w);
DECLARE_READ8_MEMBER(caterplr_AY8910_r);
@@ -74,7 +79,7 @@ public:
// video/centiped.c
DECLARE_WRITE8_MEMBER(centiped_videoram_w);
- DECLARE_WRITE8_MEMBER(centiped_flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
DECLARE_WRITE8_MEMBER(multiped_gfxbank_w);
DECLARE_WRITE8_MEMBER(bullsdrt_tilesbank_w);
DECLARE_WRITE8_MEMBER(bullsdrt_sprites_bank_w);
diff --git a/src/mame/includes/champbas.h b/src/mame/includes/champbas.h
index 014b56e293c..c7af3b0f800 100644
--- a/src/mame/includes/champbas.h
+++ b/src/mame/includes/champbas.h
@@ -47,9 +47,9 @@ public:
uint8_t m_palette_bank;
// handlers
- DECLARE_WRITE8_MEMBER(irq_enable_w);
- DECLARE_WRITE8_MEMBER(mcu_switch_w);
- DECLARE_WRITE8_MEMBER(mcu_start_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(mcu_switch_w);
+ DECLARE_WRITE_LINE_MEMBER(mcu_start_w);
DECLARE_READ8_MEMBER(champbja_protection_r);
DECLARE_CUSTOM_INPUT_MEMBER(watchdog_bit2);
@@ -58,9 +58,9 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(exctsccr_sound_irq);
DECLARE_WRITE8_MEMBER(tilemap_w);
- DECLARE_WRITE8_MEMBER(gfxbank_w);
- DECLARE_WRITE8_MEMBER(palette_bank_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(gfxbank_w);
+ DECLARE_WRITE_LINE_MEMBER(palette_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_DRIVER_INIT(exctsccr);
DECLARE_DRIVER_INIT(champbas);
diff --git a/src/mame/includes/changela.h b/src/mame/includes/changela.h
index 74928fe0e5a..0fa5ebc7f4c 100644
--- a/src/mame/includes/changela.h
+++ b/src/mame/includes/changela.h
@@ -62,10 +62,11 @@ public:
DECLARE_READ8_MEMBER(changela_31_r);
DECLARE_READ8_MEMBER(changela_2c_r);
DECLARE_READ8_MEMBER(changela_2d_r);
- DECLARE_WRITE8_MEMBER(mcu_pc_0_w);
- DECLARE_WRITE8_MEMBER(changela_collision_reset_0);
- DECLARE_WRITE8_MEMBER(changela_collision_reset_1);
- DECLARE_WRITE8_MEMBER(changela_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(mcu_pc_0_w);
+ DECLARE_WRITE_LINE_MEMBER(collision_reset_0_w);
+ DECLARE_WRITE_LINE_MEMBER(collision_reset_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(changela_colors_w);
DECLARE_WRITE8_MEMBER(changela_mem_device_select_w);
DECLARE_WRITE8_MEMBER(changela_mem_device_w);
diff --git a/src/mame/includes/cinemat.h b/src/mame/includes/cinemat.h
index b7d615a0c5a..750164f39d1 100644
--- a/src/mame/includes/cinemat.h
+++ b/src/mame/includes/cinemat.h
@@ -7,6 +7,7 @@
*************************************************************************/
#include "cpu/ccpu/ccpu.h"
+#include "machine/74259.h"
#include "sound/ay8910.h"
#include "sound/samples.h"
#include "video/vector.h"
@@ -19,6 +20,7 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_ay1(*this, "ay1")
+ , m_outlatch(*this, "outlatch")
, m_samples(*this, "samples")
, m_vector(*this, "vector")
, m_screen(*this, "screen")
@@ -29,6 +31,7 @@ public:
required_device<ccpu_cpu_device> m_maincpu;
optional_device<ay8910_device> m_ay1;
+ required_device<ls259_device> m_outlatch;
optional_device<samples_device> m_samples;
required_device<vector_device> m_vector;
required_device<screen_device> m_screen;
@@ -37,10 +40,6 @@ public:
optional_ioport m_analog_x;
optional_ioport m_analog_y;
- typedef void (cinemat_state::*sound_func)(uint8_t sound_val, uint8_t bits_changed);
-
- sound_func m_sound_handler;
- uint8_t m_sound_control;
uint32_t m_current_shift;
uint32_t m_last_shift;
uint32_t m_last_shift2;
@@ -66,41 +65,26 @@ public:
DECLARE_READ8_MEMBER(inputs_r);
DECLARE_READ8_MEMBER(switches_r);
DECLARE_READ8_MEMBER(coin_input_r);
- DECLARE_WRITE8_MEMBER(coin_reset_w);
- DECLARE_WRITE8_MEMBER(mux_select_w);
+ WRITE_LINE_MEMBER(coin_reset_w);
+ WRITE_LINE_MEMBER(mux_select_w);
DECLARE_READ8_MEMBER(speedfrk_wheel_r);
DECLARE_READ8_MEMBER(speedfrk_gear_r);
DECLARE_READ8_MEMBER(sundance_inputs_r);
DECLARE_READ8_MEMBER(boxingb_dial_r);
DECLARE_READ8_MEMBER(qb3_frame_r);
- DECLARE_WRITE8_MEMBER(qb3_ram_bank_w);
- DECLARE_WRITE8_MEMBER(cinemat_vector_control_w);
- DECLARE_WRITE8_MEMBER(cinemat_sound_control_w);
- DECLARE_WRITE8_MEMBER(qb3_sound_w);
+ DECLARE_WRITE_LINE_MEMBER(qb3_ram_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(vector_control_w);
DECLARE_READ8_MEMBER(joystick_read);
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
DECLARE_DRIVER_INIT(speedfrk);
DECLARE_DRIVER_INIT(boxingb);
- DECLARE_DRIVER_INIT(tailg);
DECLARE_DRIVER_INIT(sundance);
DECLARE_DRIVER_INIT(qb3);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void sound_start() override;
+ virtual void sound_reset() override;
virtual void video_start() override;
- DECLARE_SOUND_RESET(spacewar);
- DECLARE_SOUND_RESET(barrier);
- DECLARE_SOUND_RESET(speedfrk);
- DECLARE_SOUND_RESET(starhawk);
- DECLARE_SOUND_RESET(sundance);
- DECLARE_SOUND_RESET(tailg);
- DECLARE_SOUND_RESET(warrior);
- DECLARE_SOUND_RESET(armora);
- DECLARE_SOUND_RESET(ripoff);
- DECLARE_SOUND_RESET(starcas);
- DECLARE_SOUND_RESET(solarq);
- DECLARE_SOUND_RESET(boxingb);
- DECLARE_SOUND_RESET(wotw);
DECLARE_SOUND_RESET(demon);
DECLARE_SOUND_RESET(qb3);
DECLARE_VIDEO_START(cinemat_16level);
@@ -114,22 +98,66 @@ public:
DECLARE_WRITE8_MEMBER(sound_portb_w);
DECLARE_WRITE8_MEMBER(sound_output_w);
TIMER_CALLBACK_MEMBER(synced_sound_w);
- void generic_init(sound_func sound_handler);
void cinemat_vector_callback(int16_t sx, int16_t sy, int16_t ex, int16_t ey, uint8_t shift);
- void spacewar_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void barrier_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void speedfrk_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void starhawk_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void sundance_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void tailg_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void warrior_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void armora_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void ripoff_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void starcas_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void solarq_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void boxingb_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void wotw_sound_w(uint8_t sound_val, uint8_t bits_changed);
- void demon_sound_w(uint8_t sound_val, uint8_t bits_changed);
+ DECLARE_WRITE_LINE_MEMBER(spacewar_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(spacewar_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(spacewar_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(spacewar_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(spacewar_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(barrier_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(barrier_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(barrier_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(speedfrk_start_led_w);
+ DECLARE_WRITE_LINE_MEMBER(speedfrk_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(speedfrk_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(starhawk_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(starhawk_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(starhawk_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(starhawk_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(starhawk_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(starhawk_sound7_w);
+ DECLARE_WRITE_LINE_MEMBER(sundance_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(sundance_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(sundance_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(sundance_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(sundance_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(sundance_sound7_w);
+ DECLARE_WRITE_LINE_MEMBER(tailg_sound_w);
+ DECLARE_WRITE_LINE_MEMBER(warrior_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(warrior_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(warrior_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(warrior_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(warrior_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(armora_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(armora_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(armora_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(armora_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(armora_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(ripoff_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(ripoff_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(ripoff_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(ripoff_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(ripoff_sound7_w);
+ DECLARE_WRITE_LINE_MEMBER(starcas_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(starcas_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(starcas_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(starcas_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(starcas_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(solarq_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(solarq_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(solarq_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(boxingb_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(boxingb_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(boxingb_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(boxingb_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(boxingb_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(wotw_sound0_w);
+ DECLARE_WRITE_LINE_MEMBER(wotw_sound1_w);
+ DECLARE_WRITE_LINE_MEMBER(wotw_sound2_w);
+ DECLARE_WRITE_LINE_MEMBER(wotw_sound3_w);
+ DECLARE_WRITE_LINE_MEMBER(wotw_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(demon_sound4_w);
+ DECLARE_WRITE_LINE_MEMBER(qb3_sound4_w);
};
/*----------- defined in audio/cinemat.c -----------*/
diff --git a/src/mame/includes/cloak.h b/src/mame/includes/cloak.h
index f890300d75f..85e4d9e80a0 100644
--- a/src/mame/includes/cloak.h
+++ b/src/mame/includes/cloak.h
@@ -32,8 +32,10 @@ public:
uint8_t *m_current_bitmap_videoram_displayed;
std::unique_ptr<uint16_t[]> m_palette_ram;
tilemap_t *m_bg_tilemap;
- DECLARE_WRITE8_MEMBER(cloak_led_w);
- DECLARE_WRITE8_MEMBER(cloak_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(start_led_1_w);
+ DECLARE_WRITE_LINE_MEMBER(start_led_2_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_l_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_r_w);
DECLARE_WRITE8_MEMBER(cloak_custom_w);
DECLARE_WRITE8_MEMBER(cloak_irq_reset_0_w);
DECLARE_WRITE8_MEMBER(cloak_irq_reset_1_w);
@@ -43,7 +45,7 @@ public:
DECLARE_READ8_MEMBER(graph_processor_r);
DECLARE_WRITE8_MEMBER(graph_processor_w);
DECLARE_WRITE8_MEMBER(cloak_videoram_w);
- DECLARE_WRITE8_MEMBER(cloak_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(cocktail_w);
void set_current_bitmap_videoram_pointer();
void adjust_xy(int offset);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
diff --git a/src/mame/includes/cloud9.h b/src/mame/includes/cloud9.h
index a1a4c6f60c4..5e34100a4f4 100644
--- a/src/mame/includes/cloud9.h
+++ b/src/mame/includes/cloud9.h
@@ -7,6 +7,7 @@
*************************************************************************/
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "machine/x2212.h"
#include "screen.h"
@@ -21,7 +22,8 @@ public:
m_paletteram(*this, "paletteram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette"){ }
+ m_palette(*this, "palette"),
+ m_videolatch(*this, "videolatch") { }
/* devices */
required_device<m6502_device> m_maincpu;
@@ -34,6 +36,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_videolatch;
/* video-related */
const uint8_t *m_syncprom;
@@ -43,7 +46,6 @@ public:
double m_rweights[3];
double m_gweights[3];
double m_bweights[3];
- uint8_t m_video_control[8];
uint8_t m_bitmode_addr[2];
/* misc */
@@ -53,12 +55,13 @@ public:
uint8_t m_irq_state;
DECLARE_WRITE8_MEMBER(irq_ack_w);
- DECLARE_WRITE8_MEMBER(cloud9_led_w);
- DECLARE_WRITE8_MEMBER(cloud9_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
DECLARE_READ8_MEMBER(leta_r);
DECLARE_WRITE8_MEMBER(nvram_recall_w);
DECLARE_WRITE8_MEMBER(nvram_store_w);
- DECLARE_WRITE8_MEMBER(cloud9_video_control_w);
DECLARE_WRITE8_MEMBER(cloud9_paletteram_w);
DECLARE_WRITE8_MEMBER(cloud9_videoram_w);
DECLARE_READ8_MEMBER(cloud9_bitmode_r);
diff --git a/src/mame/includes/clshroad.h b/src/mame/includes/clshroad.h
index 0d721a178d4..e9bccb49791 100644
--- a/src/mame/includes/clshroad.h
+++ b/src/mame/includes/clshroad.h
@@ -32,10 +32,9 @@ public:
tilemap_t *m_tilemap_1;
DECLARE_READ8_MEMBER(input_r);
- DECLARE_WRITE8_MEMBER(subcpu_reset_w);
- DECLARE_WRITE8_MEMBER(main_irq_mask_w);
- DECLARE_WRITE8_MEMBER(sound_irq_mask_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(main_irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(vram_0_w);
DECLARE_WRITE8_MEMBER(vram_1_w);
diff --git a/src/mame/includes/copsnrob.h b/src/mame/includes/copsnrob.h
index 97e09fbd391..08e47b223a2 100644
--- a/src/mame/includes/copsnrob.h
+++ b/src/mame/includes/copsnrob.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/74259.h"
#include "sound/discrete.h"
#include "screen.h"
@@ -40,7 +41,7 @@ public:
uint8_t m_ic_h3_data;
DECLARE_READ8_MEMBER(copsnrob_misc_r);
DECLARE_WRITE8_MEMBER(copsnrob_misc2_w);
- DECLARE_WRITE8_MEMBER(copsnrob_misc_w);
+ DECLARE_WRITE_LINE_MEMBER(one_start_w);
virtual void machine_start() override;
virtual void machine_reset() override;
uint32_t screen_update_copsnrob(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -51,4 +52,4 @@ public:
};
/*----------- defined in audio/copsnrob.c -----------*/
-DISCRETE_SOUND_EXTERN( copsnrob );
+MACHINE_CONFIG_EXTERN(copsnrob_audio);
diff --git a/src/mame/includes/crgolf.h b/src/mame/includes/crgolf.h
index cce3ea2f904..0269f343bde 100644
--- a/src/mame/includes/crgolf.h
+++ b/src/mame/includes/crgolf.h
@@ -18,10 +18,6 @@ public:
m_videoram_a(*this, "vrama"),
m_videoram_b(*this, "vramb"),
- m_color_select(*this, "color_select"),
- m_screen_flip(*this, "screen_flip"),
- m_screenb_enable(*this, "screenb_enable"),
- m_screena_enable(*this, "screena_enable"),
m_vrambank(*this, "vrambank"),
m_maincpu(*this, "maincpu"),
@@ -36,10 +32,10 @@ public:
required_shared_ptr<uint8_t> m_videoram_a;
required_shared_ptr<uint8_t> m_videoram_b;
- required_shared_ptr<uint8_t> m_color_select;
- required_shared_ptr<uint8_t> m_screen_flip;
- required_shared_ptr<uint8_t> m_screenb_enable;
- required_shared_ptr<uint8_t> m_screena_enable;
+ bool m_color_select;
+ bool m_screen_flip;
+ bool m_screena_enable;
+ bool m_screenb_enable;
/* misc */
uint8_t m_port_select;
@@ -63,7 +59,11 @@ public:
DECLARE_READ8_MEMBER(main_to_sound_r);
DECLARE_WRITE8_MEMBER(sound_to_main_w);
DECLARE_READ8_MEMBER(sound_to_main_r);
- DECLARE_WRITE8_MEMBER(screen_select_w);
+ DECLARE_WRITE_LINE_MEMBER(color_select_w);
+ DECLARE_WRITE_LINE_MEMBER(screen_flip_w);
+ DECLARE_WRITE_LINE_MEMBER(screen_select_w);
+ DECLARE_WRITE_LINE_MEMBER(screena_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(screenb_enable_w);
DECLARE_WRITE8_MEMBER(crgolfhi_sample_w);
DECLARE_READ8_MEMBER(unk_sub_02_r);
DECLARE_READ8_MEMBER(unk_sub_05_r);
diff --git a/src/mame/includes/digdug.h b/src/mame/includes/digdug.h
index 333188e31ea..6328da68541 100644
--- a/src/mame/includes/digdug.h
+++ b/src/mame/includes/digdug.h
@@ -26,6 +26,8 @@ public:
DECLARE_PALETTE_INIT(digdug);
uint32_t screen_update_digdug(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE8_MEMBER( digdug_videoram_w );
- DECLARE_WRITE8_MEMBER( digdug_PORT_w );
+ DECLARE_WRITE8_MEMBER(digdug_videoram_w);
+ DECLARE_WRITE8_MEMBER(bg_select_w);
+ DECLARE_WRITE_LINE_MEMBER(tx_color_mode_w);
+ DECLARE_WRITE_LINE_MEMBER(bg_disable_w);
};
diff --git a/src/mame/includes/dragrace.h b/src/mame/includes/dragrace.h
index 9e6bdd89434..7f8b6323efd 100644
--- a/src/mame/includes/dragrace.h
+++ b/src/mame/includes/dragrace.h
@@ -37,7 +37,9 @@ public:
m_maincpu(*this, "maincpu"),
m_watchdog(*this, "watchdog"),
m_gfxdecode(*this, "gfxdecode"),
- m_screen(*this, "screen") { }
+ m_screen(*this, "screen")
+ {
+ }
/* memory pointers */
required_shared_ptr<uint8_t> m_playfield_ram;
@@ -47,7 +49,6 @@ public:
tilemap_t *m_bg_tilemap;
/* misc */
- unsigned m_misc_flags;
int m_gear[2];
/* devices */
@@ -57,8 +58,10 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
- DECLARE_WRITE8_MEMBER(dragrace_misc_w);
- DECLARE_WRITE8_MEMBER(dragrace_misc_clear_w);
+ DECLARE_WRITE8_MEMBER(speed1_w);
+ DECLARE_WRITE8_MEMBER(speed2_w);
+ DECLARE_WRITE_LINE_MEMBER(p1_start_w);
+ DECLARE_WRITE_LINE_MEMBER(p2_start_w);
DECLARE_READ8_MEMBER(dragrace_input_r);
DECLARE_READ8_MEMBER(dragrace_steering_r);
DECLARE_READ8_MEMBER(dragrace_scanline_r);
diff --git a/src/mame/includes/dynax.h b/src/mame/includes/dynax.h
index b3c2e13b5a4..8c728b2acd9 100644
--- a/src/mame/includes/dynax.h
+++ b/src/mame/includes/dynax.h
@@ -5,6 +5,8 @@
Dynax hardware
***************************************************************************/
+
+#include "machine/74259.h"
#include "machine/msm6242.h"
#include "sound/ym2413.h"
#include "sound/msm5205.h"
@@ -24,6 +26,7 @@ public:
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_rtc(*this, "rtc")
+ , m_mainlatch(*this, "mainlatch")
, m_gfx_region1(*this, "gfx1")
, m_gfx_region2(*this, "gfx2")
, m_gfx_region3(*this, "gfx3")
@@ -45,6 +48,7 @@ public:
optional_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<msm6242_device> m_rtc;
+ optional_device<ls259_device> m_mainlatch;
optional_region_ptr<uint8_t> m_gfx_region1;
optional_region_ptr<uint8_t> m_gfx_region2;
optional_region_ptr<uint8_t> m_gfx_region3;
@@ -136,13 +140,13 @@ public:
uint8_t *m_hnoridur_ptr;
DECLARE_WRITE8_MEMBER(dynax_vblank_ack_w);
- DECLARE_WRITE8_MEMBER(dynax_blitter_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(blitter_ack_w);
DECLARE_WRITE8_MEMBER(jantouki_vblank_ack_w);
- DECLARE_WRITE8_MEMBER(jantouki_blitter_ack_w);
- DECLARE_WRITE8_MEMBER(jantouki_blitter2_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(jantouki_blitter_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(jantouki_blitter2_ack_w);
DECLARE_WRITE8_MEMBER(jantouki_sound_vblank_ack_w);
- DECLARE_WRITE8_MEMBER(dynax_coincounter_0_w);
- DECLARE_WRITE8_MEMBER(dynax_coincounter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coincounter_0_w);
+ DECLARE_WRITE_LINE_MEMBER(coincounter_1_w);
DECLARE_READ8_MEMBER(ret_ff);
DECLARE_READ8_MEMBER(hanamai_keyboard_0_r);
DECLARE_READ8_MEMBER(hanamai_keyboard_1_r);
@@ -156,19 +160,16 @@ public:
DECLARE_WRITE8_MEMBER(yarunara_palette_w);
DECLARE_WRITE8_MEMBER(nanajign_palette_w);
DECLARE_WRITE8_MEMBER(adpcm_data_w);
- DECLARE_WRITE8_MEMBER(yarunara_layer_half_w);
- DECLARE_WRITE8_MEMBER(yarunara_layer_half2_w);
+ DECLARE_WRITE8_MEMBER(yarunara_mainlatch_w);
DECLARE_WRITE8_MEMBER(hjingi_bank_w);
- DECLARE_WRITE8_MEMBER(hjingi_lockout_w);
- DECLARE_WRITE8_MEMBER(hjingi_hopper_w);
+ DECLARE_WRITE_LINE_MEMBER(hjingi_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(hjingi_hopper_w);
uint8_t hjingi_hopper_bit();
DECLARE_READ8_MEMBER(hjingi_keyboard_0_r);
DECLARE_READ8_MEMBER(hjingi_keyboard_1_r);
DECLARE_WRITE8_MEMBER(yarunara_input_w);
DECLARE_READ8_MEMBER(yarunara_input_r);
DECLARE_WRITE8_MEMBER(yarunara_rombank_w);
- DECLARE_WRITE8_MEMBER(yarunara_flipscreen_w);
- DECLARE_WRITE8_MEMBER(yarunara_flipscreen_inv_w);
DECLARE_WRITE8_MEMBER(yarunara_blit_romregion_w);
DECLARE_READ8_MEMBER(jantouki_soundlatch_ack_r);
DECLARE_WRITE8_MEMBER(jantouki_soundlatch_w);
@@ -195,9 +196,10 @@ public:
DECLARE_READ8_MEMBER(tenkai_p8_r);
DECLARE_READ8_MEMBER(tenkai_8000_r);
DECLARE_WRITE8_MEMBER(tenkai_8000_w);
- DECLARE_WRITE8_MEMBER(tenkai_6c_w);
- DECLARE_WRITE8_MEMBER(tenkai_70_w);
+ DECLARE_WRITE_LINE_MEMBER(tenkai_6c_w);
+ DECLARE_WRITE_LINE_MEMBER(tenkai_70_w);
DECLARE_WRITE8_MEMBER(tenkai_blit_romregion_w);
+ DECLARE_WRITE8_MEMBER(tenkai_mainlatch_w);
DECLARE_READ8_MEMBER(gekisha_keyboard_0_r);
DECLARE_READ8_MEMBER(gekisha_keyboard_1_r);
DECLARE_WRITE8_MEMBER(gekisha_hopper_w);
@@ -221,15 +223,17 @@ public:
DECLARE_WRITE8_MEMBER(tenkai_blit_palette23_w);
DECLARE_WRITE8_MEMBER(mjembase_blit_palette23_w);
DECLARE_WRITE8_MEMBER(dynax_blit_palette67_w);
- DECLARE_WRITE8_MEMBER(dynax_blit_palbank_w);
- DECLARE_WRITE8_MEMBER(dynax_blit2_palbank_w);
- DECLARE_WRITE8_MEMBER(hanamai_layer_half_w);
- DECLARE_WRITE8_MEMBER(hnoridur_layer_half2_w);
- DECLARE_WRITE8_MEMBER(mjdialq2_blit_dest_w);
+ DECLARE_WRITE_LINE_MEMBER(blit_palbank_w);
+ DECLARE_WRITE_LINE_MEMBER(blit2_palbank_w);
+ DECLARE_WRITE_LINE_MEMBER(layer_half_w);
+ DECLARE_WRITE_LINE_MEMBER(layer_half2_w);
+ DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest0_w);
+ DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest1_w);
DECLARE_WRITE8_MEMBER(dynax_layer_enable_w);
DECLARE_WRITE8_MEMBER(jantouki_layer_enable_w);
- DECLARE_WRITE8_MEMBER(mjdialq2_layer_enable_w);
- DECLARE_WRITE8_MEMBER(dynax_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer0_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer1_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(dynax_blit_romregion_w);
DECLARE_WRITE8_MEMBER(dynax_blit2_romregion_w);
DECLARE_WRITE8_MEMBER(dynax_blit_scroll_w);
@@ -247,7 +251,6 @@ public:
DECLARE_DRIVER_INIT(mjelct3);
DECLARE_DRIVER_INIT(blktouch);
DECLARE_DRIVER_INIT(mjelct3a);
- DECLARE_DRIVER_INIT(mjreach);
DECLARE_DRIVER_INIT(maya_common);
DECLARE_DRIVER_INIT(mayac);
DECLARE_DRIVER_INIT(maya);
@@ -280,6 +283,7 @@ public:
DECLARE_MACHINE_RESET(adpcm);
DECLARE_WRITE8_MEMBER(adpcm_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(adpcm_reset_kludge_w);
DECLARE_MACHINE_START(gekisha);
DECLARE_MACHINE_RESET(gekisha);
DECLARE_MACHINE_START(tenkai);
diff --git a/src/mame/includes/equites.h b/src/mame/includes/equites.h
index 28e088e00fc..7daa6afeda4 100644
--- a/src/mame/includes/equites.h
+++ b/src/mame/includes/equites.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/74259.h"
#include "machine/alpha8201.h"
#include "machine/gen_latch.h"
#include "sound/samples.h"
@@ -34,7 +35,8 @@ public:
m_msm(*this, "msm"),
m_dac_1(*this, "dac1"),
m_dac_2(*this, "dac2"),
- m_soundlatch(*this, "soundlatch")
+ m_soundlatch(*this, "soundlatch"),
+ m_mainlatch(*this, "mainlatch")
{ }
/* memory pointers */
@@ -80,6 +82,7 @@ public:
required_device<dac_byte_interface> m_dac_1;
required_device<dac_byte_interface> m_dac_2;
required_device<generic_latch_8_device> m_soundlatch;
+ required_device<ls259_device> m_mainlatch;
DECLARE_WRITE8_MEMBER(equites_c0f8_w);
DECLARE_WRITE8_MEMBER(equites_cymbal_ctrl_w);
@@ -89,18 +92,18 @@ public:
DECLARE_WRITE8_MEMBER(equites_8155_portc_w);
DECLARE_WRITE16_MEMBER(gekisou_unknown_bit_w);
DECLARE_READ16_MEMBER(equites_spriteram_kludge_r);
+ DECLARE_WRITE8_MEMBER(mainlatch_w);
DECLARE_READ8_MEMBER(mcu_ram_r);
DECLARE_WRITE8_MEMBER(mcu_ram_w);
- DECLARE_WRITE16_MEMBER(mcu_start_w);
- DECLARE_WRITE16_MEMBER(mcu_switch_w);
+ DECLARE_WRITE_LINE_MEMBER(mcu_start_w);
+ DECLARE_WRITE_LINE_MEMBER(mcu_switch_w);
DECLARE_READ8_MEMBER(equites_fg_videoram_r);
DECLARE_WRITE8_MEMBER(equites_fg_videoram_w);
DECLARE_WRITE16_MEMBER(equites_bg_videoram_w);
DECLARE_WRITE8_MEMBER(equites_bgcolor_w);
DECLARE_WRITE16_MEMBER(equites_scrollreg_w);
- DECLARE_WRITE16_MEMBER(splndrbt_selchar_w);
- DECLARE_WRITE16_MEMBER(equites_flipw_w);
- DECLARE_WRITE8_MEMBER(equites_flipb_w);
+ DECLARE_WRITE_LINE_MEMBER(splndrbt_selchar_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
DECLARE_WRITE16_MEMBER(splndrbt_bg_scrollx_w);
DECLARE_WRITE16_MEMBER(splndrbt_bg_scrolly_w);
DECLARE_CUSTOM_INPUT_MEMBER(gekisou_unknown_bit_r);
diff --git a/src/mame/includes/fastfred.h b/src/mame/includes/fastfred.h
index a89a1a6b2ea..caea0089c12 100644
--- a/src/mame/includes/fastfred.h
+++ b/src/mame/includes/fastfred.h
@@ -49,22 +49,22 @@ public:
DECLARE_READ8_MEMBER(flyboy_custom2_io_r);
DECLARE_READ8_MEMBER(jumpcoas_custom_io_r);
DECLARE_READ8_MEMBER(boggy84_custom_io_r);
- DECLARE_WRITE8_MEMBER(imago_dma_irq_w);
+ DECLARE_WRITE_LINE_MEMBER(imago_dma_irq_w);
DECLARE_WRITE8_MEMBER(imago_sprites_bank_w);
DECLARE_WRITE8_MEMBER(imago_sprites_dma_w);
DECLARE_READ8_MEMBER(imago_sprites_offset_r);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(sound_nmi_mask_w);
DECLARE_WRITE8_MEMBER(fastfred_videoram_w);
DECLARE_WRITE8_MEMBER(fastfred_attributes_w);
- DECLARE_WRITE8_MEMBER(fastfred_charbank1_w);
- DECLARE_WRITE8_MEMBER(fastfred_charbank2_w);
- DECLARE_WRITE8_MEMBER(fastfred_colorbank1_w);
- DECLARE_WRITE8_MEMBER(fastfred_colorbank2_w);
- DECLARE_WRITE8_MEMBER(fastfred_flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(fastfred_flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(charbank1_w);
+ DECLARE_WRITE_LINE_MEMBER(charbank2_w);
+ DECLARE_WRITE_LINE_MEMBER(colorbank1_w);
+ DECLARE_WRITE_LINE_MEMBER(colorbank2_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_WRITE8_MEMBER(imago_fg_videoram_w);
- DECLARE_WRITE8_MEMBER(imago_charbank_w);
+ DECLARE_WRITE_LINE_MEMBER(imago_charbank_w);
DECLARE_DRIVER_INIT(fastfred);
DECLARE_DRIVER_INIT(flyboy);
diff --git a/src/mame/includes/freekick.h b/src/mame/includes/freekick.h
index f9dcec5cc70..418e16d5afd 100644
--- a/src/mame/includes/freekick.h
+++ b/src/mame/includes/freekick.h
@@ -30,13 +30,16 @@ public:
int m_spinner;
int m_nmi_en;
int m_ff_data;
- DECLARE_WRITE8_MEMBER(flipscreen_xy_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
- DECLARE_WRITE8_MEMBER(coin_w);
- DECLARE_WRITE8_MEMBER(spinner_select_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_w);
+ DECLARE_WRITE_LINE_MEMBER(spinner_select_w);
+ DECLARE_WRITE8_MEMBER(gigas_spinner_select_w);
DECLARE_READ8_MEMBER(spinner_r);
DECLARE_WRITE8_MEMBER(pbillrd_bankswitch_w);
- DECLARE_WRITE8_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
DECLARE_WRITE8_MEMBER(oigas_5_w);
DECLARE_READ8_MEMBER(oigas_3_r);
DECLARE_READ8_MEMBER(oigas_2_r);
diff --git a/src/mame/includes/funkybee.h b/src/mame/includes/funkybee.h
index 169fc2a69fe..c3d3388d47b 100644
--- a/src/mame/includes/funkybee.h
+++ b/src/mame/includes/funkybee.h
@@ -24,16 +24,16 @@ public:
tilemap_t *m_bg_tilemap;
int m_gfx_bank;
DECLARE_READ8_MEMBER(funkybee_input_port_0_r);
- DECLARE_WRITE8_MEMBER(funkybee_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(funkybee_videoram_w);
DECLARE_WRITE8_MEMBER(funkybee_colorram_w);
- DECLARE_WRITE8_MEMBER(funkybee_gfx_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(gfx_bank_w);
DECLARE_WRITE8_MEMBER(funkybee_scroll_w);
- DECLARE_WRITE8_MEMBER(funkybee_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILEMAP_MAPPER_MEMBER(funkybee_tilemap_scan);
virtual void machine_start() override;
- virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(funkybee);
uint32_t screen_update_funkybee(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/gaelco.h b/src/mame/includes/gaelco.h
index a87e6a7a33a..91509b861a3 100644
--- a/src/mame/includes/gaelco.h
+++ b/src/mame/includes/gaelco.h
@@ -6,6 +6,7 @@
***************************************************************************/
+#include "machine/74259.h"
#include "machine/gen_latch.h"
class gaelco_state : public driver_device
@@ -18,6 +19,7 @@ public:
m_palette(*this, "palette"),
m_audiocpu(*this, "audiocpu"),
m_soundlatch(*this, "soundlatch"),
+ m_outlatch(*this, "outlatch"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
m_spriteram(*this, "spriteram"),
@@ -29,6 +31,7 @@ public:
required_device<palette_device> m_palette;
optional_device<cpu_device> m_audiocpu;
optional_device<generic_latch_8_device> m_soundlatch;
+ optional_device<ls259_device> m_outlatch;
/* memory pointers */
required_shared_ptr<uint16_t> m_videoram;
@@ -40,7 +43,11 @@ public:
tilemap_t *m_tilemap[2];
DECLARE_WRITE8_MEMBER(bigkarnk_sound_command_w);
- DECLARE_WRITE8_MEMBER(bigkarnk_coin_w);
+ DECLARE_WRITE8_MEMBER(output_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
DECLARE_WRITE8_MEMBER(OKIM6295_bankswitch_w);
DECLARE_WRITE16_MEMBER(gaelco_vram_encrypted_w);
DECLARE_WRITE16_MEMBER(gaelco_encrypted_w);
diff --git a/src/mame/includes/gaelco2.h b/src/mame/includes/gaelco2.h
index d132b267585..3966f0c0cdf 100644
--- a/src/mame/includes/gaelco2.h
+++ b/src/mame/includes/gaelco2.h
@@ -2,6 +2,7 @@
// copyright-holders:Manuel Abadia
#include "cpu/m68000/m68000.h"
#include "video/bufsprite.h"
+#include "machine/74259.h"
#include "machine/eepromser.h"
class gaelco2_state : public driver_device
@@ -14,6 +15,7 @@ public:
m_vregs(*this, "vregs"),
m_snowboar_protection(*this, "snowboar_prot"),
m_eeprom(*this, "eeprom"),
+ m_mainlatch(*this, "mainlatch"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_generic_paletteram_16(*this, "paletteram"),
@@ -22,9 +24,12 @@ public:
DECLARE_WRITE8_MEMBER(shareram_w);
DECLARE_READ8_MEMBER(shareram_r);
- DECLARE_WRITE16_MEMBER(gaelco2_coin_w);
- DECLARE_WRITE16_MEMBER(gaelco2_coin2_w);
- DECLARE_WRITE16_MEMBER(touchgo_coin_w);
+ DECLARE_WRITE16_MEMBER(wrally2_latch_w);
+ DECLARE_WRITE16_MEMBER(alighunt_coin_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin3_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin4_counter_w);
DECLARE_READ16_MEMBER(snowboar_protection_r);
DECLARE_WRITE16_MEMBER(snowboar_protection_w);
DECLARE_WRITE16_MEMBER(gaelco2_vram_w);
@@ -41,9 +46,6 @@ public:
uint32_t screen_update_gaelco2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_gaelco2_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_gaelco2_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE16_MEMBER(gaelco2_eeprom_cs_w);
- DECLARE_WRITE16_MEMBER(gaelco2_eeprom_sk_w);
- DECLARE_WRITE16_MEMBER(gaelco2_eeprom_data_w);
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int mask, int xoffs);
uint32_t dual_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int index);
void gaelco2_ROM16_split_gfx(const char *src_reg, const char *dst_reg, int start, int length, int dest1, int dest2);
@@ -62,6 +64,7 @@ private:
required_shared_ptr<uint16_t> m_vregs;
optional_shared_ptr<uint16_t> m_snowboar_protection;
optional_device<eeprom_serial_93cxx_device> m_eeprom;
+ optional_device<ls259_device> m_mainlatch;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<uint16_t> m_generic_paletteram_16;
@@ -111,8 +114,7 @@ public:
uint8_t m_analog_ports[2];
- DECLARE_WRITE16_MEMBER(wrally2_coin_w);
- DECLARE_WRITE16_MEMBER(wrally2_adc_clk);
- DECLARE_WRITE16_MEMBER(wrally2_adc_cs);
+ DECLARE_WRITE_LINE_MEMBER(wrally2_adc_clk);
+ DECLARE_WRITE_LINE_MEMBER(wrally2_adc_cs);
DECLARE_CUSTOM_INPUT_MEMBER(wrally2_analog_bit_r);
};
diff --git a/src/mame/includes/gaelco3d.h b/src/mame/includes/gaelco3d.h
index 48ed08c6025..8af455fbf53 100644
--- a/src/mame/includes/gaelco3d.h
+++ b/src/mame/includes/gaelco3d.h
@@ -10,6 +10,7 @@
#include "sound/dmadac.h"
#include "video/poly.h"
+#include "machine/74259.h"
#include "machine/eepromser.h"
#include "machine/gaelco3d.h"
#include "cpu/adsp2100/adsp2100.h"
@@ -69,6 +70,8 @@ public:
m_tms(*this, "tms"),
m_serial(*this, "serial"),
m_screen(*this, "screen"),
+ m_mainlatch(*this, "mainlatch"),
+ m_outlatch(*this, "outlatch"),
m_paletteram16(*this, "paletteram"),
m_paletteram32(*this, "paletteram"),
m_analog(*this, {"ANALOG0", "ANALOG1", "ANALOG2", "ANALOG3"})
@@ -85,6 +88,8 @@ public:
required_device<cpu_device> m_tms;
required_device<gaelco_serial_device> m_serial;
required_device<screen_device> m_screen;
+ required_device<ls259_device> m_mainlatch;
+ required_device<ls259_device> m_outlatch;
optional_shared_ptr<uint16_t> m_paletteram16;
optional_shared_ptr<uint32_t> m_paletteram32;
optional_ioport_array<4> m_analog;
@@ -107,35 +112,34 @@ public:
int m_video_changed;
std::unique_ptr<gaelco3d_renderer> m_poly;
DECLARE_WRITE16_MEMBER(irq_ack_w);
- DECLARE_WRITE32_MEMBER(irq_ack32_w);
DECLARE_WRITE16_MEMBER(sound_data_w);
DECLARE_READ16_MEMBER(sound_data_r);
DECLARE_READ16_MEMBER(sound_status_r);
DECLARE_WRITE16_MEMBER(sound_status_w);
- DECLARE_WRITE16_MEMBER(analog_port_clock_w);
- DECLARE_WRITE16_MEMBER(analog_port_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(analog_port_clock_w);
+ DECLARE_WRITE_LINE_MEMBER(analog_port_latch_w);
DECLARE_READ32_MEMBER(tms_m68k_ram_r);
DECLARE_WRITE32_MEMBER(tms_m68k_ram_w);
DECLARE_WRITE8_MEMBER(tms_iack_w);
- DECLARE_WRITE16_MEMBER(tms_reset_w);
- DECLARE_WRITE16_MEMBER(tms_irq_w);
- DECLARE_WRITE16_MEMBER(tms_control3_w);
+ DECLARE_WRITE_LINE_MEMBER(tms_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(tms_irq_w);
+ DECLARE_WRITE_LINE_MEMBER(tms_control3_w);
DECLARE_WRITE16_MEMBER(tms_comm_w);
DECLARE_WRITE16_MEMBER(adsp_control_w);
DECLARE_WRITE16_MEMBER(adsp_rombank_w);
- DECLARE_WRITE32_MEMBER(radikalb_lamp_w);
- DECLARE_WRITE32_MEMBER(unknown_137_w);
- DECLARE_WRITE32_MEMBER(unknown_13a_w);
+ DECLARE_WRITE_LINE_MEMBER(radikalb_lamp_w);
+ DECLARE_WRITE_LINE_MEMBER(unknown_137_w);
+ DECLARE_WRITE_LINE_MEMBER(unknown_13a_w);
DECLARE_WRITE32_MEMBER(gaelco3d_render_w);
DECLARE_WRITE16_MEMBER(gaelco3d_paletteram_w);
DECLARE_WRITE32_MEMBER(gaelco3d_paletteram_020_w);
DECLARE_CUSTOM_INPUT_MEMBER(analog_bit_r);
DECLARE_WRITE_LINE_MEMBER(ser_irq);
DECLARE_READ16_MEMBER(eeprom_data_r);
- DECLARE_READ32_MEMBER(eeprom_data32_r);
- DECLARE_WRITE16_MEMBER(eeprom_data_w);
- DECLARE_WRITE16_MEMBER(eeprom_clock_w);
- DECLARE_WRITE16_MEMBER(eeprom_cs_w);
+ DECLARE_WRITE8_MEMBER(mainlatch_68000_w);
+ DECLARE_WRITE8_MEMBER(outlatch_68000_w);
+ DECLARE_WRITE8_MEMBER(mainlatch_68020_w);
+ DECLARE_WRITE8_MEMBER(outlatch_68020_w);
DECLARE_DRIVER_INIT(gaelco3d);
virtual void machine_start() override;
virtual void machine_reset() override;
diff --git a/src/mame/includes/galaga.h b/src/mame/includes/galaga.h
index d38ba4f5263..08ab5165c43 100644
--- a/src/mame/includes/galaga.h
+++ b/src/mame/includes/galaga.h
@@ -5,6 +5,7 @@
#pragma once
+#include "machine/74259.h"
#include "sound/discrete.h"
#include "sound/namco.h"
#include "sound/samples.h"
@@ -19,7 +20,7 @@ public:
m_galaga_ram1(*this, "galaga_ram1"),
m_galaga_ram2(*this, "galaga_ram2"),
m_galaga_ram3(*this, "galaga_ram3"),
- m_galaga_starcontrol(*this, "starcontrol"),
+ m_videolatch(*this, "videolatch"),
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "sub"),
m_subcpu2(*this, "sub2"),
@@ -33,7 +34,7 @@ public:
optional_shared_ptr<uint8_t> m_galaga_ram1;
optional_shared_ptr<uint8_t> m_galaga_ram2;
optional_shared_ptr<uint8_t> m_galaga_ram3;
- optional_shared_ptr<uint8_t> m_galaga_starcontrol; // 6 addresses
+ optional_device<ls259_device> m_videolatch; // not present on Xevious
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
required_device<cpu_device> m_subcpu2;
@@ -42,7 +43,6 @@ public:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
emu_timer *m_cpu3_interrupt_timer;
- uint8_t m_custom_mod;
/* machine state */
uint32_t m_stars_scrollx;
@@ -62,15 +62,16 @@ public:
uint8_t m_sub_irq_mask;
uint8_t m_sub2_nmi_mask;
DECLARE_READ8_MEMBER(bosco_dsw_r);
- DECLARE_WRITE8_MEMBER(galaga_flip_screen_w);
- DECLARE_WRITE8_MEMBER(bosco_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(irq1_clear_w);
+ DECLARE_WRITE_LINE_MEMBER(irq2_clear_w);
+ DECLARE_WRITE_LINE_MEMBER(nmion_w);
DECLARE_WRITE8_MEMBER(galaga_videoram_w);
- DECLARE_WRITE8_MEMBER(gatsbee_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(gatsbee_bank_w);
DECLARE_WRITE8_MEMBER(out_0);
DECLARE_WRITE8_MEMBER(out_1);
DECLARE_READ8_MEMBER(namco_52xx_rom_r);
DECLARE_READ8_MEMBER(namco_52xx_si_r);
- DECLARE_READ8_MEMBER(custom_mod_r);
DECLARE_DRIVER_INIT(galaga);
DECLARE_DRIVER_INIT(gatsbee);
TILEMAP_MAPPER_MEMBER(tilemap_scan);
@@ -86,7 +87,6 @@ public:
TIMER_CALLBACK_MEMBER(cpu3_interrupt_callback);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
void draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect );
- void bosco_latch_reset();
struct star
{
uint16_t x,y;
diff --git a/src/mame/includes/gauntlet.h b/src/mame/includes/gauntlet.h
index c09432c4fdd..1ac87752b93 100644
--- a/src/mame/includes/gauntlet.h
+++ b/src/mame/includes/gauntlet.h
@@ -7,6 +7,7 @@
*************************************************************************/
#include "machine/atarigen.h"
+#include "machine/74259.h"
#include "video/atarimo.h"
#include "sound/ym2151.h"
#include "sound/pokey.h"
@@ -22,6 +23,7 @@ public:
m_ym2151(*this, "ymsnd"),
m_pokey(*this, "pokey"),
m_tms5220(*this, "tms"),
+ m_soundctl(*this, "soundctl"),
m_playfield_tilemap(*this, "playfield"),
m_alpha_tilemap(*this, "alpha"),
m_mob(*this, "mob") { }
@@ -31,6 +33,7 @@ public:
required_device<ym2151_device> m_ym2151;
required_device<pokey_device> m_pokey;
required_device<tms5220_device> m_tms5220;
+ required_device<ls259_device> m_soundctl;
required_device<tilemap_device> m_playfield_tilemap;
required_device<tilemap_device> m_alpha_tilemap;
@@ -44,7 +47,10 @@ public:
virtual void scanline_update(screen_device &screen, int scanline) override;
DECLARE_WRITE16_MEMBER(sound_reset_w);
DECLARE_READ8_MEMBER(switch_6502_r);
- DECLARE_WRITE8_MEMBER(sound_ctl_w);
+ DECLARE_WRITE_LINE_MEMBER(ym2151_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(speech_squeak_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
DECLARE_WRITE8_MEMBER(mixer_w);
void swap_memory(void *ptr1, void *ptr2, int bytes);
void common_init(int vindctr2);
diff --git a/src/mame/includes/gladiatr.h b/src/mame/includes/gladiatr.h
index 5dd2eb2ee40..7313527c675 100644
--- a/src/mame/includes/gladiatr.h
+++ b/src/mame/includes/gladiatr.h
@@ -12,6 +12,7 @@ public:
DECLARE_WRITE8_MEMBER(colorram_w);
DECLARE_WRITE8_MEMBER(textram_w);
DECLARE_WRITE8_MEMBER(paletteram_w);
+ DECLARE_WRITE_LINE_MEMBER(spritebuffer_w);
DECLARE_WRITE8_MEMBER(spritebuffer_w);
protected:
@@ -100,13 +101,12 @@ public:
{
}
- DECLARE_WRITE8_MEMBER(gladiatr_spritebank_w);
+ DECLARE_WRITE_LINE_MEMBER(spritebank_w);
DECLARE_WRITE8_MEMBER(gladiatr_video_registers_w);
- DECLARE_WRITE8_MEMBER(gladiatr_bankswitch_w);
DECLARE_WRITE8_MEMBER(gladiator_cpu_sound_command_w);
DECLARE_READ8_MEMBER(gladiator_cpu_sound_command_r);
- DECLARE_WRITE8_MEMBER(gladiatr_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(gladiatr_irq_patch_w);
DECLARE_WRITE8_MEMBER(gladiator_int_control_w);
DECLARE_WRITE8_MEMBER(gladiator_adpcm_w);
diff --git a/src/mame/includes/glass.h b/src/mame/includes/glass.h
index 0f4159027c6..7167e0ff21d 100644
--- a/src/mame/includes/glass.h
+++ b/src/mame/includes/glass.h
@@ -6,6 +6,8 @@
*************************************************************************/
+#include "machine/74259.h"
+
class glass_state : public driver_device
{
public:
@@ -14,6 +16,7 @@ public:
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_outlatch(*this, "outlatch"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
m_spriteram(*this, "spriteram"),
@@ -26,6 +29,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_outlatch;
/* memory pointers */
required_shared_ptr<uint16_t> m_videoram;
@@ -51,6 +55,11 @@ public:
DECLARE_WRITE16_MEMBER(blitter_w);
DECLARE_WRITE16_MEMBER(vram_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
+
DECLARE_DRIVER_INIT(glass);
virtual void machine_start() override;
virtual void machine_reset() override;
diff --git a/src/mame/includes/gng.h b/src/mame/includes/gng.h
index 8c76329ceac..98a6fd42498 100644
--- a/src/mame/includes/gng.h
+++ b/src/mame/includes/gng.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "sound/2203intf.h"
#include "video/bufsprite.h"
class gng_state : public driver_device
@@ -17,6 +18,7 @@ public:
m_fgvideoram(*this, "fgvideoram"),
m_bgvideoram(*this, "bgvideoram"),
m_maincpu(*this, "maincpu"),
+ m_ym(*this, "ym%u", 1),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { }
@@ -32,13 +34,15 @@ public:
uint8_t m_scrolly[2];
DECLARE_WRITE8_MEMBER(gng_bankswitch_w);
- DECLARE_WRITE8_MEMBER(gng_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE_LINE_MEMBER(ym_reset_w);
DECLARE_READ8_MEMBER(diamond_hack_r);
DECLARE_WRITE8_MEMBER(gng_fgvideoram_w);
DECLARE_WRITE8_MEMBER(gng_bgvideoram_w);
DECLARE_WRITE8_MEMBER(gng_bgscrollx_w);
DECLARE_WRITE8_MEMBER(gng_bgscrolly_w);
- DECLARE_WRITE8_MEMBER(gng_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_DRIVER_INIT(diamond);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
@@ -48,6 +52,7 @@ public:
uint32_t screen_update_gng(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
required_device<cpu_device> m_maincpu;
+ required_device_array<ym2203_device, 2> m_ym;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
};
diff --git a/src/mame/includes/gomoku.h b/src/mame/includes/gomoku.h
index e443d80d1a7..a99c8426ea3 100644
--- a/src/mame/includes/gomoku.h
+++ b/src/mame/includes/gomoku.h
@@ -3,6 +3,7 @@
#ifndef MAME_INCLUDES_GOMOKU_H
#define MAME_INCLUDES_GOMOKU_H
+#include "machine/74259.h"
#include "screen.h"
class gomoku_state : public driver_device
@@ -15,6 +16,7 @@ public:
m_bgram(*this, "bgram"),
m_inputs(*this, {"IN0", "IN1", "DSW", "UNUSED0", "UNUSED1", "UNUSED2", "UNUSED3", "UNUSED4"}),
m_maincpu(*this, "maincpu"),
+ m_latch(*this, "latch"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen") { }
@@ -27,16 +29,18 @@ public:
bitmap_ind16 m_bg_bitmap;
optional_ioport_array<8> m_inputs;
DECLARE_READ8_MEMBER(input_port_r);
+ DECLARE_WRITE8_MEMBER(gomoku_latch_w);
DECLARE_WRITE8_MEMBER(gomoku_videoram_w);
DECLARE_WRITE8_MEMBER(gomoku_colorram_w);
DECLARE_WRITE8_MEMBER(gomoku_bgram_w);
- DECLARE_WRITE8_MEMBER(gomoku_flipscreen_w);
- DECLARE_WRITE8_MEMBER(gomoku_bg_dispsw_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(bg_dispsw_w);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
virtual void video_start() override;
DECLARE_PALETTE_INIT(gomoku);
uint32_t screen_update_gomoku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
+ required_device<ls259_device> m_latch;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
};
diff --git a/src/mame/includes/gridlee.h b/src/mame/includes/gridlee.h
index 45fa8aa3c05..84bbfbd99f1 100644
--- a/src/mame/includes/gridlee.h
+++ b/src/mame/includes/gridlee.h
@@ -8,6 +8,7 @@
***************************************************************************/
+#include "machine/74259.h"
#include "sound/samples.h"
#include "screen.h"
@@ -32,13 +33,15 @@ public:
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_latch(*this, "latch") { }
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_videoram;
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_latch;
uint8_t m_last_analog_input[2];
uint8_t m_last_analog_output[2];
@@ -54,10 +57,11 @@ public:
DECLARE_READ8_MEMBER(analog_port_r);
DECLARE_READ8_MEMBER(random_num_r);
- DECLARE_WRITE8_MEMBER(led_0_w);
- DECLARE_WRITE8_MEMBER(led_1_w);
- DECLARE_WRITE8_MEMBER(gridlee_coin_counter_w);
- DECLARE_WRITE8_MEMBER(gridlee_cocktail_flip_w);
+ DECLARE_WRITE8_MEMBER(latch_w);
+ DECLARE_WRITE_LINE_MEMBER(led_0_w);
+ DECLARE_WRITE_LINE_MEMBER(led_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(cocktail_flip_w);
DECLARE_WRITE8_MEMBER(gridlee_videoram_w);
DECLARE_WRITE8_MEMBER(gridlee_palette_select_w);
virtual void machine_start() override;
diff --git a/src/mame/includes/gyruss.h b/src/mame/includes/gyruss.h
index acea4589292..82181c76e5e 100644
--- a/src/mame/includes/gyruss.h
+++ b/src/mame/includes/gyruss.h
@@ -21,7 +21,6 @@ public:
m_discrete(*this, "discrete"),
m_colorram(*this, "colorram"),
m_videoram(*this, "videoram"),
- m_flipscreen(*this, "flipscreen"),
m_spriteram(*this, "spriteram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
@@ -36,7 +35,6 @@ public:
required_device<discrete_device> m_discrete;
required_shared_ptr<uint8_t> m_colorram;
required_shared_ptr<uint8_t> m_videoram;
- required_shared_ptr<uint8_t> m_flipscreen;
required_shared_ptr<uint8_t> m_spriteram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
@@ -45,14 +43,18 @@ public:
tilemap_t *m_tilemap;
uint8_t m_master_nmi_mask;
uint8_t m_slave_irq_mask;
+ bool m_flipscreen;
DECLARE_WRITE8_MEMBER(gyruss_irq_clear_w);
DECLARE_WRITE8_MEMBER(gyruss_sh_irqtrigger_w);
DECLARE_WRITE8_MEMBER(gyruss_i8039_irq_w);
- DECLARE_WRITE8_MEMBER(master_nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(master_nmi_mask_w);
DECLARE_WRITE8_MEMBER(slave_irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(gyruss_spriteram_w);
DECLARE_READ8_MEMBER(gyruss_scanline_r);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_READ8_MEMBER(gyruss_portA_r);
DECLARE_WRITE8_MEMBER(gyruss_dac_w);
DECLARE_WRITE8_MEMBER(gyruss_filter0_w);
diff --git a/src/mame/includes/hnayayoi.h b/src/mame/includes/hnayayoi.h
index 4fd0b470379..ab2be332925 100644
--- a/src/mame/includes/hnayayoi.h
+++ b/src/mame/includes/hnayayoi.h
@@ -25,6 +25,8 @@ public:
/* misc */
int m_keyb;
+ bool m_nmi_enable;
+
DECLARE_READ8_MEMBER(keyboard_0_r);
DECLARE_READ8_MEMBER(keyboard_1_r);
DECLARE_WRITE8_MEMBER(keyboard_w);
@@ -33,9 +35,9 @@ public:
DECLARE_WRITE8_MEMBER(dynax_blitter_rev1_clear_w);
DECLARE_WRITE8_MEMBER(hnayayoi_palbank_w);
DECLARE_WRITE8_MEMBER(adpcm_data_w);
- DECLARE_WRITE8_MEMBER(adpcm_vclk_w);
- DECLARE_WRITE8_MEMBER(adpcm_reset_w);
- DECLARE_WRITE8_MEMBER(adpcm_reset_inv_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_clock_w);
DECLARE_DRIVER_INIT(hnfubuki);
virtual void machine_start() override;
virtual void machine_reset() override;
diff --git a/src/mame/includes/holeland.h b/src/mame/includes/holeland.h
index a85a89bbb14..6eb76c73588 100644
--- a/src/mame/includes/holeland.h
+++ b/src/mame/includes/holeland.h
@@ -6,6 +6,8 @@
*************************************************************************/
+#include "machine/74259.h"
+
class holeland_state : public driver_device
{
public:
@@ -14,6 +16,7 @@ public:
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_latch(*this, "latch"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_spriteram(*this, "spriteram") { }
@@ -23,6 +26,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_latch;
/* memory pointers */
required_shared_ptr<uint8_t> m_videoram;
@@ -32,13 +36,15 @@ public:
/* video-related */
tilemap_t *m_bg_tilemap;
int m_palette_offset;
- int m_po[2];
+
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
DECLARE_WRITE8_MEMBER(pal_offs_w);
DECLARE_WRITE8_MEMBER(scroll_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w);
TILE_GET_INFO_MEMBER(holeland_get_tile_info);
TILE_GET_INFO_MEMBER(crzrally_get_tile_info);
diff --git a/src/mame/includes/jedi.h b/src/mame/includes/jedi.h
index d4619c83778..40d50931207 100644
--- a/src/mame/includes/jedi.h
+++ b/src/mame/includes/jedi.h
@@ -24,8 +24,6 @@ public:
jedi_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_nvram(*this, "nvram") ,
- m_foreground_bank(*this, "foreground_bank"),
- m_video_off(*this, "video_off"),
m_backgroundram(*this, "backgroundram"),
m_paletteram(*this, "paletteram"),
m_foregroundram(*this, "foregroundram"),
@@ -46,8 +44,6 @@ public:
emu_timer *m_interrupt_timer;
/* video state */
- required_shared_ptr<uint8_t> m_foreground_bank;
- required_shared_ptr<uint8_t> m_video_off;
required_shared_ptr<uint8_t> m_backgroundram;
required_shared_ptr<uint8_t> m_paletteram;
required_shared_ptr<uint8_t> m_foregroundram;
@@ -55,6 +51,8 @@ public:
required_shared_ptr<uint8_t> m_smoothing_table;
uint32_t m_vscroll;
uint32_t m_hscroll;
+ bool m_foreground_bank;
+ bool m_video_off;
/* audio state */
uint8_t m_audio_latch;
@@ -66,14 +64,15 @@ public:
DECLARE_WRITE8_MEMBER(rom_banksel_w);
DECLARE_READ8_MEMBER(a2d_data_r);
DECLARE_WRITE8_MEMBER(a2d_select_w);
- DECLARE_WRITE8_MEMBER(jedi_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
DECLARE_WRITE8_MEMBER(nvram_data_w);
DECLARE_WRITE8_MEMBER(nvram_enable_w);
DECLARE_WRITE8_MEMBER(jedi_vscroll_w);
DECLARE_WRITE8_MEMBER(jedi_hscroll_w);
DECLARE_CUSTOM_INPUT_MEMBER(jedi_audio_comm_stat_r);
DECLARE_WRITE8_MEMBER(irq_ack_w);
- DECLARE_WRITE8_MEMBER(jedi_audio_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(audio_reset_w);
DECLARE_WRITE8_MEMBER(jedi_audio_latch_w);
DECLARE_READ8_MEMBER(audio_latch_r);
DECLARE_READ8_MEMBER(jedi_audio_ack_latch_r);
@@ -86,6 +85,8 @@ public:
virtual void sound_start() override;
virtual void sound_reset() override;
DECLARE_VIDEO_START(jedi);
+ DECLARE_WRITE_LINE_MEMBER(foreground_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(video_off_w);
uint32_t screen_update_jedi(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(generate_interrupt);
TIMER_CALLBACK_MEMBER(delayed_audio_latch_w);
diff --git a/src/mame/includes/kchamp.h b/src/mame/includes/kchamp.h
index f3a1b7cb39a..8d3b9657842 100644
--- a/src/mame/includes/kchamp.h
+++ b/src/mame/includes/kchamp.h
@@ -8,6 +8,7 @@
#include "machine/74157.h"
#include "machine/gen_latch.h"
+#include "sound/ay8910.h"
#include "sound/msm5205.h"
#include "sound/dac.h"
@@ -22,6 +23,7 @@ public:
m_decrypted_opcodes(*this, "decrypted_opcodes"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
+ m_ay(*this, "ay%u", 1),
m_adpcm_select(*this, "adpcm_select"),
m_msm(*this, "msm"),
m_dac(*this, "dac"),
@@ -46,6 +48,7 @@ public:
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
+ required_device_array<ay8910_device, 2> m_ay;
optional_device<ls157_device> m_adpcm_select;
optional_device<msm5205_device> m_msm;
optional_device<dac_8bit_r2r_device> m_dac;
@@ -53,14 +56,14 @@ public:
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
- DECLARE_WRITE8_MEMBER(control_w);
- DECLARE_WRITE8_MEMBER(sound_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_reset_w);
DECLARE_WRITE8_MEMBER(sound_msm_w);
DECLARE_READ8_MEMBER(sound_reset_r);
DECLARE_WRITE8_MEMBER(kc_sound_control_w);
DECLARE_WRITE8_MEMBER(kchamp_videoram_w);
DECLARE_WRITE8_MEMBER(kchamp_colorram_w);
- DECLARE_WRITE8_MEMBER(kchamp_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(sound_control_w);
DECLARE_DRIVER_INIT(kchampvs);
DECLARE_DRIVER_INIT(kchampvs2);
diff --git a/src/mame/includes/kyugo.h b/src/mame/includes/kyugo.h
index 71193f349f2..dde5e87745e 100644
--- a/src/mame/includes/kyugo.h
+++ b/src/mame/includes/kyugo.h
@@ -47,8 +47,7 @@ public:
required_device<palette_device> m_palette;
uint8_t m_nmi_mask;
- DECLARE_WRITE8_MEMBER(kyugo_nmi_mask_w);
- DECLARE_WRITE8_MEMBER(kyugo_sub_cpu_control_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(kyugo_coin_counter_w);
DECLARE_WRITE8_MEMBER(kyugo_fgvideoram_w);
DECLARE_WRITE8_MEMBER(kyugo_bgvideoram_w);
@@ -57,7 +56,7 @@ public:
DECLARE_WRITE8_MEMBER(kyugo_scroll_x_lo_w);
DECLARE_WRITE8_MEMBER(kyugo_gfxctrl_w);
DECLARE_WRITE8_MEMBER(kyugo_scroll_y_w);
- DECLARE_WRITE8_MEMBER(kyugo_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_DRIVER_INIT(srdmissn);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
diff --git a/src/mame/includes/ladybug.h b/src/mame/includes/ladybug.h
index a3c5c03f87d..387cf6b54b3 100644
--- a/src/mame/includes/ladybug.h
+++ b/src/mame/includes/ladybug.h
@@ -56,7 +56,7 @@ public:
DECLARE_WRITE8_MEMBER(ladybug_videoram_w);
DECLARE_WRITE8_MEMBER(ladybug_colorram_w);
- DECLARE_WRITE8_MEMBER(ladybug_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_CUSTOM_INPUT_MEMBER(ladybug_p1_control_r);
DECLARE_CUSTOM_INPUT_MEMBER(ladybug_p2_control_r);
DECLARE_INPUT_CHANGED_MEMBER(coin1_inserted);
diff --git a/src/mame/includes/liberatr.h b/src/mame/includes/liberatr.h
index f207b7ed8f8..71592a2340b 100644
--- a/src/mame/includes/liberatr.h
+++ b/src/mame/includes/liberatr.h
@@ -7,6 +7,7 @@
*************************************************************************/
#include "cpu/m6502/m6502.h"
+#include "machine/74259.h"
#include "machine/er2055.h"
#include "machine/watchdog.h"
#include "sound/pokey.h"
@@ -20,25 +21,30 @@ public:
m_earom(*this, "earom"),
m_earom_data(0),
m_earom_control(0),
+ m_outlatch(*this, "outlatch"),
m_screen(*this, "screen"),
m_base_ram(*this, "base_ram"),
m_planet_frame(*this, "planet_frame"),
- m_planet_select(*this, "planet_select"),
m_xcoord(*this, "xcoord"),
m_ycoord(*this, "ycoord"),
m_bitmapram(*this, "bitmapram"),
m_colorram(*this, "colorram") { }
- DECLARE_WRITE8_MEMBER( led_w );
- DECLARE_WRITE8_MEMBER( coin_counter_w );
+ DECLARE_WRITE8_MEMBER(output_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(start_led_1_w);
+ DECLARE_WRITE_LINE_MEMBER(start_led_2_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
- DECLARE_WRITE8_MEMBER( trackball_reset_w );
- DECLARE_READ8_MEMBER( port0_r );
+ DECLARE_WRITE_LINE_MEMBER(trackball_reset_w);
+ DECLARE_READ8_MEMBER(port0_r);
DECLARE_WRITE8_MEMBER( bitmap_w );
DECLARE_READ8_MEMBER( bitmap_xy_r );
DECLARE_WRITE8_MEMBER( bitmap_xy_w );
+ DECLARE_WRITE_LINE_MEMBER(planet_select_w);
+
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
// early raster EAROM interface
@@ -56,6 +62,8 @@ protected:
uint8_t m_earom_data;
uint8_t m_earom_control;
+ required_device<ls259_device> m_outlatch;
+
struct planet;
void init_planet(planet &liberatr_planet, uint8_t *planet_rom);
@@ -66,7 +74,6 @@ protected:
required_device<screen_device> m_screen;
required_shared_ptr<uint8_t> m_base_ram;
required_shared_ptr<uint8_t> m_planet_frame;
- required_shared_ptr<uint8_t> m_planet_select;
required_shared_ptr<uint8_t> m_xcoord;
required_shared_ptr<uint8_t> m_ycoord;
required_shared_ptr<uint8_t> m_bitmapram;
@@ -76,6 +83,8 @@ protected:
uint8_t m_ctrld;
uint8_t m_videoram[0x10000];
+ bool m_planet_select;
+
// The following structure describes the (up to 32) line segments
// that make up one horizontal line (latitude) for one display frame of the planet.
// Note: this and the following structure is only used to collect the
diff --git a/src/mame/includes/lisa.h b/src/mame/includes/lisa.h
index f43392426e7..d44aa22771f 100644
--- a/src/mame/includes/lisa.h
+++ b/src/mame/includes/lisa.h
@@ -12,6 +12,7 @@
#define MAME_INCLUDES_LISA_H
#include "cpu/m68000/m68000.h"
+#include "machine/74259.h"
#include "machine/6522via.h"
#include "machine/6522via.h"
#include "machine/8530scc.h"
@@ -109,6 +110,7 @@ public:
m_scc(*this, "scc"),
m_speaker(*this, "speaker"),
m_nvram(*this, "nvram"),
+ m_latch(*this, "latch"),
m_fdc_rom(*this,"fdc_rom"),
m_fdc_ram(*this,"fdc_ram"),
m_io_line0(*this, "LINE0"),
@@ -131,6 +133,7 @@ public:
required_device<scc8530_t> m_scc;
required_device<speaker_sound_device> m_speaker;
required_device<nvram_device> m_nvram;
+ required_device<ls259_device> m_latch;
required_shared_ptr<uint8_t> m_fdc_rom;
required_shared_ptr<uint8_t> m_fdc_ram;
@@ -196,6 +199,14 @@ public:
DECLARE_WRITE16_MEMBER(lisa_w);
DECLARE_READ16_MEMBER(lisa_IO_r);
DECLARE_WRITE16_MEMBER(lisa_IO_w);
+ DECLARE_WRITE_LINE_MEMBER(diag1_w);
+ DECLARE_WRITE_LINE_MEMBER(diag2_w);
+ DECLARE_WRITE_LINE_MEMBER(seg1_w);
+ DECLARE_WRITE_LINE_MEMBER(seg2_w);
+ DECLARE_WRITE_LINE_MEMBER(setup_w);
+ DECLARE_WRITE_LINE_MEMBER(vtmsk_w);
+ DECLARE_WRITE_LINE_MEMBER(sfmsk_w);
+ DECLARE_WRITE_LINE_MEMBER(hdmsk_w);
DECLARE_DRIVER_INIT(lisa210);
DECLARE_DRIVER_INIT(mac_xl);
diff --git a/src/mame/includes/mappy.h b/src/mame/includes/mappy.h
index 0cecac7c776..ae60c4792cf 100644
--- a/src/mame/includes/mappy.h
+++ b/src/mame/includes/mappy.h
@@ -74,10 +74,10 @@ public:
uint8_t m_sub_irq_mask;
uint8_t m_sub2_irq_mask;
- void common_latch_w(uint32_t offset);
- DECLARE_WRITE8_MEMBER(superpac_latch_w);
- DECLARE_WRITE8_MEMBER(phozon_latch_w);
- DECLARE_WRITE8_MEMBER(mappy_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(int_on_w);
+ DECLARE_WRITE_LINE_MEMBER(int_on_2_w);
+ DECLARE_WRITE_LINE_MEMBER(int_on_3_w);
+ DECLARE_WRITE_LINE_MEMBER(mappy_flip_w);
DECLARE_WRITE8_MEMBER(superpac_videoram_w);
DECLARE_WRITE8_MEMBER(mappy_videoram_w);
DECLARE_WRITE8_MEMBER(superpac_flipscreen_w);
@@ -90,13 +90,10 @@ public:
TILE_GET_INFO_MEMBER(phozon_get_tile_info);
TILE_GET_INFO_MEMBER(mappy_get_tile_info);
DECLARE_MACHINE_START(mappy);
- DECLARE_MACHINE_RESET(superpac);
DECLARE_VIDEO_START(superpac);
DECLARE_PALETTE_INIT(superpac);
- DECLARE_MACHINE_RESET(phozon);
DECLARE_VIDEO_START(phozon);
DECLARE_PALETTE_INIT(phozon);
- DECLARE_MACHINE_RESET(mappy);
DECLARE_VIDEO_START(mappy);
DECLARE_PALETTE_INIT(mappy);
uint32_t screen_update_superpac(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/marineb.h b/src/mame/includes/marineb.h
index 60324a8ec75..bc6c08d941a 100644
--- a/src/mame/includes/marineb.h
+++ b/src/mame/includes/marineb.h
@@ -24,7 +24,6 @@ public:
uint8_t m_column_scroll;
uint8_t m_flipscreen_x;
uint8_t m_flipscreen_y;
- uint8_t m_marineb_active_low_flipscreen;
/* devices */
required_device<cpu_device> m_maincpu;
@@ -33,20 +32,19 @@ public:
required_device<palette_device> m_palette;
uint8_t m_irq_mask;
- DECLARE_WRITE8_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
DECLARE_WRITE8_MEMBER(marineb_videoram_w);
DECLARE_WRITE8_MEMBER(marineb_colorram_w);
DECLARE_WRITE8_MEMBER(marineb_column_scroll_w);
DECLARE_WRITE8_MEMBER(marineb_palette_bank_0_w);
DECLARE_WRITE8_MEMBER(marineb_palette_bank_1_w);
- DECLARE_WRITE8_MEMBER(marineb_flipscreen_x_w);
- DECLARE_WRITE8_MEMBER(marineb_flipscreen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_y_w);
TILE_GET_INFO_MEMBER(get_tile_info);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(marineb);
- DECLARE_MACHINE_RESET(springer);
uint32_t screen_update_marineb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_changes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_springer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/megazone.h b/src/mame/includes/megazone.h
index 50e688340dd..4d868e682b7 100644
--- a/src/mame/includes/megazone.h
+++ b/src/mame/includes/megazone.h
@@ -50,9 +50,10 @@ public:
uint8_t m_irq_mask;
DECLARE_WRITE8_MEMBER(megazone_i8039_irq_w);
DECLARE_WRITE8_MEMBER(i8039_irqen_and_status_w);
- DECLARE_WRITE8_MEMBER(megazone_coin_counter_w);
- DECLARE_WRITE8_MEMBER(irq_mask_w);
- DECLARE_WRITE8_MEMBER(megazone_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_READ8_MEMBER(megazone_port_a_r);
DECLARE_WRITE8_MEMBER(megazone_port_b_w);
virtual void machine_start() override;
diff --git a/src/mame/includes/mermaid.h b/src/mame/includes/mermaid.h
index 2a43ff480b9..6c7e5451aed 100644
--- a/src/mame/includes/mermaid.h
+++ b/src/mame/includes/mermaid.h
@@ -20,11 +20,9 @@ public:
m_fg_scrollram(*this, "fg_scrollram"),
m_spriteram(*this, "spriteram"),
m_colorram(*this, "colorram"),
- m_ay8910_enable(*this, "ay8910_enable"),
m_maincpu(*this, "maincpu"),
m_adpcm(*this, "adpcm"),
- m_ay1(*this, "ay1"),
- m_ay2(*this, "ay2"),
+ m_ay8910(*this, "ay%u", 1),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette")
@@ -38,7 +36,6 @@ public:
required_shared_ptr<uint8_t> m_fg_scrollram;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_colorram;
- required_shared_ptr<uint8_t> m_ay8910_enable;
/* video-related */
tilemap_t *m_bg_tilemap;
@@ -61,12 +58,12 @@ public:
uint8_t m_adpcm_trigger;
uint8_t m_adpcm_rom_sel;
uint8_t m_adpcm_play_reg;
+ bool m_ay8910_enable[2];
/* devices */
required_device<cpu_device> m_maincpu;
optional_device<msm5205_device> m_adpcm;
- required_device<ay8910_device> m_ay1;
- required_device<ay8910_device> m_ay2;
+ required_device_array<ay8910_device, 2> m_ay8910;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
@@ -74,19 +71,21 @@ public:
uint8_t m_nmi_mask;
DECLARE_WRITE8_MEMBER(mermaid_ay8910_write_port_w);
DECLARE_WRITE8_MEMBER(mermaid_ay8910_control_port_w);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
- DECLARE_WRITE8_MEMBER(rougien_sample_rom_lo_w);
- DECLARE_WRITE8_MEMBER(rougien_sample_rom_hi_w);
- DECLARE_WRITE8_MEMBER(rougien_sample_playback_w);
+ DECLARE_WRITE_LINE_MEMBER(ay1_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(ay2_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_lo_w);
+ DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_hi_w);
+ DECLARE_WRITE_LINE_MEMBER(rougien_sample_playback_w);
DECLARE_WRITE8_MEMBER(mermaid_videoram2_w);
DECLARE_WRITE8_MEMBER(mermaid_videoram_w);
DECLARE_WRITE8_MEMBER(mermaid_colorram_w);
- DECLARE_WRITE8_MEMBER(mermaid_flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(mermaid_flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_WRITE8_MEMBER(mermaid_bg_scroll_w);
DECLARE_WRITE8_MEMBER(mermaid_fg_scroll_w);
- DECLARE_WRITE8_MEMBER(rougien_gfxbankswitch1_w);
- DECLARE_WRITE8_MEMBER(rougien_gfxbankswitch2_w);
+ DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch1_w);
+ DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch2_w);
DECLARE_READ8_MEMBER(mermaid_collision_r);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
diff --git a/src/mame/includes/mouser.h b/src/mame/includes/mouser.h
index c9daccdea1c..d27d97b145c 100644
--- a/src/mame/includes/mouser.h
+++ b/src/mame/includes/mouser.h
@@ -36,12 +36,12 @@ public:
required_device<palette_device> m_palette;
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
- DECLARE_WRITE8_MEMBER(mouser_nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
DECLARE_WRITE8_MEMBER(mouser_sound_interrupt_w);
DECLARE_READ8_MEMBER(mouser_sound_byte_r);
DECLARE_WRITE8_MEMBER(mouser_sound_nmi_clear_w);
- DECLARE_WRITE8_MEMBER(mouser_flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(mouser_flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_DRIVER_INIT(mouser);
virtual void machine_start() override;
virtual void machine_reset() override;
diff --git a/src/mame/includes/nemesis.h b/src/mame/includes/nemesis.h
index 5da3b2c15f7..c29251de962 100644
--- a/src/mame/includes/nemesis.h
+++ b/src/mame/includes/nemesis.h
@@ -85,20 +85,21 @@ public:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
- DECLARE_WRITE16_MEMBER(gx400_irq1_enable_word_w);
- DECLARE_WRITE16_MEMBER(gx400_irq2_enable_word_w);
- DECLARE_WRITE16_MEMBER(gx400_irq4_enable_word_w);
- DECLARE_WRITE16_MEMBER(nemesis_irq_enable_word_w);
- DECLARE_WRITE16_MEMBER(konamigt_irq_enable_word_w);
- DECLARE_WRITE16_MEMBER(konamigt_irq2_enable_word_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(irq1_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(irq2_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(irq4_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_irq_w);
DECLARE_READ16_MEMBER(gx400_sharedram_word_r);
DECLARE_WRITE16_MEMBER(gx400_sharedram_word_w);
DECLARE_READ16_MEMBER(konamigt_input_word_r);
DECLARE_WRITE16_MEMBER(selected_ip_word_w);
DECLARE_READ16_MEMBER(selected_ip_word_r);
DECLARE_READ8_MEMBER(wd_r);
- DECLARE_WRITE16_MEMBER(nemesis_gfx_flipx_word_w);
- DECLARE_WRITE16_MEMBER(nemesis_gfx_flipy_word_w);
+ DECLARE_WRITE_LINE_MEMBER(gfx_flipx_w);
+ DECLARE_WRITE_LINE_MEMBER(gfx_flipy_w);
DECLARE_WRITE16_MEMBER(salamand_control_port_word_w);
DECLARE_WRITE16_MEMBER(nemesis_palette_word_w);
DECLARE_WRITE16_MEMBER(nemesis_videoram1_word_w);
diff --git a/src/mame/includes/orbit.h b/src/mame/includes/orbit.h
index 470a40ee9c0..e2f66a5cba3 100644
--- a/src/mame/includes/orbit.h
+++ b/src/mame/includes/orbit.h
@@ -10,6 +10,7 @@
#pragma once
+#include "machine/74259.h"
#include "sound/discrete.h"
#include "screen.h"
@@ -32,14 +33,16 @@ public:
m_discrete(*this, "discrete"),
m_bg_tilemap(nullptr),
m_flip_screen(0),
- m_misc_flags(0),
+ m_latch(*this, "latch"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette")
{ }
- DECLARE_WRITE8_MEMBER(orbit_misc_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(heat_rst_led_w);
+ DECLARE_WRITE_LINE_MEMBER(hyper_led_w);
DECLARE_WRITE8_MEMBER(orbit_playfield_w);
TILE_GET_INFO_MEMBER(get_tile_info);
uint32_t screen_update_orbit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -69,10 +72,8 @@ protected:
tilemap_t *m_bg_tilemap;
int m_flip_screen;
- /* misc */
- uint8_t m_misc_flags;
-
/* devices */
+ required_device<f9334_device> m_latch;
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
diff --git a/src/mame/includes/pacman.h b/src/mame/includes/pacman.h
index cbfe2da6948..7f296581efa 100644
--- a/src/mame/includes/pacman.h
+++ b/src/mame/includes/pacman.h
@@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
+#include "machine/watchdog.h"
#include "sound/namco.h"
/*************************************************************************
@@ -15,6 +16,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_namco_sound(*this, "namco"),
+ m_watchdog(*this, "watchdog"),
m_spriteram(*this, "spriteram"),
m_spriteram2(*this, "spriteram2"),
m_s2650_spriteram(*this, "s2650_spriteram"),
@@ -29,6 +31,7 @@ public:
required_device<cpu_device> m_maincpu;
optional_device<namco_device> m_namco_sound;
+ required_device<watchdog_timer_device> m_watchdog;
optional_shared_ptr<uint8_t> m_spriteram;
optional_shared_ptr<uint8_t> m_spriteram2;
optional_shared_ptr<uint8_t> m_s2650_spriteram;
@@ -59,9 +62,10 @@ public:
DECLARE_WRITE8_MEMBER(pacman_interrupt_vector_w);
DECLARE_WRITE8_MEMBER(piranha_interrupt_vector_w);
DECLARE_WRITE8_MEMBER(nmouse_interrupt_vector_w);
- DECLARE_WRITE8_MEMBER(pacman_leds_w);
- DECLARE_WRITE8_MEMBER(pacman_coin_counter_w);
- DECLARE_WRITE8_MEMBER(pacman_coin_lockout_global_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_global_w);
DECLARE_WRITE8_MEMBER(alibaba_sound_w);
DECLARE_READ8_MEMBER(alibaba_mystery_1_r);
DECLARE_READ8_MEMBER(alibaba_mystery_2_r);
@@ -94,24 +98,24 @@ public:
DECLARE_WRITE8_MEMBER(mspacman_disable_decode_w);
DECLARE_READ8_MEMBER(mspacman_enable_decode_r_0x3ff8);
DECLARE_WRITE8_MEMBER(mspacman_enable_decode_w);
- DECLARE_WRITE8_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
DECLARE_READ8_MEMBER(mspacii_protection_r);
DECLARE_READ8_MEMBER(cannonbp_protection_r);
DECLARE_WRITE8_MEMBER(pacman_videoram_w);
DECLARE_WRITE8_MEMBER(pacman_colorram_w);
- DECLARE_WRITE8_MEMBER(pacman_flipscreen_w);
- DECLARE_WRITE8_MEMBER(pengo_palettebank_w);
- DECLARE_WRITE8_MEMBER(pengo_colortablebank_w);
- DECLARE_WRITE8_MEMBER(pengo_gfxbank_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(pengo_palettebank_w);
+ DECLARE_WRITE_LINE_MEMBER(pengo_colortablebank_w);
+ DECLARE_WRITE_LINE_MEMBER(pengo_gfxbank_w);
DECLARE_WRITE8_MEMBER(s2650games_videoram_w);
DECLARE_WRITE8_MEMBER(s2650games_colorram_w);
DECLARE_WRITE8_MEMBER(s2650games_scroll_w);
DECLARE_WRITE8_MEMBER(s2650games_tilesbank_w);
DECLARE_WRITE8_MEMBER(jrpacman_videoram_w);
- DECLARE_WRITE8_MEMBER(jrpacman_charbank_w);
- DECLARE_WRITE8_MEMBER(jrpacman_spritebank_w);
+ DECLARE_WRITE_LINE_MEMBER(jrpacman_charbank_w);
+ DECLARE_WRITE_LINE_MEMBER(jrpacman_spritebank_w);
DECLARE_WRITE8_MEMBER(jrpacman_scroll_w);
- DECLARE_WRITE8_MEMBER(jrpacman_bgpriority_w);
+ DECLARE_WRITE_LINE_MEMBER(jrpacman_bgpriority_w);
DECLARE_WRITE8_MEMBER(superabc_bank_w);
DECLARE_DRIVER_INIT(maketrax);
DECLARE_DRIVER_INIT(drivfrcp);
diff --git a/src/mame/includes/pandoras.h b/src/mame/includes/pandoras.h
index 40bdc82a29f..9d78bb0a55a 100644
--- a/src/mame/includes/pandoras.h
+++ b/src/mame/includes/pandoras.h
@@ -44,16 +44,19 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
- DECLARE_WRITE8_MEMBER(pandoras_int_control_w);
+ DECLARE_WRITE_LINE_MEMBER(cpua_irq_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(cpub_irq_enable_w);
DECLARE_WRITE8_MEMBER(pandoras_cpua_irqtrigger_w);
DECLARE_WRITE8_MEMBER(pandoras_cpub_irqtrigger_w);
DECLARE_WRITE8_MEMBER(pandoras_i8039_irqtrigger_w);
DECLARE_WRITE8_MEMBER(i8039_irqen_and_status_w);
DECLARE_WRITE8_MEMBER(pandoras_z80_irqtrigger_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(pandoras_vram_w);
DECLARE_WRITE8_MEMBER(pandoras_cram_w);
DECLARE_WRITE8_MEMBER(pandoras_scrolly_w);
- DECLARE_WRITE8_MEMBER(pandoras_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_READ8_MEMBER(pandoras_portA_r);
DECLARE_READ8_MEMBER(pandoras_portB_r);
TILE_GET_INFO_MEMBER(get_tile_info0);
diff --git a/src/mame/includes/playch10.h b/src/mame/includes/playch10.h
index 1cf8a7d85e1..608b72baf8c 100644
--- a/src/mame/includes/playch10.h
+++ b/src/mame/includes/playch10.h
@@ -72,22 +72,20 @@ public:
int m_IRQ_enable;
int m_pc10_bios;
tilemap_t *m_bg_tilemap;
- DECLARE_WRITE8_MEMBER(up8w_w);
+ DECLARE_WRITE_LINE_MEMBER(up8w_w);
DECLARE_READ8_MEMBER(ram_8w_r);
DECLARE_WRITE8_MEMBER(ram_8w_w);
DECLARE_WRITE8_MEMBER(sprite_dma_w);
DECLARE_WRITE8_MEMBER(time_w);
- DECLARE_WRITE8_MEMBER(pc10_SDCS_w);
- DECLARE_WRITE8_MEMBER(pc10_CNTRLMASK_w);
- DECLARE_WRITE8_MEMBER(pc10_DISPMASK_w);
- DECLARE_WRITE8_MEMBER(pc10_SOUNDMASK_w);
- DECLARE_WRITE8_MEMBER(pc10_NMIENABLE_w);
- DECLARE_WRITE8_MEMBER(pc10_DOGDI_w);
- DECLARE_WRITE8_MEMBER(pc10_GAMERES_w);
- DECLARE_WRITE8_MEMBER(pc10_GAMESTOP_w);
- DECLARE_WRITE8_MEMBER(pc10_PPURES_w);
+ DECLARE_WRITE_LINE_MEMBER(SDCS_w);
+ DECLARE_WRITE_LINE_MEMBER(CNTRLMASK_w);
+ DECLARE_WRITE_LINE_MEMBER(DISPMASK_w);
+ DECLARE_WRITE_LINE_MEMBER(SOUNDMASK_w);
+ DECLARE_WRITE_LINE_MEMBER(NMIENABLE_w);
+ DECLARE_WRITE_LINE_MEMBER(DOGDI_w);
+ DECLARE_WRITE_LINE_MEMBER(PPURES_w);
DECLARE_READ8_MEMBER(pc10_detectclr_r);
- DECLARE_WRITE8_MEMBER(pc10_CARTSEL_w);
+ DECLARE_WRITE8_MEMBER(CARTSEL_w);
DECLARE_READ8_MEMBER(pc10_prot_r);
DECLARE_WRITE8_MEMBER(pc10_prot_w);
DECLARE_WRITE8_MEMBER(pc10_in0_w);
diff --git a/src/mame/includes/polepos.h b/src/mame/includes/polepos.h
index 8765038dd0c..e0a6e6ac23e 100644
--- a/src/mame/includes/polepos.h
+++ b/src/mame/includes/polepos.h
@@ -10,6 +10,7 @@
#pragma once
+#include "machine/74259.h"
#include "machine/gen_latch.h"
#include "sound/namco.h"
#include "sound/discrete.h"
@@ -49,6 +50,7 @@ public:
m_sound_z80(*this, "soundz80bl"),
m_soundlatch(*this, "soundlatch"),
m_namco_sound(*this, "namco"),
+ m_latch(*this, "latch"),
m_sprite16_memory(*this, "sprite16_memory"),
m_road16_memory(*this, "road16_memory"),
m_alpha16_memory(*this, "alpha16_memory"),
@@ -63,6 +65,7 @@ public:
optional_device<cpu_device> m_sound_z80;
optional_device<generic_latch_8_device> m_soundlatch;
optional_device<namco_device> m_namco_sound;
+ required_device<ls259_device> m_latch;
uint8_t m_steer_last;
uint8_t m_steer_delta;
int16_t m_steer_accum;
@@ -85,12 +88,15 @@ public:
tilemap_t *m_tx_tilemap;
int m_chacl;
uint16_t m_scroll;
- uint8_t m_main_irq_mask;
uint8_t m_sub_irq_mask;
DECLARE_READ16_MEMBER(polepos2_ic25_r);
DECLARE_READ8_MEMBER(polepos_adc_r);
DECLARE_READ8_MEMBER(polepos_ready_r);
- DECLARE_WRITE8_MEMBER(polepos_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(iosel_w);
+ DECLARE_WRITE_LINE_MEMBER(clson_w);
+ DECLARE_WRITE_LINE_MEMBER(gasel_w);
+ DECLARE_WRITE_LINE_MEMBER(sb0_w);
+ DECLARE_WRITE_LINE_MEMBER(chacl_w);
DECLARE_WRITE16_MEMBER(polepos_z8002_nvi_enable_w);
DECLARE_READ16_MEMBER(polepos_sprite16_r);
DECLARE_WRITE16_MEMBER(polepos_sprite16_w);
diff --git a/src/mame/includes/pooyan.h b/src/mame/includes/pooyan.h
index 763c88bacf7..a9143e8de4c 100644
--- a/src/mame/includes/pooyan.h
+++ b/src/mame/includes/pooyan.h
@@ -30,15 +30,16 @@ public:
/* misc */
uint8_t m_irq_enable;
- DECLARE_WRITE8_MEMBER(irq_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void machine_start() override;
- virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(pooyan);
diff --git a/src/mame/includes/prof80.h b/src/mame/includes/prof80.h
index faa9d7be323..253ef3311de 100644
--- a/src/mame/includes/prof80.h
+++ b/src/mame/includes/prof80.h
@@ -10,6 +10,7 @@
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
#include "machine/prof80mmu.h"
+#include "machine/74259.h"
#include "machine/ram.h"
#include "machine/rescap.h"
#include "machine/upd1990a.h"
@@ -21,6 +22,8 @@
#define UPD1990A_TAG "z43"
#define RS232_A_TAG "rs232a"
#define RS232_B_TAG "rs232b"
+#define FLR_A_TAG "z44"
+#define FLR_B_TAG "z45"
// ------------------------------------------------------------------------
@@ -45,6 +48,8 @@ public:
m_ecb(*this, ECBBUS_TAG),
m_rs232a(*this, RS232_A_TAG),
m_rs232b(*this, RS232_B_TAG),
+ m_flra(*this, FLR_A_TAG),
+ m_flrb(*this, FLR_B_TAG),
m_rom(*this, Z80_TAG),
m_j4(*this, "J4"),
m_j5(*this, "J5")
@@ -60,30 +65,33 @@ public:
required_device<ecbbus_device> m_ecb;
required_device<rs232_port_device> m_rs232a;
required_device<rs232_port_device> m_rs232b;
+ required_device<ls259_device> m_flra;
+ required_device<ls259_device> m_flrb;
required_memory_region m_rom;
required_ioport m_j4;
required_ioport m_j5;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void machine_start() override;
- virtual void machine_reset() override;
enum
{
TIMER_ID_MOTOR
};
- DECLARE_WRITE8_MEMBER( flr_w );
- DECLARE_READ8_MEMBER( status_r );
- DECLARE_READ8_MEMBER( status2_r );
+ DECLARE_WRITE8_MEMBER(flr_w);
+ DECLARE_READ8_MEMBER(status_r);
+ DECLARE_READ8_MEMBER(status2_r);
- void ls259_w(int fa, int sa, int fb, int sb);
void motor(int mon);
- // RTC state
- int m_c0;
- int m_c1;
- int m_c2;
+ DECLARE_WRITE_LINE_MEMBER(ready_w);
+ DECLARE_WRITE_LINE_MEMBER(inuse_w);
+ DECLARE_WRITE_LINE_MEMBER(motor_w);
+ DECLARE_WRITE_LINE_MEMBER(select_w);
+ DECLARE_WRITE_LINE_MEMBER(resf_w);
+ DECLARE_WRITE_LINE_MEMBER(mini_w);
+ DECLARE_WRITE_LINE_MEMBER(mstop_w);
// floppy state
int m_motor;
diff --git a/src/mame/includes/punchout.h b/src/mame/includes/punchout.h
index 93f562ce3b1..363c91c08bc 100644
--- a/src/mame/includes/punchout.h
+++ b/src/mame/includes/punchout.h
@@ -62,15 +62,12 @@ public:
DECLARE_WRITE8_MEMBER(spunchout_exp_w);
DECLARE_WRITE8_MEMBER(spunchout_rp5h01_reset_w);
DECLARE_WRITE8_MEMBER(spunchout_rp5h01_clock_w);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(punchout_bg_top_videoram_w);
DECLARE_WRITE8_MEMBER(punchout_bg_bot_videoram_w);
DECLARE_WRITE8_MEMBER(armwrest_fg_videoram_w);
DECLARE_WRITE8_MEMBER(punchout_spr1_videoram_w);
DECLARE_WRITE8_MEMBER(punchout_spr2_videoram_w);
- DECLARE_WRITE8_MEMBER(punchout_speech_reset_w);
- DECLARE_WRITE8_MEMBER(punchout_speech_st_w);
- DECLARE_WRITE8_MEMBER(punchout_speech_vcu_w);
TILE_GET_INFO_MEMBER(top_get_info);
TILE_GET_INFO_MEMBER(armwrest_top_get_info);
TILE_GET_INFO_MEMBER(bot_get_info);
diff --git a/src/mame/includes/rallyx.h b/src/mame/includes/rallyx.h
index a7787db6a88..762c4f12c21 100644
--- a/src/mame/includes/rallyx.h
+++ b/src/mame/includes/rallyx.h
@@ -55,20 +55,25 @@ public:
uint8_t m_main_irq_mask;
DECLARE_WRITE8_MEMBER(rallyx_interrupt_vector_w);
- DECLARE_WRITE8_MEMBER(rallyx_bang_w);
- DECLARE_WRITE8_MEMBER(rallyx_latch_w);
- DECLARE_WRITE8_MEMBER(locomotn_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(bang_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_on_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(led_0_w);
+ DECLARE_WRITE_LINE_MEMBER(led_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(rallyx_videoram_w);
DECLARE_WRITE8_MEMBER(rallyx_scrollx_w);
DECLARE_WRITE8_MEMBER(rallyx_scrolly_w);
- DECLARE_WRITE8_MEMBER(tactcian_starson_w);
+ DECLARE_WRITE_LINE_MEMBER(stars_enable_w);
TILEMAP_MAPPER_MEMBER(fg_tilemap_scan);
TILE_GET_INFO_MEMBER(rallyx_bg_get_tile_info);
TILE_GET_INFO_MEMBER(rallyx_fg_get_tile_info);
TILE_GET_INFO_MEMBER(locomotn_bg_get_tile_info);
TILE_GET_INFO_MEMBER(locomotn_fg_get_tile_info);
DECLARE_MACHINE_START(rallyx);
- DECLARE_MACHINE_RESET(rallyx);
DECLARE_VIDEO_START(rallyx);
DECLARE_PALETTE_INIT(rallyx);
DECLARE_VIDEO_START(jungler);
diff --git a/src/mame/includes/retofinv.h b/src/mame/includes/retofinv.h
index 96ba21cf1c6..ca5928fbf44 100644
--- a/src/mame/includes/retofinv.h
+++ b/src/mame/includes/retofinv.h
@@ -24,16 +24,13 @@ public:
{
}
- DECLARE_WRITE8_MEMBER(cpu1_reset_w);
- DECLARE_WRITE8_MEMBER(cpu2_reset_w);
- DECLARE_WRITE8_MEMBER(mcu_reset_w);
DECLARE_WRITE8_MEMBER(cpu2_m6000_w);
DECLARE_READ8_MEMBER(cpu0_mf800_r);
DECLARE_WRITE8_MEMBER(soundcommand_w);
- DECLARE_WRITE8_MEMBER(irq0_ack_w);
- DECLARE_WRITE8_MEMBER(irq1_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(irq0_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(irq1_ack_w);
DECLARE_WRITE8_MEMBER(coincounter_w);
- DECLARE_WRITE8_MEMBER(coinlockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coinlockout_w);
DECLARE_READ8_MEMBER(mcu_status_r);
DECLARE_WRITE8_MEMBER(bg_videoram_w);
DECLARE_WRITE8_MEMBER(fg_videoram_w);
diff --git a/src/mame/includes/rocnrope.h b/src/mame/includes/rocnrope.h
index 10cd5b6bb50..f02426b00a3 100644
--- a/src/mame/includes/rocnrope.h
+++ b/src/mame/includes/rocnrope.h
@@ -29,10 +29,12 @@ public:
uint8_t m_irq_mask;
DECLARE_WRITE8_MEMBER(rocnrope_interrupt_vector_w);
- DECLARE_WRITE8_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(rocnrope_videoram_w);
DECLARE_WRITE8_MEMBER(rocnrope_colorram_w);
- DECLARE_WRITE8_MEMBER(rocnrope_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
DECLARE_DRIVER_INIT(rocnrope);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
diff --git a/src/mame/includes/rollrace.h b/src/mame/includes/rollrace.h
index f066376edd5..88c6ebdbe05 100644
--- a/src/mame/includes/rollrace.h
+++ b/src/mame/includes/rollrace.h
@@ -20,7 +20,6 @@ public:
required_shared_ptr<uint8_t> m_spriteram;
tilemap_t *m_fg_tilemap;
- int m_charbank[2];
int m_bkgpage;
int m_bkgflip;
int m_chrbank;
@@ -35,16 +34,18 @@ public:
DECLARE_READ8_MEMBER(fake_d800_r);
DECLARE_WRITE8_MEMBER(fake_d800_w);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(sound_nmi_mask_w);
- DECLARE_WRITE8_MEMBER(coin_w);
- DECLARE_WRITE8_MEMBER(charbank_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE_LINE_MEMBER(charbank_0_w);
+ DECLARE_WRITE_LINE_MEMBER(charbank_1_w);
DECLARE_WRITE8_MEMBER(bkgpen_w);
- DECLARE_WRITE8_MEMBER(spritebank_w);
+ DECLARE_WRITE_LINE_MEMBER(spritebank_w);
DECLARE_WRITE8_MEMBER(backgroundpage_w);
DECLARE_WRITE8_MEMBER(backgroundcolor_w);
DECLARE_WRITE8_MEMBER(flipy_w);
- DECLARE_WRITE8_MEMBER(flipx_w);
+ DECLARE_WRITE_LINE_MEMBER(flipx_w);
DECLARE_WRITE8_MEMBER(vram_w);
DECLARE_WRITE8_MEMBER(cram_w);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
diff --git a/src/mame/includes/sauro.h b/src/mame/includes/sauro.h
index 7c4457d8561..54dc91214ec 100644
--- a/src/mame/includes/sauro.h
+++ b/src/mame/includes/sauro.h
@@ -4,7 +4,6 @@
#include "machine/gen_latch.h"
#include "sound/sp0256.h"
-
class sauro_state : public driver_device
{
public:
@@ -37,10 +36,16 @@ public:
tilemap_t *m_fg_tilemap;
uint8_t m_palette_bank;
+ bool m_irq_enable;
+
+ virtual void machine_start() override;
+
// common
- DECLARE_WRITE8_MEMBER(coin1_w);
- DECLARE_WRITE8_MEMBER(coin2_w);
- DECLARE_WRITE8_MEMBER(flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(vblank_irq);
+ DECLARE_WRITE_LINE_MEMBER(irq_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
DECLARE_WRITE8_MEMBER(scroll_bg_w);
@@ -48,7 +53,8 @@ public:
// sauro specific
DECLARE_WRITE8_MEMBER(sauro_sound_command_w);
DECLARE_READ8_MEMBER(sauro_sound_command_r);
- DECLARE_WRITE8_MEMBER(sauro_palette_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(sauro_palette_bank0_w);
+ DECLARE_WRITE_LINE_MEMBER(sauro_palette_bank1_w);
DECLARE_WRITE8_MEMBER(sauro_scroll_fg_w);
DECLARE_WRITE8_MEMBER(sauro_videoram2_w);
DECLARE_WRITE8_MEMBER(sauro_colorram2_w);
diff --git a/src/mame/includes/shangkid.h b/src/mame/includes/shangkid.h
index 795f9db3d7c..6faa4cd51ec 100644
--- a/src/mame/includes/shangkid.h
+++ b/src/mame/includes/shangkid.h
@@ -30,10 +30,8 @@ public:
tilemap_t *m_background;
// shangkid and chinhero
- DECLARE_WRITE8_MEMBER(maincpu_bank_w);
- DECLARE_WRITE8_MEMBER(bbx_enable_w);
- DECLARE_WRITE8_MEMBER(cpu_reset_w);
- DECLARE_WRITE8_MEMBER(sound_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(cpu_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_enable_w);
DECLARE_READ8_MEMBER(soundlatch_r);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(ay8910_portb_w);
diff --git a/src/mame/includes/skydiver.h b/src/mame/includes/skydiver.h
index 2c7daceedc6..e441fd6f64e 100644
--- a/src/mame/includes/skydiver.h
+++ b/src/mame/includes/skydiver.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/discrete.h"
@@ -29,6 +30,7 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_watchdog(*this, "watchdog"),
+ m_latch3(*this, "latch3"),
m_discrete(*this, "discrete"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
@@ -36,6 +38,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<watchdog_timer_device> m_watchdog;
+ required_device<f9334_device> m_latch3;
required_device<discrete_device> m_discrete;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@@ -46,21 +49,23 @@ public:
tilemap_t *m_bg_tilemap;
int m_width;
- DECLARE_WRITE8_MEMBER(nmion_w);
+ DECLARE_WRITE_LINE_MEMBER(nmion_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_READ8_MEMBER(wram_r);
DECLARE_WRITE8_MEMBER(wram_w);
- DECLARE_WRITE8_MEMBER(width_w);
- DECLARE_WRITE8_MEMBER(coin_lockout_w);
- DECLARE_WRITE8_MEMBER(start_lamp_1_w);
- DECLARE_WRITE8_MEMBER(start_lamp_2_w);
- DECLARE_WRITE8_MEMBER(lamp_s_w);
- DECLARE_WRITE8_MEMBER(lamp_k_w);
- DECLARE_WRITE8_MEMBER(lamp_y_w);
- DECLARE_WRITE8_MEMBER(lamp_d_w);
- DECLARE_WRITE8_MEMBER(_2000_201F_w);
- DECLARE_WRITE8_MEMBER(sound_enable_w);
- DECLARE_WRITE8_MEMBER(whistle_w);
+ DECLARE_WRITE_LINE_MEMBER(width_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(start_lamp_1_w);
+ DECLARE_WRITE_LINE_MEMBER(start_lamp_2_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_s_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_k_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_y_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_d_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_i_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_v_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_e_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_r_w);
+ DECLARE_WRITE8_MEMBER(latch3_watchdog_w);
TILE_GET_INFO_MEMBER(get_tile_info);
diff --git a/src/mame/includes/slapfght.h b/src/mame/includes/slapfght.h
index 9e033a23b76..043a9ea3f4b 100644
--- a/src/mame/includes/slapfght.h
+++ b/src/mame/includes/slapfght.h
@@ -72,9 +72,8 @@ public:
uint8_t m_tigerhb_cmd;
DECLARE_READ8_MEMBER(tigerh_mcu_status_r);
- DECLARE_WRITE8_MEMBER(sound_reset_w);
- DECLARE_WRITE8_MEMBER(irq_enable_w);
- DECLARE_WRITE8_MEMBER(prg_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
DECLARE_READ8_MEMBER(vblank_r);
DECLARE_WRITE8_MEMBER(sound_nmi_enable_w);
DECLARE_WRITE8_MEMBER(videoram_w);
@@ -84,8 +83,8 @@ public:
DECLARE_WRITE8_MEMBER(scrollx_lo_w);
DECLARE_WRITE8_MEMBER(scrollx_hi_w);
DECLARE_WRITE8_MEMBER(scrolly_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
- DECLARE_WRITE8_MEMBER(palette_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(palette_bank_w);
DECLARE_WRITE8_MEMBER(scroll_from_mcu_w);
diff --git a/src/mame/includes/sonson.h b/src/mame/includes/sonson.h
index e63d705938d..7bb26342498 100644
--- a/src/mame/includes/sonson.h
+++ b/src/mame/includes/sonson.h
@@ -27,21 +27,16 @@ public:
/* video-related */
tilemap_t *m_bg_tilemap;
- /* misc */
- int m_last_irq;
-
/* devices */
required_device<cpu_device> m_audiocpu;
- DECLARE_WRITE8_MEMBER(sonson_sh_irqtrigger_w);
- DECLARE_WRITE8_MEMBER(sonson_coin1_counter_w);
- DECLARE_WRITE8_MEMBER(sonson_coin2_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(sh_irqtrigger_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
DECLARE_WRITE8_MEMBER(sonson_videoram_w);
DECLARE_WRITE8_MEMBER(sonson_colorram_w);
DECLARE_WRITE8_MEMBER(sonson_scrollx_w);
- DECLARE_WRITE8_MEMBER(sonson_flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(sonson);
uint32_t screen_update_sonson(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/splash.h b/src/mame/includes/splash.h
index da40cfae925..c10ac031084 100644
--- a/src/mame/includes/splash.h
+++ b/src/mame/includes/splash.h
@@ -1,6 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Manuel Abadia, David Haywood
+#include "machine/74259.h"
#include "machine/eepromser.h"
#include "machine/gen_latch.h"
#include "sound/msm5205.h"
@@ -16,6 +17,7 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch"),
+ m_outlatch(*this, "outlatch"),
m_pixelram(*this, "pixelram"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
@@ -30,6 +32,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
+ optional_device<ls259_device> m_outlatch;
required_shared_ptr<uint16_t> m_pixelram;
required_shared_ptr<uint16_t> m_videoram;
@@ -54,7 +57,11 @@ public:
// common
DECLARE_WRITE16_MEMBER(vram_w);
- DECLARE_WRITE16_MEMBER(coin_w);
+ DECLARE_WRITE8_MEMBER(coin_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
// splash specific
DECLARE_WRITE_LINE_MEMBER(splash_msm5205_int);
diff --git a/src/mame/includes/sprint2.h b/src/mame/includes/sprint2.h
index 79a61f3b824..6ea352a1769 100644
--- a/src/mame/includes/sprint2.h
+++ b/src/mame/includes/sprint2.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/discrete.h"
#include "screen.h"
@@ -33,12 +34,12 @@ public:
m_video_ram(*this, "video_ram"),
m_maincpu(*this, "maincpu"),
m_watchdog(*this, "watchdog"),
+ m_outlatch(*this, "outlatch"),
m_discrete(*this, "discrete"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
- int m_attract;
int m_steering[2];
int m_gear[2];
int m_game;
@@ -57,19 +58,17 @@ public:
DECLARE_WRITE8_MEMBER(sprint2_steering_reset1_w);
DECLARE_WRITE8_MEMBER(sprint2_steering_reset2_w);
DECLARE_WRITE8_MEMBER(sprint2_wram_w);
- DECLARE_WRITE8_MEMBER(sprint2_lamp1_w);
- DECLARE_WRITE8_MEMBER(sprint2_lamp2_w);
- DECLARE_WRITE8_MEMBER(dominos4_lamp3_w);
- DECLARE_WRITE8_MEMBER(dominos4_lamp4_w);
+ DECLARE_WRITE8_MEMBER(output_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp1_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp2_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp3_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp4_w);
DECLARE_READ8_MEMBER(sprint2_collision1_r);
DECLARE_READ8_MEMBER(sprint2_collision2_r);
DECLARE_WRITE8_MEMBER(sprint2_collision_reset1_w);
DECLARE_WRITE8_MEMBER(sprint2_collision_reset2_w);
DECLARE_WRITE8_MEMBER(sprint2_video_ram_w);
- DECLARE_WRITE8_MEMBER(sprint2_attract_w);
DECLARE_WRITE8_MEMBER(sprint2_noise_reset_w);
- DECLARE_WRITE8_MEMBER(sprint2_skid1_w);
- DECLARE_WRITE8_MEMBER(sprint2_skid2_w);
DECLARE_DRIVER_INIT(sprint1);
DECLARE_DRIVER_INIT(sprint2);
DECLARE_DRIVER_INIT(dominos);
@@ -87,6 +86,7 @@ public:
int service_mode();
required_device<cpu_device> m_maincpu;
required_device<watchdog_timer_device> m_watchdog;
+ required_device<f9334_device> m_outlatch;
required_device<discrete_device> m_discrete;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
diff --git a/src/mame/includes/sprint4.h b/src/mame/includes/sprint4.h
index 3144a335489..e410f0a508b 100644
--- a/src/mame/includes/sprint4.h
+++ b/src/mame/includes/sprint4.h
@@ -50,7 +50,10 @@ public:
DECLARE_WRITE8_MEMBER(wram_w);
DECLARE_WRITE8_MEMBER(collision_reset_w);
DECLARE_WRITE8_MEMBER(da_latch_w);
- DECLARE_WRITE8_MEMBER(lamp_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp0_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp1_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp2_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp3_w);
DECLARE_WRITE8_MEMBER(video_ram_w);
DECLARE_CUSTOM_INPUT_MEMBER(get_lever);
DECLARE_CUSTOM_INPUT_MEMBER(get_wheel);
diff --git a/src/mame/includes/sprint8.h b/src/mame/includes/sprint8.h
index 3a279090c1a..0d7404f56a6 100644
--- a/src/mame/includes/sprint8.h
+++ b/src/mame/includes/sprint8.h
@@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Stefan Jokisch
+#include "machine/74259.h"
#include "sound/discrete.h"
#include "screen.h"
@@ -16,8 +17,7 @@ public:
m_video_ram(*this, "video_ram"),
m_pos_h_ram(*this, "pos_h_ram"),
m_pos_v_ram(*this, "pos_v_ram"),
- m_pos_d_ram(*this, "pos_d_ram"),
- m_team(*this, "team") { }
+ m_pos_d_ram(*this, "pos_d_ram") { }
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
@@ -29,13 +29,14 @@ public:
required_shared_ptr<uint8_t> m_pos_h_ram;
required_shared_ptr<uint8_t> m_pos_v_ram;
required_shared_ptr<uint8_t> m_pos_d_ram;
- required_shared_ptr<uint8_t> m_team;
int m_steer_dir[8];
int m_steer_flag[8];
int m_collision_reset;
int m_collision_index;
uint8_t m_dial[8];
+ int m_team;
+
tilemap_t* m_tilemap1;
tilemap_t* m_tilemap2;
bitmap_ind16 m_helper1;
@@ -45,12 +46,9 @@ public:
DECLARE_READ8_MEMBER(collision_r);
DECLARE_READ8_MEMBER(input_r);
DECLARE_WRITE8_MEMBER(lockout_w);
- DECLARE_WRITE8_MEMBER(int_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(int_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(team_w);
DECLARE_WRITE8_MEMBER(video_ram_w);
- DECLARE_WRITE8_MEMBER(crash_w);
- DECLARE_WRITE8_MEMBER(screech_w);
- DECLARE_WRITE8_MEMBER(attract_w);
- DECLARE_WRITE8_MEMBER(motor_w);
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -70,4 +68,5 @@ public:
};
/*----------- defined in audio/sprint8.c -----------*/
+MACHINE_CONFIG_EXTERN( sprint8_audio );
DISCRETE_SOUND_EXTERN( sprint8 );
diff --git a/src/mame/includes/starshp1.h b/src/mame/includes/starshp1.h
index a376c2ab8ec..807e0d36776 100644
--- a/src/mame/includes/starshp1.h
+++ b/src/mame/includes/starshp1.h
@@ -82,14 +82,21 @@ public:
tilemap_t *m_bg_tilemap;
DECLARE_WRITE8_MEMBER(starshp1_collision_reset_w);
DECLARE_WRITE8_MEMBER(starshp1_analog_in_w);
- DECLARE_WRITE8_MEMBER(starshp1_misc_w);
+ DECLARE_WRITE_LINE_MEMBER(ship_explode_w);
+ DECLARE_WRITE_LINE_MEMBER(circle_mod_w);
+ DECLARE_WRITE_LINE_MEMBER(circle_kill_w);
+ DECLARE_WRITE_LINE_MEMBER(starfield_kill_w);
+ DECLARE_WRITE_LINE_MEMBER(inverse_w);
+ DECLARE_WRITE_LINE_MEMBER(mux_w);
+ DECLARE_WRITE_LINE_MEMBER(led_w);
DECLARE_READ8_MEMBER(starshp1_rng_r);
DECLARE_WRITE8_MEMBER(starshp1_ssadd_w);
DECLARE_WRITE8_MEMBER(starshp1_sspic_w);
DECLARE_WRITE8_MEMBER(starshp1_playfield_w);
DECLARE_CUSTOM_INPUT_MEMBER(starshp1_analog_r);
DECLARE_CUSTOM_INPUT_MEMBER(collision_latch_r);
- DECLARE_WRITE8_MEMBER(starshp1_audio_w);
+ DECLARE_WRITE_LINE_MEMBER(attract_w);
+ DECLARE_WRITE_LINE_MEMBER(phasor_w);
DECLARE_WRITE8_MEMBER(starshp1_analog_out_w);
TILE_GET_INFO_MEMBER(get_tile_info);
virtual void video_start() override;
diff --git a/src/mame/includes/starwars.h b/src/mame/includes/starwars.h
index 841a37f2176..2f4989243dd 100644
--- a/src/mame/includes/starwars.h
+++ b/src/mame/includes/starwars.h
@@ -36,7 +36,6 @@ public:
uint8_t *m_slapstic_source;
uint8_t *m_slapstic_base;
uint8_t m_slapstic_current_bank;
- uint8_t m_is_esb;
uint8_t m_control_num;
int m_MPA;
int m_BIC;
@@ -57,10 +56,16 @@ public:
DECLARE_READ8_MEMBER(esb_slapstic_r);
DECLARE_WRITE8_MEMBER(esb_slapstic_w);
DECLARE_WRITE8_MEMBER(starwars_nstore_w);
- DECLARE_WRITE8_MEMBER(starwars_out_w);
+ DECLARE_WRITE_LINE_MEMBER(recall_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
+ DECLARE_WRITE_LINE_MEMBER(led2_w);
+ DECLARE_WRITE_LINE_MEMBER(led3_w);
DECLARE_READ8_MEMBER(starwars_adc_r);
DECLARE_WRITE8_MEMBER(starwars_adc_select_w);
DECLARE_READ8_MEMBER(starwars_prng_r);
+ DECLARE_WRITE_LINE_MEMBER(prng_reset_w);
DECLARE_READ8_MEMBER(starwars_div_reh_r);
DECLARE_READ8_MEMBER(starwars_div_rel_r);
DECLARE_WRITE8_MEMBER(starwars_math_w);
diff --git a/src/mame/includes/subs.h b/src/mame/includes/subs.h
index 2594e515095..334d7ecee85 100644
--- a/src/mame/includes/subs.h
+++ b/src/mame/includes/subs.h
@@ -49,14 +49,10 @@ public:
DECLARE_READ8_MEMBER(control_r);
DECLARE_READ8_MEMBER(coin_r);
DECLARE_READ8_MEMBER(options_r);
- DECLARE_WRITE8_MEMBER(lamp1_w);
- DECLARE_WRITE8_MEMBER(lamp2_w);
- DECLARE_WRITE8_MEMBER(invert1_w);
- DECLARE_WRITE8_MEMBER(invert2_w);
- DECLARE_WRITE8_MEMBER(sonar1_w);
- DECLARE_WRITE8_MEMBER(sonar2_w);
- DECLARE_WRITE8_MEMBER(crash_w);
- DECLARE_WRITE8_MEMBER(explode_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp1_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp2_w);
+ DECLARE_WRITE_LINE_MEMBER(invert1_w);
+ DECLARE_WRITE_LINE_MEMBER(invert2_w);
DECLARE_WRITE8_MEMBER(noise_reset_w);
virtual void machine_start() override;
diff --git a/src/mame/includes/tankbatt.h b/src/mame/includes/tankbatt.h
index 083cd7813a9..424e4f6edad 100644
--- a/src/mame/includes/tankbatt.h
+++ b/src/mame/includes/tankbatt.h
@@ -25,18 +25,19 @@ public:
int m_sound_enable;
tilemap_t *m_bg_tilemap;
- DECLARE_WRITE8_MEMBER(led_w);
+ DECLARE_WRITE_LINE_MEMBER(led0_w);
+ DECLARE_WRITE_LINE_MEMBER(led1_w);
DECLARE_READ8_MEMBER(in0_r);
DECLARE_READ8_MEMBER(in1_r);
DECLARE_READ8_MEMBER(dsw_r);
- DECLARE_WRITE8_MEMBER(interrupt_enable_w);
- DECLARE_WRITE8_MEMBER(demo_interrupt_enable_w);
- DECLARE_WRITE8_MEMBER(sh_expl_w);
- DECLARE_WRITE8_MEMBER(sh_engine_w);
- DECLARE_WRITE8_MEMBER(sh_fire_w);
+ DECLARE_WRITE_LINE_MEMBER(interrupt_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(demo_interrupt_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(sh_expl_w);
+ DECLARE_WRITE_LINE_MEMBER(sh_engine_w);
+ DECLARE_WRITE_LINE_MEMBER(sh_fire_w);
DECLARE_WRITE8_MEMBER(irq_ack_w);
- DECLARE_WRITE8_MEMBER(coincounter_w);
- DECLARE_WRITE8_MEMBER(coinlockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coincounter_w);
+ DECLARE_WRITE_LINE_MEMBER(coinlockout_w);
DECLARE_WRITE8_MEMBER(videoram_w);
diff --git a/src/mame/includes/targeth.h b/src/mame/includes/targeth.h
index bf84a9e6755..7c8b744d818 100644
--- a/src/mame/includes/targeth.h
+++ b/src/mame/includes/targeth.h
@@ -5,6 +5,8 @@
#pragma once
+#include "machine/74259.h"
+
class targeth_state : public driver_device
{
public:
@@ -13,6 +15,7 @@ public:
m_maincpu(*this,"maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_outlatch(*this, "outlatch"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
m_spriteram(*this, "spriteram"),
@@ -20,9 +23,12 @@ public:
{ }
DECLARE_WRITE16_MEMBER(OKIM6295_bankswitch_w);
- DECLARE_WRITE16_MEMBER(coin_counter_w);
+ DECLARE_WRITE16_MEMBER(output_latch_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
DECLARE_WRITE8_MEMBER(shareram_w);
DECLARE_READ8_MEMBER(shareram_r);
+
DECLARE_WRITE16_MEMBER(vram_w);
TILE_GET_INFO_MEMBER(get_tile_info_screen0);
@@ -42,6 +48,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_outlatch;
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_vregs;
diff --git a/src/mame/includes/thepit.h b/src/mame/includes/thepit.h
index 5ed5d9242f9..b96c44ed8a8 100644
--- a/src/mame/includes/thepit.h
+++ b/src/mame/includes/thepit.h
@@ -34,16 +34,17 @@ public:
int m_question_rom;
int m_remap_address[16];
- DECLARE_WRITE8_MEMBER(sound_enable_w);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
- DECLARE_WRITE8_MEMBER(flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_READ8_MEMBER(input_port_0_r);
DECLARE_READ8_MEMBER(intrepid_colorram_mirror_r);
- DECLARE_WRITE8_MEMBER(intrepid_graphics_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(intrepid_graphics_bank_w);
DECLARE_READ8_MEMBER(rtriv_question_r);
diff --git a/src/mame/includes/thoop2.h b/src/mame/includes/thoop2.h
index 9f74d370e6d..390caf7a7f9 100644
--- a/src/mame/includes/thoop2.h
+++ b/src/mame/includes/thoop2.h
@@ -5,6 +5,8 @@
#pragma once
+#include "machine/74259.h"
+
class thoop2_state : public driver_device
{
public:
@@ -14,14 +16,20 @@ public:
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_outlatch(*this, "outlatch"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
m_spriteram(*this, "spriteram"),
m_shareram(*this, "shareram")
{ }
- DECLARE_WRITE16_MEMBER(OKIM6295_bankswitch_w);
- DECLARE_WRITE16_MEMBER(coin_w);
+ DECLARE_WRITE8_MEMBER(OKIM6295_bankswitch_w);
+ DECLARE_WRITE8_MEMBER(coin_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
+
DECLARE_WRITE16_MEMBER(vram_w);
DECLARE_WRITE8_MEMBER(shareram_w);
DECLARE_READ8_MEMBER(shareram_r);
@@ -45,6 +53,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_outlatch;
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_vregs;
diff --git a/src/mame/includes/timelimt.h b/src/mame/includes/timelimt.h
index 69a07aecae2..634e2ea7ea4 100644
--- a/src/mame/includes/timelimt.h
+++ b/src/mame/includes/timelimt.h
@@ -29,8 +29,9 @@ public:
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
- DECLARE_WRITE8_MEMBER(nmi_enable_w);
- DECLARE_WRITE8_MEMBER(sound_reset_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_w);
+
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(bg_videoram_w);
DECLARE_WRITE8_MEMBER(scroll_x_lsb_w);
@@ -41,7 +42,6 @@ public:
TILE_GET_INFO_MEMBER(get_fg_tile_info);
virtual void machine_start() override;
- virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(timelimt);
diff --git a/src/mame/includes/timeplt.h b/src/mame/includes/timeplt.h
index b15ea3610ce..358831bed6d 100644
--- a/src/mame/includes/timeplt.h
+++ b/src/mame/includes/timeplt.h
@@ -6,6 +6,7 @@
***************************************************************************/
+#include "machine/74259.h"
#include "sound/tc8830f.h"
#include "screen.h"
@@ -19,6 +20,7 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
+ m_mainlatch(*this, "mainlatch"),
m_colorram(*this, "colorram"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
@@ -30,6 +32,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_mainlatch;
/* memory pointers */
required_shared_ptr<uint8_t> m_colorram;
@@ -45,15 +48,17 @@ public:
bool m_video_enable;
/* common */
- DECLARE_WRITE8_MEMBER(coincounter_w);
+ DECLARE_WRITE8_MEMBER(mainlatch_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_READ8_MEMBER(scanline_r);
/* all but psurge */
- DECLARE_WRITE8_MEMBER(nmi_enable_w);
- DECLARE_WRITE8_MEMBER(video_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(video_enable_w);
/* psurge */
DECLARE_READ8_MEMBER(psurge_protection_r);
diff --git a/src/mame/includes/toaplan1.h b/src/mame/includes/toaplan1.h
index b45ed1633c4..c9455017136 100644
--- a/src/mame/includes/toaplan1.h
+++ b/src/mame/includes/toaplan1.h
@@ -30,7 +30,6 @@ public:
optional_shared_ptr<uint8_t> m_sharedram;
- int m_coin_count; /* coin count increments on startup ? , so don't count it */
int m_intenable;
/* Demon world */
@@ -175,7 +174,10 @@ public:
{
}
- DECLARE_WRITE8_MEMBER(rallybik_coin_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w);
DECLARE_READ16_MEMBER(rallybik_tileram16_r);
DECLARE_VIDEO_START(rallybik);
uint32_t screen_update_rallybik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/tp84.h b/src/mame/includes/tp84.h
index 4ccd006730b..f902bbf680c 100644
--- a/src/mame/includes/tp84.h
+++ b/src/mame/includes/tp84.h
@@ -7,10 +7,9 @@ class tp84_state : public driver_device
public:
tp84_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "cpu1"),
m_audiocpu(*this, "audiocpu"),
m_palette_bank(*this, "palette_bank"),
- m_flipscreen_x(*this, "flipscreen_x"),
- m_flipscreen_y(*this, "flipscreen_y"),
m_scroll_x(*this, "scroll_x"),
m_scroll_y(*this, "scroll_y"),
m_bg_videoram(*this, "bg_videoram"),
@@ -22,10 +21,9 @@ public:
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
+ required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_shared_ptr<uint8_t> m_palette_bank;
- required_shared_ptr<uint8_t> m_flipscreen_x;
- required_shared_ptr<uint8_t> m_flipscreen_y;
required_shared_ptr<uint8_t> m_scroll_x;
required_shared_ptr<uint8_t> m_scroll_y;
required_shared_ptr<uint8_t> m_bg_videoram;
@@ -38,8 +36,17 @@ public:
required_device<palette_device> m_palette;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
+ bool m_flipscreen_x;
+ bool m_flipscreen_y;
- uint8_t m_sub_irq_mask;
+ bool m_irq_enable;
+ bool m_sub_irq_mask;
+
+ DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_READ8_MEMBER(tp84_sh_timer_r);
DECLARE_WRITE8_MEMBER(tp84_filter_w);
DECLARE_WRITE8_MEMBER(tp84_sh_irqtrigger_w);
@@ -52,6 +59,7 @@ public:
virtual void video_start() override;
DECLARE_PALETTE_INIT(tp84);
uint32_t screen_update_tp84(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ INTERRUPT_GEN_MEMBER(main_vblank_irq);
INTERRUPT_GEN_MEMBER(sub_vblank_irq);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
};
diff --git a/src/mame/includes/triplhnt.h b/src/mame/includes/triplhnt.h
index 325c5fedd4d..55b5b6de9c3 100644
--- a/src/mame/includes/triplhnt.h
+++ b/src/mame/includes/triplhnt.h
@@ -6,6 +6,7 @@
*************************************************************************/
+#include "machine/74259.h"
#include "machine/watchdog.h"
#include "sound/discrete.h"
#include "sound/samples.h"
@@ -31,6 +32,7 @@ public:
triplhnt_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_latch(*this, "latch"),
m_watchdog(*this, "watchdog"),
m_discrete(*this, "discrete"),
m_samples(*this, "samples"),
@@ -44,6 +46,7 @@ public:
m_code_ram(*this, "code_ram") { }
required_device<cpu_device> m_maincpu;
+ required_device<f9334_device> m_latch;
required_device<watchdog_timer_device> m_watchdog;
required_device<discrete_device> m_discrete;
required_device<samples_device> m_samples;
@@ -59,7 +62,6 @@ public:
uint8_t m_cmos[16];
uint8_t m_da_latch;
- uint8_t m_misc_flags;
uint8_t m_cmos_latch;
uint8_t m_hit_code;
int m_sprite_zoom;
@@ -68,7 +70,13 @@ public:
emu_timer *m_hit_timer;
tilemap_t* m_bg_tilemap;
- DECLARE_WRITE8_MEMBER(misc_w);
+ DECLARE_WRITE_LINE_MEMBER(ram_2_w);
+ DECLARE_WRITE_LINE_MEMBER(sprite_zoom_w);
+ DECLARE_WRITE_LINE_MEMBER(sprite_bank_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(tape_control_w);
+
DECLARE_READ8_MEMBER(cmos_r);
DECLARE_READ8_MEMBER(input_port_4_r);
DECLARE_READ8_MEMBER(misc_r);
@@ -82,7 +90,6 @@ public:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void set_collision(int code);
- void update_misc(address_space &space, int offset);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
diff --git a/src/mame/includes/tsamurai.h b/src/mame/includes/tsamurai.h
index aa0c024e940..4b30a28ac30 100644
--- a/src/mame/includes/tsamurai.h
+++ b/src/mame/includes/tsamurai.h
@@ -56,15 +56,16 @@ public:
int m_key_count; //debug only
// common
- DECLARE_WRITE8_MEMBER(nmi_enable_w);
- DECLARE_WRITE8_MEMBER(coincounter_w);
- DECLARE_WRITE8_MEMBER(textbank1_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_enable_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(textbank1_w);
DECLARE_WRITE8_MEMBER(fg_videoram_w);
// tsamurai and m660 specific
DECLARE_WRITE8_MEMBER(bg_videoram_w);
DECLARE_WRITE8_MEMBER(fg_colorram_w);
- DECLARE_WRITE8_MEMBER(flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
DECLARE_WRITE8_MEMBER(scrolly_w);
DECLARE_WRITE8_MEMBER(scrollx_w);
DECLARE_WRITE8_MEMBER(bgcolor_w);
@@ -80,7 +81,7 @@ public:
DECLARE_READ8_MEMBER(tsamurai_unknown_d803_r);
// m660 specific
- DECLARE_WRITE8_MEMBER(m660_textbank2_w);
+ DECLARE_WRITE_LINE_MEMBER(textbank2_w);
DECLARE_READ8_MEMBER(m660_unknown_d803_r);
DECLARE_WRITE8_MEMBER(m660_sound_command3_w);
DECLARE_READ8_MEMBER(m660_sound_command3_r);
diff --git a/src/mame/includes/tubep.h b/src/mame/includes/tubep.h
index 1df6d5e6472..e4c9cb5e339 100644
--- a/src/mame/includes/tubep.h
+++ b/src/mame/includes/tubep.h
@@ -59,21 +59,22 @@ public:
uint8_t m_ls175_e8;
uint8_t m_ls377_data;
uint32_t m_page;
- DECLARE_WRITE8_MEMBER(tubep_LS259_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
DECLARE_WRITE8_MEMBER(main_cpu_irq_line_clear_w);
DECLARE_WRITE8_MEMBER(tubep_soundlatch_w);
DECLARE_WRITE8_MEMBER(second_cpu_irq_line_clear_w);
DECLARE_READ8_MEMBER(tubep_soundlatch_r);
DECLARE_READ8_MEMBER(tubep_sound_irq_ack);
DECLARE_WRITE8_MEMBER(tubep_sound_unknown);
- DECLARE_WRITE8_MEMBER(rjammer_LS259_w);
DECLARE_WRITE8_MEMBER(rjammer_soundlatch_w);
DECLARE_READ8_MEMBER(rjammer_soundlatch_r);
DECLARE_WRITE8_MEMBER(rjammer_voice_input_w);
DECLARE_WRITE8_MEMBER(rjammer_voice_intensity_control_w);
DECLARE_WRITE8_MEMBER(tubep_textram_w);
- DECLARE_WRITE8_MEMBER(tubep_background_romselect_w);
- DECLARE_WRITE8_MEMBER(tubep_colorproms_A4_line_w);
+ DECLARE_WRITE_LINE_MEMBER(screen_flip_w);
+ DECLARE_WRITE_LINE_MEMBER(background_romselect_w);
+ DECLARE_WRITE_LINE_MEMBER(colorproms_A4_line_w);
DECLARE_WRITE8_MEMBER(tubep_background_a000_w);
DECLARE_WRITE8_MEMBER(tubep_background_c000_w);
DECLARE_WRITE8_MEMBER(tubep_sprite_control_w);
diff --git a/src/mame/includes/tutankhm.h b/src/mame/includes/tutankhm.h
index d7ac01137db..81a424768e0 100644
--- a/src/mame/includes/tutankhm.h
+++ b/src/mame/includes/tutankhm.h
@@ -1,5 +1,8 @@
// license:BSD-3-Clause
// copyright-holders:Mirko Buffoni
+
+#include "audio/timeplt.h"
+
class tutankhm_state : public driver_device
{
public:
@@ -8,11 +11,12 @@ public:
m_videoram(*this, "videoram"),
m_scroll(*this, "scroll"),
m_maincpu(*this, "maincpu"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_timeplt_audio(*this, "timeplt_audio") { }
/* memory pointers */
required_shared_ptr<uint8_t> m_videoram;
- required_shared_ptr<uint8_t> m_scroll;
+ optional_shared_ptr<uint8_t> m_scroll;
/* video-related */
tilemap_t *m_bg_tilemap;
@@ -26,12 +30,14 @@ public:
/* devices */
required_device<cpu_device> m_maincpu;
required_device<palette_device> m_palette;
- DECLARE_WRITE8_MEMBER(irq_enable_w);
+ optional_device<timeplt_audio_device> m_timeplt_audio;
+ DECLARE_WRITE_LINE_MEMBER(irq_enable_w);
DECLARE_WRITE8_MEMBER(tutankhm_bankselect_w);
- DECLARE_WRITE8_MEMBER(sound_mute_w);
- DECLARE_WRITE8_MEMBER(tutankhm_coin_counter_w);
- DECLARE_WRITE8_MEMBER(tutankhm_flip_screen_x_w);
- DECLARE_WRITE8_MEMBER(tutankhm_flip_screen_y_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
+ DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
+ DECLARE_WRITE8_MEMBER(sound_on_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
DECLARE_MACHINE_START(tutankhm);
DECLARE_MACHINE_RESET(tutankhm);
uint32_t screen_update_tutankhm(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/ultratnk.h b/src/mame/includes/ultratnk.h
index a2c5ce72c2e..1e5936e0256 100644
--- a/src/mame/includes/ultratnk.h
+++ b/src/mame/includes/ultratnk.h
@@ -51,14 +51,12 @@ public:
DECLARE_WRITE8_MEMBER(wram_w);
DECLARE_WRITE8_MEMBER(collision_reset_w);
DECLARE_WRITE8_MEMBER(da_latch_w);
- DECLARE_WRITE8_MEMBER(led_1_w);
- DECLARE_WRITE8_MEMBER(led_2_w);
- DECLARE_WRITE8_MEMBER(lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(led_1_w);
+ DECLARE_WRITE_LINE_MEMBER(led_2_w);
+ DECLARE_WRITE_LINE_MEMBER(lockout_w);
DECLARE_WRITE8_MEMBER(video_ram_w);
DECLARE_CUSTOM_INPUT_MEMBER(get_collision);
DECLARE_CUSTOM_INPUT_MEMBER(get_joystick);
- DECLARE_WRITE8_MEMBER(fire_1_w);
- DECLARE_WRITE8_MEMBER(fire_2_w);
DECLARE_WRITE8_MEMBER(attract_w);
DECLARE_WRITE8_MEMBER(explosion_w);
diff --git a/src/mame/includes/vastar.h b/src/mame/includes/vastar.h
index f5d024931dd..c6885f1c5f4 100644
--- a/src/mame/includes/vastar.h
+++ b/src/mame/includes/vastar.h
@@ -38,9 +38,8 @@ public:
tilemap_t *m_bg2_tilemap;
uint8_t m_nmi_mask;
- DECLARE_WRITE8_MEMBER(hold_cpu2_w);
- DECLARE_WRITE8_MEMBER(flip_screen_w);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(flip_screen_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(fgvideoram_w);
DECLARE_WRITE8_MEMBER(bg1videoram_w);
DECLARE_WRITE8_MEMBER(bg2videoram_w);
diff --git a/src/mame/includes/warpwarp.h b/src/mame/includes/warpwarp.h
index 92ff10e8264..42a43fedb7c 100644
--- a/src/mame/includes/warpwarp.h
+++ b/src/mame/includes/warpwarp.h
@@ -62,7 +62,14 @@ public:
//geebee and navarone
DECLARE_READ8_MEMBER(geebee_in_r);
DECLARE_WRITE8_MEMBER(geebee_out6_w);
- DECLARE_WRITE8_MEMBER(geebee_out7_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_1_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_2_w);
+ DECLARE_WRITE_LINE_MEMBER(lamp_3_w);
+ DECLARE_WRITE_LINE_MEMBER(counter_w);
+ DECLARE_WRITE_LINE_MEMBER(lock_out_w);
+ DECLARE_WRITE_LINE_MEMBER(geebee_bgw_w);
+ DECLARE_WRITE_LINE_MEMBER(ball_on_w);
+ DECLARE_WRITE_LINE_MEMBER(inv_w);
DECLARE_WRITE8_MEMBER(geebee_videoram_w);
virtual void machine_start() override;
diff --git a/src/mame/includes/wiping.h b/src/mame/includes/wiping.h
index 0728804e624..be19ae94cb6 100644
--- a/src/mame/includes/wiping.h
+++ b/src/mame/includes/wiping.h
@@ -28,10 +28,9 @@ public:
uint8_t m_sound_irq_mask;
DECLARE_READ8_MEMBER(ports_r);
- DECLARE_WRITE8_MEMBER(subcpu_reset_w);
- DECLARE_WRITE8_MEMBER(main_irq_mask_w);
- DECLARE_WRITE8_MEMBER(sound_irq_mask_w);
- DECLARE_WRITE8_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(main_irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(sound_irq_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_PALETTE_INIT(wiping);
virtual void machine_start() override;
diff --git a/src/mame/includes/wrally.h b/src/mame/includes/wrally.h
index f8529e52599..cd1a289dca6 100644
--- a/src/mame/includes/wrally.h
+++ b/src/mame/includes/wrally.h
@@ -5,6 +5,8 @@
#pragma once
+#include "machine/74259.h"
+
class wrally_state : public driver_device
{
public:
@@ -13,6 +15,7 @@ public:
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_outlatch(*this, "outlatch"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
m_spriteram(*this, "spriteram"),
@@ -24,10 +27,13 @@ public:
DECLARE_READ8_MEMBER(shareram_r);
DECLARE_WRITE8_MEMBER(shareram_w);
DECLARE_WRITE16_MEMBER(vram_w);
- DECLARE_WRITE16_MEMBER(flipscreen_w);
+ DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_WRITE16_MEMBER(okim6295_bankswitch_w);
- DECLARE_WRITE16_MEMBER(coin_counter_w);
- DECLARE_WRITE16_MEMBER(coin_lockout_w);
+ DECLARE_WRITE8_MEMBER(latch_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w);
+ DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w);
TILE_GET_INFO_MEMBER(get_tile_info_screen0);
TILE_GET_INFO_MEMBER(get_tile_info_screen1);
@@ -44,6 +50,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<ls259_device> m_outlatch;
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_vregs;
diff --git a/src/mame/includes/xorworld.h b/src/mame/includes/xorworld.h
index 1f073192f93..0d5733b855c 100644
--- a/src/mame/includes/xorworld.h
+++ b/src/mame/includes/xorworld.h
@@ -27,9 +27,6 @@ public:
DECLARE_WRITE16_MEMBER(irq2_ack_w);
DECLARE_WRITE16_MEMBER(irq6_ack_w);
DECLARE_WRITE16_MEMBER(videoram_w);
- DECLARE_WRITE16_MEMBER(eeprom_chip_select_w);
- DECLARE_WRITE16_MEMBER(eeprom_serial_clock_w);
- DECLARE_WRITE16_MEMBER(eeprom_data_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
diff --git a/src/mame/machine/asteroid.cpp b/src/mame/machine/asteroid.cpp
index eb236c12fd1..593af819b68 100644
--- a/src/mame/machine/asteroid.cpp
+++ b/src/mame/machine/asteroid.cpp
@@ -105,16 +105,14 @@ WRITE8_MEMBER(asteroid_state::asteroid_bank_switch_w)
}
-WRITE8_MEMBER(asteroid_state::astdelux_bank_switch_w)
+WRITE_LINE_MEMBER(asteroid_state::start1_led_w)
{
- int bank = BIT(data, 7);
- m_ram1->set_entry(bank);
- m_ram2->set_entry(bank);
+ output().set_led_value(0, state ? 0 : 1);
}
-WRITE8_MEMBER(asteroid_state::astdelux_led_w)
+WRITE_LINE_MEMBER(asteroid_state::start2_led_w)
{
- output().set_led_value(offset, (data & 0x80) ? 0 : 1);
+ output().set_led_value(1, state ? 0 : 1);
}
void asteroid_state::machine_start()
diff --git a/src/mame/machine/bsktball.cpp b/src/mame/machine/bsktball.cpp
index 8621570341a..81fe442ad17 100644
--- a/src/mame/machine/bsktball.cpp
+++ b/src/mame/machine/bsktball.cpp
@@ -12,9 +12,10 @@
/***************************************************************************
bsktball_nmion_w
***************************************************************************/
-WRITE8_MEMBER(bsktball_state::bsktball_nmion_w)
+
+WRITE_LINE_MEMBER(bsktball_state::nmion_w)
{
- m_nmi_on = offset & 0x01;
+ m_nmi_on = state;
}
/***************************************************************************
@@ -36,14 +37,14 @@ TIMER_DEVICE_CALLBACK_MEMBER(bsktball_state::bsktball_scanline)
bsktball_ld_w
***************************************************************************/
-WRITE8_MEMBER(bsktball_state::bsktball_ld1_w)
+WRITE_LINE_MEMBER(bsktball_state::ld1_w)
{
- m_ld1 = (offset & 0x01);
+ m_ld1 = state;
}
-WRITE8_MEMBER(bsktball_state::bsktball_ld2_w)
+WRITE_LINE_MEMBER(bsktball_state::ld2_w)
{
- m_ld2 = (offset & 0x01);
+ m_ld2 = state;
}
@@ -156,12 +157,13 @@ READ8_MEMBER(bsktball_state::bsktball_in0_r)
/***************************************************************************
bsktball_led_w
***************************************************************************/
-WRITE8_MEMBER(bsktball_state::bsktball_led1_w)
+
+WRITE_LINE_MEMBER(bsktball_state::led1_w)
{
- output().set_led_value(0, offset & 0x01);
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(bsktball_state::bsktball_led2_w)
+WRITE_LINE_MEMBER(bsktball_state::led2_w)
{
- output().set_led_value(1, offset & 0x01);
+ output().set_led_value(1, state);
}
diff --git a/src/mame/machine/gaelco2.cpp b/src/mame/machine/gaelco2.cpp
index 3b92aed9a81..ef6d67fcc1e 100644
--- a/src/mame/machine/gaelco2.cpp
+++ b/src/mame/machine/gaelco2.cpp
@@ -161,37 +161,40 @@ READ8_MEMBER(gaelco2_state::shareram_r)
***************************************************************************/
-WRITE16_MEMBER(gaelco2_state::gaelco2_coin_w)
+WRITE16_MEMBER(gaelco2_state::wrally2_latch_w)
{
- /* Coin Lockouts */
- machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
- machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
+ m_mainlatch->write_bit(offset >> 2, BIT(data, 0));
+}
- /* Coin Counters */
- machine().bookkeeping().coin_counter_w(0, data & 0x04);
- machine().bookkeeping().coin_counter_w(1, data & 0x08);
+WRITE_LINE_MEMBER(gaelco2_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
}
-WRITE16_MEMBER(gaelco2_state::gaelco2_coin2_w)
+WRITE_LINE_MEMBER(gaelco2_state::coin2_counter_w)
{
- /* coin counters */
- machine().bookkeeping().coin_counter_w(offset & 0x01, data & 0x01);
+ machine().bookkeeping().coin_counter_w(1, state);
}
-WRITE16_MEMBER(wrally2_state::wrally2_coin_w)
+WRITE_LINE_MEMBER(gaelco2_state::coin3_counter_w)
{
- /* coin counters */
- machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
+ machine().bookkeeping().coin_counter_w(2, state);
}
-WRITE16_MEMBER(gaelco2_state::touchgo_coin_w)
+WRITE_LINE_MEMBER(gaelco2_state::coin4_counter_w)
{
- if ((offset >> 2) == 0){
- machine().bookkeeping().coin_counter_w(0, data & 0x01);
- machine().bookkeeping().coin_counter_w(1, data & 0x02);
- machine().bookkeeping().coin_counter_w(2, data & 0x04);
- machine().bookkeeping().coin_counter_w(3, data & 0x08);
- }
+ machine().bookkeeping().coin_counter_w(3, state);
+}
+
+WRITE16_MEMBER(gaelco2_state::alighunt_coin_w)
+{
+ /* Coin Lockouts */
+ machine().bookkeeping().coin_lockout_w(0, ~data & 0x01);
+ machine().bookkeeping().coin_lockout_w(1, ~data & 0x02);
+
+ /* Coin Counters */
+ machine().bookkeeping().coin_counter_w(0, data & 0x04);
+ machine().bookkeeping().coin_counter_w(1, data & 0x08);
}
/***************************************************************************
@@ -248,59 +251,25 @@ CUSTOM_INPUT_MEMBER(wrally2_state::wrally2_analog_bit_r)
}
-WRITE16_MEMBER(wrally2_state::wrally2_adc_clk)
+WRITE_LINE_MEMBER(wrally2_state::wrally2_adc_clk)
{
/* a zero/one combo is written here to clock the next analog port bit */
- if (ACCESSING_BITS_0_7)
+ if (!state)
{
- if (!(data & 0xff))
- {
- m_analog_ports[0] <<= 1;
- m_analog_ports[1] <<= 1;
- }
+ m_analog_ports[0] <<= 1;
+ m_analog_ports[1] <<= 1;
}
- else
- logerror("%06X:analog_port_clock_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
}
-WRITE16_MEMBER(wrally2_state::wrally2_adc_cs)
+WRITE_LINE_MEMBER(wrally2_state::wrally2_adc_cs)
{
/* a zero is written here to read the analog ports, and a one is written when finished */
- if (ACCESSING_BITS_0_7)
+ if (!state)
{
- if (!(data & 0xff))
- {
- m_analog_ports[0] = m_analog0->read();
- m_analog_ports[1] = m_analog1->read();
- }
+ m_analog_ports[0] = m_analog0->read();
+ m_analog_ports[1] = m_analog1->read();
}
- else
- logerror("%06X:analog_port_latch_w(%02X) = %08X & %08X\n", space.device().safe_pc(), offset, data, mem_mask);
-}
-
-/***************************************************************************
-
- EEPROM (93C66)
-
-***************************************************************************/
-
-WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_cs_w)
-{
- /* bit 0 is CS (active low) */
- m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_sk_w)
-{
- /* bit 0 is SK (active high) */
- m_eeprom->clk_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-WRITE16_MEMBER(gaelco2_state::gaelco2_eeprom_data_w)
-{
- /* bit 0 is EEPROM data (DIN) */
- m_eeprom->di_write(data & 0x01);
}
/***************************************************************************
diff --git a/src/mame/machine/gaelco3d.cpp b/src/mame/machine/gaelco3d.cpp
index 331c0a62774..315cba86b4c 100644
--- a/src/mame/machine/gaelco3d.cpp
+++ b/src/mame/machine/gaelco3d.cpp
@@ -343,12 +343,12 @@ TIMER_CALLBACK_MEMBER( gaelco_serial_device::link_cb )
-WRITE8_MEMBER( gaelco_serial_device::irq_enable )
+WRITE_LINE_MEMBER(gaelco_serial_device::irq_enable)
{
- LOGMSG(("???? irq enable %d\n", data));
+ LOGMSG(("???? irq enable %d\n", state));
}
-READ8_MEMBER( gaelco_serial_device::status_r)
+READ8_MEMBER(gaelco_serial_device::status_r)
{
uint8_t ret = 0;
@@ -363,7 +363,7 @@ READ8_MEMBER( gaelco_serial_device::status_r)
return ret;
}
-WRITE8_MEMBER( gaelco_serial_device::data_w)
+WRITE8_MEMBER(gaelco_serial_device::data_w)
{
std::lock_guard<std::mutex> guard(m_mutex);
@@ -394,18 +394,18 @@ READ8_MEMBER( gaelco_serial_device::data_r)
return ret;
}
-WRITE8_MEMBER( gaelco_serial_device::unknown_w)
+WRITE_LINE_MEMBER(gaelco_serial_device::unknown_w)
{
std::lock_guard<std::mutex> guard(m_mutex);
- LOGMSG(("???? unknown serial access %d\n", data));
+ LOGMSG(("???? unknown serial access %d\n", state));
}
-WRITE8_MEMBER( gaelco_serial_device::rts_w )
+WRITE_LINE_MEMBER(gaelco_serial_device::rts_w)
{
std::lock_guard<std::mutex> guard(m_mutex);
- if (data == 0)
+ if (state == 0)
m_out_ptr->stat |= GAELCOSER_STATUS_RTS;
else
{
@@ -415,11 +415,11 @@ WRITE8_MEMBER( gaelco_serial_device::rts_w )
}
}
-WRITE8_MEMBER( gaelco_serial_device::tr_w)
+WRITE_LINE_MEMBER(gaelco_serial_device::tr_w)
{
LOGMSG(("set transmit %d\n", data));
std::lock_guard<std::mutex> guard(m_mutex);
- if ((data & 0x01) != 0)
+ if (state != 0)
m_status |= GAELCOSER_STATUS_SEND;
else
m_status &= ~GAELCOSER_STATUS_SEND;
diff --git a/src/mame/machine/gaelco3d.h b/src/mame/machine/gaelco3d.h
index 85ba9283a3e..7e3b6ee6ad4 100644
--- a/src/mame/machine/gaelco3d.h
+++ b/src/mame/machine/gaelco3d.h
@@ -35,12 +35,12 @@ public:
template <class Object> static devcb_base &set_irq_handler(device_t &device, Object &&cb) { return downcast<gaelco_serial_device &>(device).m_irq_handler.set_callback(std::forward<Object>(cb)); }
- DECLARE_READ8_MEMBER( status_r);
- DECLARE_WRITE8_MEMBER( data_w);
- DECLARE_READ8_MEMBER( data_r);
- DECLARE_WRITE8_MEMBER( rts_w );
+ DECLARE_READ8_MEMBER(status_r);
+ DECLARE_WRITE8_MEMBER(data_w);
+ DECLARE_READ8_MEMBER(data_r);
+ DECLARE_WRITE_LINE_MEMBER(rts_w);
/* Set to 1 during transmit, 0 for receive */
- DECLARE_WRITE8_MEMBER( tr_w);
+ DECLARE_WRITE_LINE_MEMBER(tr_w);
/* Big questions marks, related to serial i/o */
@@ -48,11 +48,11 @@ public:
/* Not used in surfplnt, but in radikalb
* Set at beginning of transfer sub, cleared at end
*/
- DECLARE_WRITE8_MEMBER( unknown_w);
+ DECLARE_WRITE_LINE_MEMBER(unknown_w);
/* only used in radikalb, set at beginning of receive isr, cleared at end */
- DECLARE_WRITE8_MEMBER( irq_enable );
+ DECLARE_WRITE_LINE_MEMBER(irq_enable);
protected:
// device-level overrides
diff --git a/src/mame/machine/lisa.cpp b/src/mame/machine/lisa.cpp
index 0c5b73c0826..a7da401a0a8 100644
--- a/src/mame/machine/lisa.cpp
+++ b/src/mame/machine/lisa.cpp
@@ -1607,61 +1607,67 @@ WRITE16_MEMBER(lisa_state::lisa_w)
void lisa_state::cpu_board_control_access(offs_t offset)
{
- switch ((offset & 0x03ff) << 1)
- {
- case 0x0002: /* Set DIAG1 Latch */
- case 0x0000: /* Reset DIAG1 Latch */
- break;
- case 0x0006: /* Set Diag2 Latch */
- m_diag2 = 1;
- break;
- case 0x0004: /* ReSet Diag2 Latch */
- m_diag2 = 0;
- break;
- case 0x000A: /* SEG1 Context Selection bit SET */
- /*logerror("seg bit 0 set\n");*/
+ m_latch->write_bit(offset >> 1, offset & 1);
+}
+
+WRITE_LINE_MEMBER(lisa_state::diag1_w)
+{
+ // Set/reset DIAG1
+}
+
+WRITE_LINE_MEMBER(lisa_state::diag2_w)
+{
+ // Set/reset DIAG2
+ m_diag2 = state;
+}
+
+WRITE_LINE_MEMBER(lisa_state::seg1_w)
+{
+ // Set/reset SEG1 Context Selection bit
+ //logerror("seg bit 0 %s\n", state ? "set" : "clear");
+ if (state)
m_seg |= 1;
- break;
- case 0x0008: /* SEG1 Context Selection bit RESET */
- /*logerror("seg bit 0 clear\n");*/
+ else
m_seg &= ~1;
- break;
- case 0x000E: /* SEG2 Context Selection bit SET */
- /*logerror("seg bit 1 set\n");*/
+}
+
+WRITE_LINE_MEMBER(lisa_state::seg2_w)
+{
+ // Set/reset SEG2 Context Selection bit
+ //logerror("seg bit 1 %s\n", state ? "set" : "clear");
+ if (state)
m_seg |= 2;
- break;
- case 0x000C: /* SEG2 Context Selection bit RESET */
- /*logerror("seg bit 1 clear\n");*/
+ else
m_seg &= ~2;
- break;
- case 0x0010: /* SETUP register SET */
- logerror("setup SET %s\n", machine().describe_context());
- m_setup = 1;
- break;
- case 0x0012: /* SETUP register RESET */
- logerror("setup UNSET %s\n", machine().describe_context());
- m_setup = 0;
- break;
- case 0x001A: /* Enable Vertical Retrace Interrupt */
- logerror("enable retrace %s\n", machine().describe_context());
- m_VTMSK = 1;
- break;
- case 0x0018: /* Disable Vertical Retrace Interrupt */
- logerror("disable retrace %s\n", machine().describe_context());
- m_VTMSK = 0;
+}
+
+WRITE_LINE_MEMBER(lisa_state::setup_w)
+{
+ // Reset/set SETUP register
+ logerror("setup %s %s\n", state ? "UNSET" : "SET", machine().describe_context());
+ m_setup = !state;
+}
+
+WRITE_LINE_MEMBER(lisa_state::vtmsk_w)
+{
+ // Enable/disable Vertical Retrace Interrupt
+ logerror("%s retrace %s\n", state ? "enable" : "disable", machine().describe_context());
+ m_VTMSK = state;
+ if (!state)
set_VTIR(2);
- break;
- case 0x0016: /* Enable Soft Error Detect. */
- case 0x0014: /* Disable Soft Error Detect. */
- break;
- case 0x001E: /* Enable Hard Error Detect */
- m_test_parity = 1;
- break;
- case 0x001C: /* Disable Hard Error Detect */
- m_test_parity = 0;
+}
+
+WRITE_LINE_MEMBER(lisa_state::sfmsk_w)
+{
+ // Enable/disable Soft Error Detect
+}
+
+WRITE_LINE_MEMBER(lisa_state::hdmsk_w)
+{
+ // Enable/disable Hard Error Detect
+ m_test_parity = state;
+ if (!state)
set_parity_error_pending(0);
- break;
- }
}
READ16_MEMBER(lisa_state::lisa_IO_r)
diff --git a/src/mame/machine/playch10.cpp b/src/mame/machine/playch10.cpp
index aec05bfadb3..bc260701840 100644
--- a/src/mame/machine/playch10.cpp
+++ b/src/mame/machine/playch10.cpp
@@ -82,7 +82,7 @@ CUSTOM_INPUT_MEMBER(playch10_state::pc10_int_detect_r)
return ~m_pc10_int_detect & 1;
}
-WRITE8_MEMBER(playch10_state::pc10_SDCS_w)
+WRITE_LINE_MEMBER(playch10_state::SDCS_w)
{
/*
Hooked to CLR on LS194A - Sheet 2, bottom left.
@@ -90,47 +90,37 @@ WRITE8_MEMBER(playch10_state::pc10_SDCS_w)
It's used to keep the screen black during redraws.
Also hooked to the video sram. Prevent writes.
*/
- m_pc10_sdcs = ~data & 1;
+ m_pc10_sdcs = !state;
}
-WRITE8_MEMBER(playch10_state::pc10_CNTRLMASK_w)
+WRITE_LINE_MEMBER(playch10_state::CNTRLMASK_w)
{
- m_cntrl_mask = ~data & 1;
+ m_cntrl_mask = !state;
}
-WRITE8_MEMBER(playch10_state::pc10_DISPMASK_w)
+WRITE_LINE_MEMBER(playch10_state::DISPMASK_w)
{
- m_pc10_dispmask = ~data & 1;
+ m_pc10_dispmask = !state;
}
-WRITE8_MEMBER(playch10_state::pc10_SOUNDMASK_w)
+WRITE_LINE_MEMBER(playch10_state::SOUNDMASK_w)
{
/* should mute the APU - unimplemented yet */
}
-WRITE8_MEMBER(playch10_state::pc10_NMIENABLE_w)
+WRITE_LINE_MEMBER(playch10_state::NMIENABLE_w)
{
- m_pc10_nmi_enable = data & 1;
+ m_pc10_nmi_enable = state;
}
-WRITE8_MEMBER(playch10_state::pc10_DOGDI_w)
+WRITE_LINE_MEMBER(playch10_state::DOGDI_w)
{
- m_pc10_dog_di = data & 1;
+ m_pc10_dog_di = state;
}
-WRITE8_MEMBER(playch10_state::pc10_GAMERES_w)
+WRITE_LINE_MEMBER(playch10_state::PPURES_w)
{
- machine().device("cart")->execute().set_input_line(INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE );
-}
-
-WRITE8_MEMBER(playch10_state::pc10_GAMESTOP_w)
-{
- machine().device("cart")->execute().set_input_line(INPUT_LINE_HALT, (data & 1) ? CLEAR_LINE : ASSERT_LINE );
-}
-
-WRITE8_MEMBER(playch10_state::pc10_PPURES_w)
-{
- if (data & 1)
+ if (state)
machine().device("ppu")->reset();
}
@@ -141,10 +131,9 @@ READ8_MEMBER(playch10_state::pc10_detectclr_r)
return 0;
}
-WRITE8_MEMBER(playch10_state::pc10_CARTSEL_w)
+WRITE8_MEMBER(playch10_state::CARTSEL_w)
{
- m_cart_sel &= ~(1 << offset);
- m_cart_sel |= (data & 1) << offset;
+ m_cart_sel = data;
}
diff --git a/src/mame/machine/starwars.cpp b/src/mame/machine/starwars.cpp
index 610f11df544..90e4b0d4d31 100644
--- a/src/mame/machine/starwars.cpp
+++ b/src/mame/machine/starwars.cpp
@@ -42,7 +42,6 @@ TIMER_CALLBACK_MEMBER(starwars_state::math_run_clear)
m_math_run = 0;
}
-
/*************************************
*
* X2212 nvram store
@@ -56,48 +55,40 @@ WRITE8_MEMBER(starwars_state::starwars_nstore_w)
machine().device<x2212_device>("x2212")->store(0);
}
+WRITE_LINE_MEMBER(starwars_state::recall_w)
+{
+ machine().device<x2212_device>("x2212")->recall(!state);
+}
+
/*************************************
*
- * Output latch
+ * Coin counters and LEDs
*
*************************************/
-WRITE8_MEMBER(starwars_state::starwars_out_w)
+WRITE_LINE_MEMBER(starwars_state::coin1_counter_w)
{
- switch (offset & 7)
- {
- case 0: /* Coin counter 1 */
- machine().bookkeeping().coin_counter_w(0, data);
- break;
-
- case 1: /* Coin counter 2 */
- machine().bookkeeping().coin_counter_w(1, data);
- break;
-
- case 2: /* LED 3 */
- output().set_led_value(2, ~data & 0x80);
- break;
+ machine().bookkeeping().coin_counter_w(0, state);
+}
- case 3: /* LED 2 */
- output().set_led_value(1, ~data & 0x80);
- break;
+WRITE_LINE_MEMBER(starwars_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
- case 4: /* bank switch */
- membank("bank1")->set_entry((data >> 7) & 1);
- if (m_is_esb)
- membank("bank2")->set_entry((data >> 7) & 1);
- break;
- case 5: /* reset PRNG */
- break;
+WRITE_LINE_MEMBER(starwars_state::led1_w)
+{
+ output().set_led_value(0, !state);
+}
- case 6: /* LED 1 */
- output().set_led_value(0, ~data & 0x80);
- break;
+WRITE_LINE_MEMBER(starwars_state::led2_w)
+{
+ output().set_led_value(1, !state);
+}
- case 7: /* NVRAM array recall */
- machine().device<x2212_device>("x2212")->recall(~data & 0x80);
- break;
- }
+WRITE_LINE_MEMBER(starwars_state::led3_w)
+{
+ output().set_led_value(2, !state);
}
@@ -381,6 +372,10 @@ READ8_MEMBER(starwars_state::starwars_prng_r)
return machine().rand();
}
+WRITE_LINE_MEMBER(starwars_state::prng_reset_w)
+{
+}
+
/*************************************
diff --git a/src/mame/machine/subs.cpp b/src/mame/machine/subs.cpp
index 9df1a1ced33..6182a972e8e 100644
--- a/src/mame/machine/subs.cpp
+++ b/src/mame/machine/subs.cpp
@@ -179,15 +179,15 @@ READ8_MEMBER(subs_state::options_r)
/***************************************************************************
lamp1_w
***************************************************************************/
-WRITE8_MEMBER(subs_state::lamp1_w)
+WRITE_LINE_MEMBER(subs_state::lamp1_w)
{
- output().set_led_value(0,~offset & 1);
+ output().set_led_value(0, !state);
}
/***************************************************************************
lamp2_w
***************************************************************************/
-WRITE8_MEMBER(subs_state::lamp2_w)
+WRITE_LINE_MEMBER(subs_state::lamp2_w)
{
- output().set_led_value(1,~offset & 1);
+ output().set_led_value(1, !state);
}
diff --git a/src/mame/machine/toaplan1.cpp b/src/mame/machine/toaplan1.cpp
index 8e790267d76..406aaab77bf 100644
--- a/src/mame/machine/toaplan1.cpp
+++ b/src/mame/machine/toaplan1.cpp
@@ -182,21 +182,27 @@ WRITE16_MEMBER(toaplan1_state::toaplan1_reset_sound_w)
}
-WRITE8_MEMBER(toaplan1_rallybik_state::rallybik_coin_w)
+WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_counter_1_w)
{
- switch (data) {
- case 0x08: if (m_coin_count) { machine().bookkeeping().coin_counter_w(0, 1); machine().bookkeeping().coin_counter_w(0, 0); } break;
- case 0x09: if (m_coin_count) { machine().bookkeeping().coin_counter_w(2, 1); machine().bookkeeping().coin_counter_w(2, 0); } break;
- case 0x0a: if (m_coin_count) { machine().bookkeeping().coin_counter_w(1, 1); machine().bookkeeping().coin_counter_w(1, 0); } break;
- case 0x0b: if (m_coin_count) { machine().bookkeeping().coin_counter_w(3, 1); machine().bookkeeping().coin_counter_w(3, 0); } break;
- case 0x0c: machine().bookkeeping().coin_lockout_w(0, 1); machine().bookkeeping().coin_lockout_w(2, 1); break;
- case 0x0d: machine().bookkeeping().coin_lockout_w(0, 0); machine().bookkeeping().coin_lockout_w(2, 0); break;
- case 0x0e: machine().bookkeeping().coin_lockout_w(1, 1); machine().bookkeeping().coin_lockout_w(3, 1); break;
- case 0x0f: machine().bookkeeping().coin_lockout_w(1, 0); machine().bookkeeping().coin_lockout_w(3, 0); m_coin_count=1; break;
- default: logerror("PC:%04x Writing unknown data (%04x) to coin count/lockout port\n",space.device().safe_pcbase(),data); break;
- }
+ machine().bookkeeping().coin_counter_w(0, state);
}
+WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_counter_2_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_lockout_1_w)
+{
+ machine().bookkeeping().coin_lockout_w(0, !state);
+}
+
+WRITE_LINE_MEMBER(toaplan1_rallybik_state::coin_lockout_2_w)
+{
+ machine().bookkeeping().coin_lockout_w(1, !state);
+}
+
+
WRITE8_MEMBER(toaplan1_state::toaplan1_coin_w)
{
logerror("Z80 writing %02x to coin control\n",data);
@@ -247,7 +253,6 @@ WRITE_LINE_MEMBER(toaplan1_state::toaplan1_reset_callback)
MACHINE_RESET_MEMBER(toaplan1_state,toaplan1)
{
m_intenable = 0;
- m_coin_count = 0;
machine().bookkeeping().coin_lockout_global_w(0);
}
@@ -276,7 +281,6 @@ MACHINE_RESET_MEMBER(toaplan1_state,vimana)
void toaplan1_state::toaplan1_driver_savestate()
{
save_item(NAME(m_intenable));
- save_item(NAME(m_coin_count));
}
void toaplan1_state::demonwld_driver_savestate()
diff --git a/src/mame/machine/wrally.cpp b/src/mame/machine/wrally.cpp
index 49f8e718982..abc42f636a4 100644
--- a/src/mame/machine/wrally.cpp
+++ b/src/mame/machine/wrally.cpp
@@ -46,9 +46,14 @@ WRITE16_MEMBER(wrally_state::vram_w)
m_pant[(offset & 0x1fff) >> 12]->mark_tile_dirty(((offset << 1) & 0x1fff) >> 2);
}
-WRITE16_MEMBER(wrally_state::flipscreen_w)
+WRITE8_MEMBER(wrally_state::latch_w)
{
- flip_screen_set(data & 0x01);
+ m_outlatch->write_bit(offset >> 3, BIT(data, 0));
+}
+
+WRITE_LINE_MEMBER(wrally_state::flipscreen_w)
+{
+ flip_screen_set(state);
}
WRITE16_MEMBER(wrally_state::okim6295_bankswitch_w)
@@ -58,12 +63,22 @@ WRITE16_MEMBER(wrally_state::okim6295_bankswitch_w)
}
}
-WRITE16_MEMBER(wrally_state::coin_counter_w)
+WRITE_LINE_MEMBER(wrally_state::coin1_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(0, state);
+}
+
+WRITE_LINE_MEMBER(wrally_state::coin2_counter_w)
+{
+ machine().bookkeeping().coin_counter_w(1, state);
+}
+
+WRITE_LINE_MEMBER(wrally_state::coin1_lockout_w)
{
- machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
+ machine().bookkeeping().coin_lockout_w(0, !state);
}
-WRITE16_MEMBER(wrally_state::coin_lockout_w)
+WRITE_LINE_MEMBER(wrally_state::coin2_lockout_w)
{
- machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01);
+ machine().bookkeeping().coin_lockout_w(1, !state);
}
diff --git a/src/mame/video/atarisy1.cpp b/src/mame/video/atarisy1.cpp
index feb9abb05c2..85728f3536c 100644
--- a/src/mame/video/atarisy1.cpp
+++ b/src/mame/video/atarisy1.cpp
@@ -192,10 +192,11 @@ WRITE16_MEMBER( atarisy1_state::atarisy1_bankselect_w )
diff = oldselect ^ newselect;
/* sound CPU reset */
- if (diff & 0x0080)
+ if (BIT(diff, 7))
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (newselect & 0x0080) ? CLEAR_LINE : ASSERT_LINE);
- if (!(newselect & 0x0080)) m_soundcomm->sound_cpu_reset();
+ m_outlatch->clear_w(BIT(newselect, 7));
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, BIT(newselect, 7) ? CLEAR_LINE : ASSERT_LINE);
+ if (!BIT(newselect, 7)) m_soundcomm->sound_cpu_reset();
}
/* if MO or playfield banks change, force a partial update */
diff --git a/src/mame/video/bagman.cpp b/src/mame/video/bagman.cpp
index 7fda8d78c9e..4e3406ce724 100644
--- a/src/mame/video/bagman.cpp
+++ b/src/mame/video/bagman.cpp
@@ -82,9 +82,19 @@ PALETTE_INIT_MEMBER(bagman_state,bagman)
}
}
-WRITE8_MEMBER(bagman_state::flipscreen_w)
+WRITE_LINE_MEMBER(bagman_state::flipscreen_x_w)
{
- flip_screen_set(data & 0x01);
+ flip_screen_x_set(state);
+}
+
+WRITE_LINE_MEMBER(bagman_state::flipscreen_y_w)
+{
+ flip_screen_y_set(state);
+}
+
+WRITE_LINE_MEMBER(bagman_state::video_enable_w)
+{
+ m_video_enable = state;
}
TILE_GET_INFO_MEMBER(bagman_state::get_bg_tile_info)
@@ -134,7 +144,7 @@ void bagman_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t bagman_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(0, cliprect);
- if (*m_video_enable == 0)
+ if (!m_video_enable)
return 0;
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
diff --git a/src/mame/video/bosco.cpp b/src/mame/video/bosco.cpp
index 07f2f428eac..2936382386e 100644
--- a/src/mame/video/bosco.cpp
+++ b/src/mame/video/bosco.cpp
@@ -239,8 +239,8 @@ void bosco_state::draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect, in
int set_a, set_b;
/* two sets of stars controlled by these bits */
- set_a = (m_bosco_starblink[0] & 1);
- set_b = (m_bosco_starblink[1] & 1) | 2;
+ set_a = m_videolatch->q4_r();
+ set_b = m_videolatch->q5_r() | 2;
for (star_cntr = 0;star_cntr < MAX_STARS;star_cntr++)
{
diff --git a/src/mame/video/cclimber.cpp b/src/mame/video/cclimber.cpp
index 407c9d1b271..f2aeac11cfe 100644
--- a/src/mame/video/cclimber.cpp
+++ b/src/mame/video/cclimber.cpp
@@ -13,8 +13,6 @@
#include "includes/cclimber.h"
-#define CCLIMBER_FLIP_X (m_flip_screen[0] & 0x01)
-#define CCLIMBER_FLIP_Y (m_flip_screen[1] & 0x01)
#define CCLIMBER_BG_PEN (0)
#define SWIMMER_SIDE_BG_PEN (0x120)
#define SWIMMER_BG_SPLIT (0x18 * 8)
@@ -338,10 +336,27 @@ WRITE8_MEMBER(cclimber_state::cclimber_colorram_w)
}
-WRITE8_MEMBER(cclimber_state::cannonb_flip_screen_w)
+WRITE_LINE_MEMBER(cclimber_state::flip_screen_x_w)
{
- m_flip_screen[0] = data;
- m_flip_screen[1] = data;
+ m_flip_x = state;
+}
+
+
+WRITE_LINE_MEMBER(cclimber_state::flip_screen_y_w)
+{
+ m_flip_y = state;
+}
+
+
+WRITE_LINE_MEMBER(cclimber_state::sidebg_enable_w)
+{
+ m_swimmer_side_background_enabled = state;
+}
+
+
+WRITE_LINE_MEMBER(cclimber_state::palette_bank_w)
+{
+ m_swimmer_palettebank = state;
}
@@ -376,7 +391,7 @@ TILE_GET_INFO_MEMBER(cclimber_state::swimmer_get_pf_tile_info)
tile_index = tile_index ^ 0x20;
code = ((m_colorram[tile_index] & 0x10) << 4) | m_videoram[tile_index];
- color = ((*m_swimmer_palettebank & 0x01) << 4) | (m_colorram[tile_index] & 0x0f);
+ color = (m_swimmer_palettebank << 4) | (m_colorram[tile_index] & 0x0f);
SET_TILE_INFO_MEMBER(0, code, color, flags);
}
@@ -448,6 +463,9 @@ VIDEO_START_MEMBER(cclimber_state,cclimber)
m_bs_tilemap->set_scroll_rows(1);
m_bs_tilemap->set_transmask(0, 0x01, 0); /* pen 0 is transaprent */
m_bs_tilemap->set_transmask(1, 0x0f, 0); /* all 4 pens are transparent */
+
+ save_item(NAME(m_flip_x));
+ save_item(NAME(m_flip_y));
}
@@ -462,6 +480,11 @@ VIDEO_START_MEMBER(cclimber_state,swimmer)
m_bs_tilemap->set_scroll_rows(1);
m_bs_tilemap->set_transmask(0, 0x01, 0); /* pen 0 is transaprent */
m_bs_tilemap->set_transmask(1, 0xff, 0); /* all 8 pens are transparent */
+
+ save_item(NAME(m_flip_x));
+ save_item(NAME(m_flip_y));
+ save_item(NAME(m_swimmer_side_background_enabled));
+ save_item(NAME(m_swimmer_palettebank));
}
@@ -478,6 +501,9 @@ VIDEO_START_MEMBER(cclimber_state,toprollr)
m_bs_tilemap->set_scroll_rows(1);
m_bs_tilemap->set_transmask(0, 0x01, 0); /* pen 0 is transaprent */
m_bs_tilemap->set_transmask(1, 0x0f, 0); /* all 4 pens are transparent */
+
+ save_item(NAME(m_flip_x));
+ save_item(NAME(m_flip_y));
}
@@ -486,8 +512,8 @@ void cclimber_state::draw_playfield(screen_device &screen, bitmap_ind16 &bitmap,
int i;
m_pf_tilemap->mark_all_dirty();
- m_pf_tilemap->set_flip((CCLIMBER_FLIP_X ? TILEMAP_FLIPX : 0) |
- (CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0));
+ m_pf_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) |
+ (m_flip_y ? TILEMAP_FLIPY : 0));
for (i = 0; i < 32; i++)
m_pf_tilemap->set_scrolly(i, m_column_scroll[i]);
@@ -511,7 +537,7 @@ void cclimber_state::cclimber_draw_bigsprite(screen_device &screen, bitmap_ind16
m_bs_tilemap->mark_all_dirty();
m_bs_tilemap->set_flip((bigsprite_flip_x ? TILEMAP_FLIPX : 0) |
- (CCLIMBER_FLIP_Y ^ bigsprite_flip_y ? TILEMAP_FLIPY : 0));
+ (m_flip_y ^ bigsprite_flip_y ? TILEMAP_FLIPY : 0));
m_bs_tilemap->set_scrollx(0, x);
m_bs_tilemap->set_scrolly(0, y);
@@ -527,7 +553,7 @@ void cclimber_state::toprollr_draw_bigsprite(screen_device &screen, bitmap_ind16
m_bs_tilemap->mark_all_dirty();
- m_bs_tilemap->set_flip(CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0);
+ m_bs_tilemap->set_flip(m_flip_y ? TILEMAP_FLIPY : 0);
m_bs_tilemap->set_scrollx(0, x);
m_bs_tilemap->set_scrolly(0, y);
@@ -559,13 +585,13 @@ void cclimber_state::cclimber_draw_sprites(bitmap_ind16 &bitmap, const rectangle
int flipx = m_spriteram[offs + 0] & 0x40;
int flipy = m_spriteram[offs + 0] & 0x80;
- if (CCLIMBER_FLIP_X)
+ if (m_flip_x)
{
x = 242 - x;
flipx = !flipx;
}
- if (CCLIMBER_FLIP_Y)
+ if (m_flip_y)
{
y = 240 - y;
flipy = !flipy;
@@ -596,13 +622,13 @@ void cclimber_state::toprollr_draw_sprites(bitmap_ind16 &bitmap, const rectangle
int flipx = m_spriteram[offs + 0] & 0x40;
int flipy = m_spriteram[offs + 0] & 0x80;
- if (CCLIMBER_FLIP_X)
+ if (m_flip_x)
{
x = 240 - x;
flipx = !flipx;
}
- if (CCLIMBER_FLIP_Y)
+ if (m_flip_y)
{
y = 240 - y;
flipy = !flipy;
@@ -627,19 +653,19 @@ void cclimber_state::swimmer_draw_sprites(bitmap_ind16 &bitmap, const rectangle
int code = ((m_spriteram[offs + 1] & 0x10) << 2) |
(m_spriteram[offs + 0] & 0x3f);
- int color = ((*m_swimmer_palettebank & 0x01) << 4) |
+ int color = (m_swimmer_palettebank << 4) |
(m_spriteram[offs + 1] & 0x0f);
int flipx = m_spriteram[offs + 0] & 0x40;
int flipy = m_spriteram[offs + 0] & 0x80;
- if (CCLIMBER_FLIP_X)
+ if (m_flip_x)
{
x = 240 - x;
flipx = !flipx;
}
- if (CCLIMBER_FLIP_Y)
+ if (m_flip_y)
{
y = 240 - y;
flipy = !flipy;
@@ -681,7 +707,7 @@ uint32_t cclimber_state::screen_update_yamato(screen_device &screen, bitmap_ind1
for (i = 0; i < 0x100; i++)
{
int j;
- pen_t pen = YAMATO_SKY_PEN_BASE + sky_rom[(CCLIMBER_FLIP_X ? 0x80 : 0) + (i >> 1)];
+ pen_t pen = YAMATO_SKY_PEN_BASE + sky_rom[(m_flip_x ? 0x80 : 0) + (i >> 1)];
for (j = 0; j < 0x100; j++)
bitmap.pix16(j, (i - 8) & 0xff) = pen;
@@ -711,9 +737,9 @@ uint32_t cclimber_state::screen_update_swimmer(screen_device &screen, bitmap_ind
{
swimmer_set_background_pen();
- if (*m_swimmer_side_background_enabled & 0x01)
+ if (m_swimmer_side_background_enabled)
{
- if (CCLIMBER_FLIP_X)
+ if (m_flip_x)
{
rectangle split_rect_left(0, 0xff - SWIMMER_BG_SPLIT, 0, 0xff);
rectangle split_rect_right(0x100 - SWIMMER_BG_SPLIT, 0xff, 0, 0xff);
@@ -768,8 +794,8 @@ uint32_t cclimber_state::screen_update_toprollr(screen_device &screen, bitmap_in
bitmap.fill(CCLIMBER_BG_PEN, cliprect);
m_toproller_bg_tilemap->set_scrollx(0, m_toprollr_bg_videoram[0]);
- m_toproller_bg_tilemap->set_flip((CCLIMBER_FLIP_X ? TILEMAP_FLIPX : 0) |
- (CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0));
+ m_toproller_bg_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) |
+ (m_flip_y ? TILEMAP_FLIPY : 0));
m_toproller_bg_tilemap->mark_all_dirty();
m_toproller_bg_tilemap->draw(screen, bitmap, scroll_area_clip, 0, 0);
@@ -788,8 +814,8 @@ uint32_t cclimber_state::screen_update_toprollr(screen_device &screen, bitmap_in
}
m_pf_tilemap->mark_all_dirty();
- m_pf_tilemap->set_flip((CCLIMBER_FLIP_X ? TILEMAP_FLIPX : 0) |
- (CCLIMBER_FLIP_Y ? TILEMAP_FLIPY : 0));
+ m_pf_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) |
+ (m_flip_y ? TILEMAP_FLIPY : 0));
m_pf_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
diff --git a/src/mame/video/centiped.cpp b/src/mame/video/centiped.cpp
index 725b704badf..0918e4df3bd 100644
--- a/src/mame/video/centiped.cpp
+++ b/src/mame/video/centiped.cpp
@@ -150,9 +150,9 @@ WRITE8_MEMBER(centiped_state::centiped_videoram_w)
*
*************************************/
-WRITE8_MEMBER(centiped_state::centiped_flip_screen_w)
+WRITE_LINE_MEMBER(centiped_state::flip_screen_w)
{
- m_flipscreen = data >> 7;
+ m_flipscreen = state;
}
diff --git a/src/mame/video/champbas.cpp b/src/mame/video/champbas.cpp
index 062a861ade6..9faf3776944 100644
--- a/src/mame/video/champbas.cpp
+++ b/src/mame/video/champbas.cpp
@@ -183,26 +183,21 @@ WRITE8_MEMBER(champbas_state::tilemap_w)
m_bg_tilemap->mark_tile_dirty(offset & 0x3ff);
}
-WRITE8_MEMBER(champbas_state::gfxbank_w)
+WRITE_LINE_MEMBER(champbas_state::gfxbank_w)
{
- data &= 1;
-
- if (m_gfx_bank != data)
- {
- m_gfx_bank = data;
- m_bg_tilemap->mark_all_dirty();
- }
+ m_gfx_bank = state;
+ m_bg_tilemap->mark_all_dirty();
}
-WRITE8_MEMBER(champbas_state::palette_bank_w)
+WRITE_LINE_MEMBER(champbas_state::palette_bank_w)
{
- m_palette_bank = data & 1;
+ m_palette_bank = state;
m_bg_tilemap->set_palette_offset(m_palette_bank << 8);
}
-WRITE8_MEMBER(champbas_state::flipscreen_w)
+WRITE_LINE_MEMBER(champbas_state::flipscreen_w)
{
- flip_screen_set(~data & 1);
+ flip_screen_set(!state);
}
diff --git a/src/mame/video/cinemat.cpp b/src/mame/video/cinemat.cpp
index fb90344d2ea..56d5de46629 100644
--- a/src/mame/video/cinemat.cpp
+++ b/src/mame/video/cinemat.cpp
@@ -69,7 +69,7 @@ void cinemat_state::cinemat_vector_callback(int16_t sx, int16_t sy, int16_t ex,
*
*************************************/
-WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w)
+WRITE_LINE_MEMBER(cinemat_state::vector_control_w)
{
int r, g, b, i;
cpu_device *cpu = m_maincpu;
@@ -78,13 +78,13 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w)
{
case COLOR_BILEVEL:
/* color is either bright or dim, selected by the value sent to the port */
- m_vector_color = (data & 1) ? rgb_t(0x80,0x80,0x80) : rgb_t(0xff,0xff,0xff);
+ m_vector_color = state ? rgb_t(0x80,0x80,0x80) : rgb_t(0xff,0xff,0xff);
break;
case COLOR_16LEVEL:
/* on the rising edge of the data value, latch bits 0-3 of the */
/* X register as the intensity */
- if (data != m_last_control && data)
+ if (state)
{
int xval = cpu->state_int(ccpu_cpu_device::CCPU_X) & 0x0f;
i = (xval + 1) * 255 / 16;
@@ -95,7 +95,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w)
case COLOR_64LEVEL:
/* on the rising edge of the data value, latch bits 2-7 of the */
/* X register as the intensity */
- if (data != m_last_control && data)
+ if (state)
{
int xval = cpu->state_int(ccpu_cpu_device::CCPU_X);
xval = (~xval >> 2) & 0x3f;
@@ -107,7 +107,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w)
case COLOR_RGB:
/* on the rising edge of the data value, latch the X register */
/* as 4-4-4 BGR values */
- if (data != m_last_control && data)
+ if (state)
{
int xval = cpu->state_int(ccpu_cpu_device::CCPU_X);
r = (~xval >> 0) & 0x0f;
@@ -126,7 +126,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w)
/* they will be restored on the rising edge; this is to simulate the fact */
/* that the Rockola color hardware did not overwrite the beam X,Y position */
/* on an IV instruction if data == 0 here */
- if (data != m_last_control && !data)
+ if (!state)
{
m_qb3_lastx = cpu->state_int(ccpu_cpu_device::CCPU_X);
m_qb3_lasty = cpu->state_int(ccpu_cpu_device::CCPU_Y);
@@ -134,7 +134,7 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w)
/* on the rising edge of the data value, latch the Y register */
/* as 2-3-3 BGR values */
- if (data != m_last_control && data)
+ if (state)
{
int yval = cpu->state_int(ccpu_cpu_device::CCPU_Y);
r = (~yval >> 0) & 0x07;
@@ -152,9 +152,6 @@ WRITE8_MEMBER(cinemat_state::cinemat_vector_control_w)
}
break;
}
-
- /* remember the last value */
- m_last_control = data;
}
diff --git a/src/mame/video/cloak.cpp b/src/mame/video/cloak.cpp
index 969ab3ba1bd..b4b0fae8e82 100644
--- a/src/mame/video/cloak.cpp
+++ b/src/mame/video/cloak.cpp
@@ -146,9 +146,9 @@ WRITE8_MEMBER(cloak_state::cloak_videoram_w)
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(cloak_state::cloak_flipscreen_w)
+WRITE_LINE_MEMBER(cloak_state::cocktail_w)
{
- flip_screen_set(data & 0x80);
+ flip_screen_set(state);
}
TILE_GET_INFO_MEMBER(cloak_state::get_bg_tile_info)
diff --git a/src/mame/video/cloud9.cpp b/src/mame/video/cloud9.cpp
index 69161e88745..69049a30f44 100644
--- a/src/mame/video/cloud9.cpp
+++ b/src/mame/video/cloud9.cpp
@@ -41,7 +41,6 @@ void cloud9_state::video_start()
/* register for savestates */
save_pointer(NAME(m_videoram.get()), 0x8000);
- save_item(NAME(m_video_control));
save_item(NAME(m_bitmode_addr));
}
@@ -49,20 +48,6 @@ void cloud9_state::video_start()
/*************************************
*
- * Video control registers
- *
- *************************************/
-
-WRITE8_MEMBER(cloud9_state::cloud9_video_control_w)
-{
- /* only D7 matters */
- m_video_control[offset] = (data >> 7) & 1;
-}
-
-
-
-/*************************************
- *
* Palette RAM accesses
*
*************************************/
@@ -127,8 +112,8 @@ inline void cloud9_state::cloud9_write_vram( uint16_t addr, uint8_t data, uint8_
Bit 0 = PIXA
*/
promaddr |= bitmd << 7;
- promaddr |= m_video_control[4] << 6;
- promaddr |= m_video_control[6] << 5;
+ promaddr |= m_videolatch->q4_r() << 6;
+ promaddr |= m_videolatch->q6_r() << 5;
promaddr |= ((addr & 0xf000) != 0x4000) << 4;
promaddr |= ((addr & 0x3800) == 0x0000) << 3;
promaddr |= ((addr & 0x0600) == 0x0600) << 2;
@@ -159,11 +144,11 @@ inline void cloud9_state::cloud9_write_vram( uint16_t addr, uint8_t data, uint8_
inline void cloud9_state::bitmode_autoinc( )
{
/* auto increment in the x-direction if it's enabled */
- if (!m_video_control[0]) /* /AX */
+ if (!m_videolatch->q0_r()) /* /AX */
m_bitmode_addr[0]++;
/* auto increment in the y-direction if it's enabled */
- if (!m_video_control[1]) /* /AY */
+ if (!m_videolatch->q1_r()) /* /AY */
m_bitmode_addr[1]++;
}
@@ -239,7 +224,7 @@ WRITE8_MEMBER(cloud9_state::cloud9_bitmode_addr_w)
uint32_t cloud9_state::screen_update_cloud9(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint8_t *spriteaddr = m_spriteram;
- int flip = m_video_control[5] ? 0xff : 0x00; /* PLAYER2 */
+ int flip = m_videolatch->q5_r() ? 0xff : 0x00; /* PLAYER2 */
pen_t black = m_palette->black_pen();
int x, y, offs;
@@ -304,7 +289,7 @@ uint32_t cloud9_state::screen_update_cloud9(screen_device &screen, bitmap_ind16
pix = mopix | 0x10;
/* the high bit is the bank select */
- pix |= m_video_control[7] << 5;
+ pix |= m_videolatch->q7_r() << 5;
/* store the pixel value and also a priority value based on the topmost bit */
dst[x] = pix;
diff --git a/src/mame/video/clshroad.cpp b/src/mame/video/clshroad.cpp
index b9acf71c862..6e6e14b5730 100644
--- a/src/mame/video/clshroad.cpp
+++ b/src/mame/video/clshroad.cpp
@@ -36,9 +36,9 @@
#include "includes/clshroad.h"
-WRITE8_MEMBER(clshroad_state::flipscreen_w)
+WRITE_LINE_MEMBER(clshroad_state::flipscreen_w)
{
- flip_screen_set(data & 1 );
+ flip_screen_set(state);
}
diff --git a/src/mame/video/crgolf.cpp b/src/mame/video/crgolf.cpp
index b3cb5b2f574..5f1572eba0a 100644
--- a/src/mame/video/crgolf.cpp
+++ b/src/mame/video/crgolf.cpp
@@ -67,7 +67,7 @@ PALETTE_INIT_MEMBER(crgolf_state, mastrglf)
uint32_t crgolf_state::screen_update_crgolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int flip = *m_screen_flip & 1;
+ int flip = m_screen_flip;
offs_t offs;
@@ -99,10 +99,10 @@ uint32_t crgolf_state::screen_update_crgolf(screen_device &screen, bitmap_ind16
uint8_t data_b = 0;
uint8_t data_a = 0;
- if (~*m_screena_enable & 1)
+ if (!m_screena_enable)
data_a = ((data_a0 & 0x80) >> 7) | ((data_a1 & 0x80) >> 6) | ((data_a2 & 0x80) >> 5);
- if (~*m_screenb_enable & 1)
+ if (!m_screenb_enable)
data_b = ((data_b0 & 0x80) >> 7) | ((data_b1 & 0x80) >> 6) | ((data_b2 & 0x80) >> 5);
/* screen A has priority over B */
@@ -112,7 +112,7 @@ uint32_t crgolf_state::screen_update_crgolf(screen_device &screen, bitmap_ind16
color = data_b | 0x08;
/* add HI bit if enabled */
- if (*m_color_select)
+ if (m_color_select)
color = color | 0x10;
bitmap.pix16(y, x) = color;
diff --git a/src/mame/video/digdug.cpp b/src/mame/video/digdug.cpp
index 9c105830094..bfd31abe377 100644
--- a/src/mame/video/digdug.cpp
+++ b/src/mame/video/digdug.cpp
@@ -172,61 +172,35 @@ WRITE8_MEMBER( digdug_state::digdug_videoram_w )
m_fg_tilemap->mark_tile_dirty(offset & 0x3ff);
}
-WRITE8_MEMBER( digdug_state::digdug_PORT_w )
+WRITE8_MEMBER(digdug_state::bg_select_w)
{
- switch (offset)
+ // select background picture
+ if (m_bg_select != (data & 0x03))
{
- case 0: /* select background picture */
- case 1:
- {
- int shift = offset;
- int mask = 1 << shift;
-
- if ((m_bg_select & mask) != ((data & 1) << shift))
- {
- m_bg_select = (m_bg_select & ~mask) | ((data & 1) << shift);
- m_bg_tilemap->mark_all_dirty();
- }
- }
- break;
-
- case 2: /* select alpha layer color mode (see tx_get_tile_info) */
- if (m_tx_color_mode != (data & 1))
- {
- m_tx_color_mode = data & 1;
- m_fg_tilemap->mark_all_dirty();
- }
- break;
-
- case 3: /* "disable" background (see bg_get_tile_info) */
- if (m_bg_disable != (data & 1))
- {
- m_bg_disable = data & 1;
- m_bg_tilemap->mark_all_dirty();
- }
- break;
+ m_bg_select = data & 0x03;
+ m_bg_tilemap->mark_all_dirty();
+ }
- case 4: /* background color bank */
- case 5:
- {
- int shift = offset;
- int mask = 1 << shift;
-
- if ((m_bg_color_bank & mask) != ((data & 1) << shift))
- {
- m_bg_color_bank = (m_bg_color_bank & ~mask) | ((data & 1) << shift);
- m_bg_tilemap->mark_all_dirty();
- }
- }
- break;
+ // background color bank
+ if (m_bg_color_bank != (data & 0x30))
+ {
+ m_bg_color_bank = data & 0x30;
+ m_bg_tilemap->mark_all_dirty();
+ }
+}
- case 6: /* n.c. */
- break;
+WRITE_LINE_MEMBER(digdug_state::tx_color_mode_w)
+{
+ // select alpha layer color mode (see tx_get_tile_info)
+ m_tx_color_mode = state;
+ m_fg_tilemap->mark_all_dirty();
+}
- case 7: /* FLIP */
- flip_screen_set(data & 1);
- break;
- }
+WRITE_LINE_MEMBER(digdug_state::bg_disable_w)
+{
+ // "disable" background (see bg_get_tile_info)
+ m_bg_disable = state;
+ m_bg_tilemap->mark_all_dirty();
}
diff --git a/src/mame/video/dynax.cpp b/src/mame/video/dynax.cpp
index ec62f409503..2819be2245b 100644
--- a/src/mame/video/dynax.cpp
+++ b/src/mame/video/dynax.cpp
@@ -203,42 +203,52 @@ WRITE8_MEMBER(dynax_state::dynax_blit_palette67_w)
/* Layers Palettes (High Bits) */
-WRITE8_MEMBER(dynax_state::dynax_blit_palbank_w)
+WRITE_LINE_MEMBER(dynax_state::blit_palbank_w)
{
- m_blit_palbank = data;
- LOG(("PB=%02X ", data));
+ m_blit_palbank = state;
+ LOG(("PB=%d ", state));
}
-WRITE8_MEMBER(dynax_state::dynax_blit2_palbank_w)
+WRITE_LINE_MEMBER(dynax_state::blit2_palbank_w)
{
- m_blit2_palbank = data;
- LOG(("PB'=%02X ", data));
+ m_blit2_palbank = state;
+ LOG(("PB'=%d ", state));
+}
+
+WRITE8_MEMBER(dynax_state::hnoridur_palbank_w)
+{
+ m_palbank = data & 0x0f;
+ m_blit_palbank = data; // ???
}
/* Which half of the layers to write to (interleaved games only) */
-WRITE8_MEMBER(dynax_state::hanamai_layer_half_w)
+WRITE_LINE_MEMBER(dynax_state::layer_half_w)
{
- m_hanamai_layer_half = (~data) & 1;
- LOG(("H=%02X ", data));
+ m_hanamai_layer_half = !state;
+ LOG(("H=%d ", state));
}
/* Write to both halves of the layers (interleaved games only) */
-WRITE8_MEMBER(dynax_state::hnoridur_layer_half2_w)
+WRITE_LINE_MEMBER(dynax_state::layer_half2_w)
{
- m_hnoridur_layer_half2 = (~data) & 1;
- LOG(("H2=%02X ", data));
+ m_hnoridur_layer_half2 = !state;
+ LOG(("H2=%d ", state));
}
-WRITE8_MEMBER(dynax_state::mjdialq2_blit_dest_w)
+WRITE_LINE_MEMBER(dynax_state::mjdialq2_blit_dest0_w)
{
- int mask = (2 >> offset); /* 1 or 2 */
-
- m_blit_dest &= ~mask;
+ m_blit_dest &= ~1;
+ if (!state)
+ m_blit_dest |= 1;
+}
- if (~data & 1)
- m_blit_dest |= mask;
+WRITE_LINE_MEMBER(dynax_state::mjdialq2_blit_dest1_w)
+{
+ m_blit_dest &= ~2;
+ if (!state)
+ m_blit_dest |= 2;
}
@@ -256,22 +266,25 @@ WRITE8_MEMBER(dynax_state::jantouki_layer_enable_w)
m_layer_enable |= 1;
}
-WRITE8_MEMBER(dynax_state::mjdialq2_layer_enable_w)
+WRITE_LINE_MEMBER(dynax_state::mjdialq2_layer0_enable_w)
{
- int mask = (2 >> offset); /* 1 or 2 */
+ m_layer_enable &= ~1;
+ if (!state)
+ m_layer_enable |= 1;
+}
- m_layer_enable &= ~mask;
- if (~data & 1)
- m_layer_enable |= mask;
+WRITE_LINE_MEMBER(dynax_state::mjdialq2_layer1_enable_w)
+{
+ m_layer_enable &= ~2;
+ if (!state)
+ m_layer_enable |= 2;
}
-WRITE8_MEMBER(dynax_state::dynax_flipscreen_w)
+WRITE_LINE_MEMBER(dynax_state::flipscreen_w)
{
- m_flipscreen = data & 1;
- if (data & ~1)
- logerror("CPU#0 PC %06X: Warning, flip screen <- %02X\n", space.device().safe_pc(), data);
- LOG(("F=%02X ", data));
+ m_flipscreen = state;
+ LOG(("F=%d ", state));
}
@@ -747,12 +760,12 @@ WRITE8_MEMBER(dynax_state::cdracula_blitter_rev2_w)
if (data & 0xf0)
{
- hanamai_layer_half_w(space, offset, 0, mem_mask);
+ layer_half_w(0);
dynax_blit_dest_w(space, offset, data >> 4, mem_mask);
}
if (data & 0x0f)
{
- hanamai_layer_half_w(space, offset, 1, mem_mask);
+ layer_half_w(1);
dynax_blit_dest_w(space, offset, data & 0x0f, mem_mask);
}
break;
diff --git a/src/mame/video/equites.cpp b/src/mame/video/equites.cpp
index 954b11d2540..5e2b5cd62b0 100644
--- a/src/mame/video/equites.cpp
+++ b/src/mame/video/equites.cpp
@@ -187,28 +187,16 @@ WRITE16_MEMBER(equites_state::equites_scrollreg_w)
m_bg_tilemap->set_scrollx(0, data >> 8);
}
-WRITE16_MEMBER(equites_state::splndrbt_selchar_w)
+WRITE_LINE_MEMBER(equites_state::splndrbt_selchar_w)
{
- // data bit is A16 (offset)
- data = (offset == 0) ? 0 : 1;
-
// select active char map
- if (m_fg_char_bank != data)
- {
- m_fg_char_bank = data;
- m_fg_tilemap->mark_all_dirty();
- }
-}
-
-WRITE16_MEMBER(equites_state::equites_flipw_w)
-{
- // data bit is A16 (offset)
- flip_screen_set(offset != 0);
+ m_fg_char_bank = (state == 0) ? 0 : 1;
+ m_fg_tilemap->mark_all_dirty();
}
-WRITE8_MEMBER(equites_state::equites_flipb_w)
+WRITE_LINE_MEMBER(equites_state::flip_screen_w)
{
- flip_screen_set(data);
+ flip_screen_set(state);
}
WRITE16_MEMBER(equites_state::splndrbt_bg_scrollx_w)
diff --git a/src/mame/video/fastfred.cpp b/src/mame/video/fastfred.cpp
index 8bb2eec1f3b..c32c7eefe1c 100644
--- a/src/mame/video/fastfred.cpp
+++ b/src/mame/video/fastfred.cpp
@@ -142,9 +142,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_attributes_w )
}
-WRITE8_MEMBER(fastfred_state::fastfred_charbank1_w )
+WRITE_LINE_MEMBER(fastfred_state::charbank1_w)
{
- uint16_t new_data = (m_charbank & 0x0200) | ((data & 0x01) << 8);
+ uint16_t new_data = (m_charbank & 0x0200) | (state << 8);
if (new_data != m_charbank)
{
@@ -154,9 +154,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_charbank1_w )
}
}
-WRITE8_MEMBER(fastfred_state::fastfred_charbank2_w )
+WRITE_LINE_MEMBER(fastfred_state::charbank2_w)
{
- uint16_t new_data = (m_charbank & 0x0100) | ((data & 0x01) << 9);
+ uint16_t new_data = (m_charbank & 0x0100) | (state << 9);
if (new_data != m_charbank)
{
@@ -167,9 +167,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_charbank2_w )
}
-WRITE8_MEMBER(fastfred_state::fastfred_colorbank1_w )
+WRITE_LINE_MEMBER(fastfred_state::colorbank1_w)
{
- uint8_t new_data = (m_colorbank & 0x10) | ((data & 0x01) << 3);
+ uint8_t new_data = (m_colorbank & 0x10) | (state << 3);
if (new_data != m_colorbank)
{
@@ -179,9 +179,9 @@ WRITE8_MEMBER(fastfred_state::fastfred_colorbank1_w )
}
}
-WRITE8_MEMBER(fastfred_state::fastfred_colorbank2_w )
+WRITE_LINE_MEMBER(fastfred_state::colorbank2_w)
{
- uint8_t new_data = (m_colorbank & 0x08) | ((data & 0x01) << 4);
+ uint8_t new_data = (m_colorbank & 0x08) | (state << 4);
if (new_data != m_colorbank)
{
@@ -193,24 +193,18 @@ WRITE8_MEMBER(fastfred_state::fastfred_colorbank2_w )
-WRITE8_MEMBER(fastfred_state::fastfred_flip_screen_x_w )
+WRITE_LINE_MEMBER(fastfred_state::flip_screen_x_w)
{
- if (flip_screen_x() != (data & 0x01))
- {
- flip_screen_x_set(data & 0x01);
+ flip_screen_x_set(state);
- m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0));
- }
+ m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0));
}
-WRITE8_MEMBER(fastfred_state::fastfred_flip_screen_y_w )
+WRITE_LINE_MEMBER(fastfred_state::flip_screen_y_w)
{
- if (flip_screen_y() != (data & 0x01))
- {
- flip_screen_y_set(data & 0x01);
+ flip_screen_y_set(state);
- m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0));
- }
+ m_bg_tilemap->set_flip((flip_screen_x() ? TILEMAP_FLIPX : 0) | (flip_screen_y() ? TILEMAP_FLIPY : 0));
}
@@ -322,11 +316,11 @@ WRITE8_MEMBER(fastfred_state::imago_fg_videoram_w )
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(fastfred_state::imago_charbank_w )
+WRITE_LINE_MEMBER(fastfred_state::imago_charbank_w)
{
- if( m_charbank != data )
+ if (m_charbank != state)
{
- m_charbank = data;
+ m_charbank = state;
m_bg_tilemap->mark_all_dirty();
}
}
diff --git a/src/mame/video/funkybee.cpp b/src/mame/video/funkybee.cpp
index 3d00eca424f..08bdaf7f3a4 100644
--- a/src/mame/video/funkybee.cpp
+++ b/src/mame/video/funkybee.cpp
@@ -54,13 +54,10 @@ WRITE8_MEMBER(funkybee_state::funkybee_colorram_w)
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(funkybee_state::funkybee_gfx_bank_w)
+WRITE_LINE_MEMBER(funkybee_state::gfx_bank_w)
{
- if (m_gfx_bank != (data & 0x01))
- {
- m_gfx_bank = data & 0x01;
- machine().tilemap().mark_all_dirty();
- }
+ m_gfx_bank = state;
+ machine().tilemap().mark_all_dirty();
}
WRITE8_MEMBER(funkybee_state::funkybee_scroll_w)
@@ -68,9 +65,9 @@ WRITE8_MEMBER(funkybee_state::funkybee_scroll_w)
m_bg_tilemap->set_scrollx(0, flip_screen() ? -data : data);
}
-WRITE8_MEMBER(funkybee_state::funkybee_flipscreen_w)
+WRITE_LINE_MEMBER(funkybee_state::flipscreen_w)
{
- flip_screen_set(data & 0x01);
+ flip_screen_set(state);
}
TILE_GET_INFO_MEMBER(funkybee_state::get_bg_tile_info)
diff --git a/src/mame/video/galaga.cpp b/src/mame/video/galaga.cpp
index e8f0ea17c9d..e86c2350e98 100644
--- a/src/mame/video/galaga.cpp
+++ b/src/mame/video/galaga.cpp
@@ -455,9 +455,9 @@ WRITE8_MEMBER(galaga_state::galaga_videoram_w)
m_fg_tilemap->mark_tile_dirty(offset & 0x3ff);
}
-WRITE8_MEMBER(galaga_state::gatsbee_bank_w)
+WRITE_LINE_MEMBER(galaga_state::gatsbee_bank_w)
{
- m_galaga_gfxbank = data & 0x1;
+ m_galaga_gfxbank = state;
m_fg_tilemap->mark_all_dirty();
}
@@ -524,14 +524,14 @@ void galaga_state::draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect )
/* draw the stars */
/* $a005 controls the stars ON/OFF */
- if ( (m_galaga_starcontrol[5] & 1) == 1 )
+ if ( m_videolatch->q5_r() == 1 )
{
int star_cntr;
int set_a, set_b;
/* two sets of stars controlled by these bits */
- set_a = (m_galaga_starcontrol[3] & 1);
- set_b = (m_galaga_starcontrol[4] & 1) | 2;
+ set_a = m_videolatch->q3_r();
+ set_b = m_videolatch->q4_r() | 2;
for (star_cntr = 0;star_cntr < MAX_STARS ;star_cntr++)
{
@@ -571,9 +571,9 @@ WRITE_LINE_MEMBER(galaga_state::screen_vblank_galaga)
int s0,s1,s2;
static const int speeds[8] = { -1, -2, -3, 0, 3, 2, 1, 0 };
- s0 = (m_galaga_starcontrol[0] & 1);
- s1 = (m_galaga_starcontrol[1] & 1);
- s2 = (m_galaga_starcontrol[2] & 1);
+ s0 = m_videolatch->q0_r();
+ s1 = m_videolatch->q1_r();
+ s2 = m_videolatch->q2_r();
m_stars_scrollx += speeds[s0 + s1*2 + s2*4];
}
diff --git a/src/mame/video/gladiatr.cpp b/src/mame/video/gladiatr.cpp
index 2d206ac5975..02c2ab24fcc 100644
--- a/src/mame/video/gladiatr.cpp
+++ b/src/mame/video/gladiatr.cpp
@@ -127,14 +127,19 @@ WRITE8_MEMBER(gladiatr_state_base::paletteram_w)
}
+WRITE_LINE_MEMBER(gladiatr_state_base::spritebuffer_w)
+{
+ m_sprite_buffer = state;
+}
+
WRITE8_MEMBER(gladiatr_state_base::spritebuffer_w)
{
- m_sprite_buffer = data & 1;
+ m_sprite_buffer = data & 0x01;
}
-WRITE8_MEMBER(gladiatr_state::gladiatr_spritebank_w)
+WRITE_LINE_MEMBER(gladiatr_state::spritebank_w)
{
- m_sprite_bank = (data & 1) ? 4 : 2;
+ m_sprite_bank = state ? 4 : 2;
}
diff --git a/src/mame/video/gng.cpp b/src/mame/video/gng.cpp
index de8c68c131c..4dc7a7d08b7 100644
--- a/src/mame/video/gng.cpp
+++ b/src/mame/video/gng.cpp
@@ -88,9 +88,9 @@ WRITE8_MEMBER(gng_state::gng_bgscrolly_w)
}
-WRITE8_MEMBER(gng_state::gng_flipscreen_w)
+WRITE_LINE_MEMBER(gng_state::flipscreen_w)
{
- flip_screen_set(~data & 1);
+ flip_screen_set(!state);
}
diff --git a/src/mame/video/gomoku.cpp b/src/mame/video/gomoku.cpp
index a879f48cdaf..5ab4917fc5a 100644
--- a/src/mame/video/gomoku.cpp
+++ b/src/mame/video/gomoku.cpp
@@ -86,14 +86,14 @@ WRITE8_MEMBER(gomoku_state::gomoku_bgram_w)
m_bgram[offset] = data;
}
-WRITE8_MEMBER(gomoku_state::gomoku_flipscreen_w)
+WRITE_LINE_MEMBER(gomoku_state::flipscreen_w)
{
- m_flipscreen = (data & 0x02) ? 0 : 1;
+ m_flipscreen = state ? 0 : 1;
}
-WRITE8_MEMBER(gomoku_state::gomoku_bg_dispsw_w)
+WRITE_LINE_MEMBER(gomoku_state::bg_dispsw_w)
{
- m_bg_dispsw = (data & 0x02) ? 0 : 1;
+ m_bg_dispsw = state ? 0 : 1;
}
diff --git a/src/mame/video/gridlee.cpp b/src/mame/video/gridlee.cpp
index 9f064431b56..07e5cac92b7 100644
--- a/src/mame/video/gridlee.cpp
+++ b/src/mame/video/gridlee.cpp
@@ -82,9 +82,9 @@ void gridlee_state::video_start()
*
*************************************/
-WRITE8_MEMBER(gridlee_state::gridlee_cocktail_flip_w)
+WRITE_LINE_MEMBER(gridlee_state::cocktail_flip_w)
{
- m_cocktail_flip = data & 1;
+ m_cocktail_flip = state;
}
diff --git a/src/mame/video/gyruss.cpp b/src/mame/video/gyruss.cpp
index 9659660dbaa..d20ff38ef5a 100644
--- a/src/mame/video/gyruss.cpp
+++ b/src/mame/video/gyruss.cpp
@@ -116,6 +116,8 @@ void gyruss_state::video_start()
m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(gyruss_state::gyruss_get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_tilemap->set_transmask(0, 0x00, 0); /* opaque */
m_tilemap->set_transmask(1, 0x0f, 0); /* transparent */
+
+ save_item(NAME(m_flipscreen));
}
@@ -127,6 +129,12 @@ READ8_MEMBER(gyruss_state::gyruss_scanline_r)
}
+WRITE_LINE_MEMBER(gyruss_state::flipscreen_w)
+{
+ m_flipscreen = state;
+}
+
+
void gyruss_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{
int offs;
@@ -152,7 +160,7 @@ uint32_t gyruss_state::screen_update_gyruss(screen_device &screen, bitmap_ind16
if (cliprect.min_y == screen.visible_area().min_y)
{
machine().tilemap().mark_all_dirty();
- machine().tilemap().set_flip_all((*m_flipscreen & 0x01) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0);
+ machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0);
}
m_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
diff --git a/src/mame/video/holeland.cpp b/src/mame/video/holeland.cpp
index 599b89a8262..bff53ad15e8 100644
--- a/src/mame/video/holeland.cpp
+++ b/src/mame/video/holeland.cpp
@@ -62,7 +62,6 @@ VIDEO_START_MEMBER(holeland_state,holeland)
m_bg_tilemap->set_transmask(0, 0xff, 0x00); /* split type 0 is totally transparent in front half */
m_bg_tilemap->set_transmask(1, 0x01, 0xfe); /* split type 1 has pen 0? transparent in front half */
- save_item(NAME(m_po));
save_item(NAME(m_palette_offset));
}
@@ -70,7 +69,6 @@ VIDEO_START_MEMBER(holeland_state,crzrally)
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(holeland_state::crzrally_get_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
- save_item(NAME(m_po));
save_item(NAME(m_palette_offset));
}
@@ -88,10 +86,9 @@ WRITE8_MEMBER(holeland_state::colorram_w)
WRITE8_MEMBER(holeland_state::pal_offs_w)
{
- if ((data & 1) != m_po[offset])
+ if ((m_palette_offset >> 4) != (data & 3))
{
- m_po[offset] = data & 1;
- m_palette_offset = (m_po[0] + (m_po[1] << 1)) << 4;
+ m_palette_offset = (data & 3) << 4;
machine().tilemap().mark_all_dirty();
}
}
@@ -101,12 +98,14 @@ WRITE8_MEMBER(holeland_state::scroll_w)
m_bg_tilemap->set_scrollx(0, data);
}
-WRITE8_MEMBER(holeland_state::flipscreen_w)
+WRITE_LINE_MEMBER(holeland_state::flipscreen_x_w)
{
- if (offset)
- flip_screen_y_set(data);
- else
- flip_screen_x_set(data);
+ flip_screen_x_set(state);
+}
+
+WRITE_LINE_MEMBER(holeland_state::flipscreen_y_w)
+{
+ flip_screen_y_set(state);
}
diff --git a/src/mame/video/jedi.cpp b/src/mame/video/jedi.cpp
index 0597d14cd8c..f1bf6f6e138 100644
--- a/src/mame/video/jedi.cpp
+++ b/src/mame/video/jedi.cpp
@@ -35,9 +35,22 @@ VIDEO_START_MEMBER(jedi_state,jedi)
/* register for saving */
save_item(NAME(m_vscroll));
save_item(NAME(m_hscroll));
+ save_item(NAME(m_foreground_bank));
+ save_item(NAME(m_video_off));
}
+WRITE_LINE_MEMBER(jedi_state::foreground_bank_w)
+{
+ m_foreground_bank = state;
+}
+
+
+WRITE_LINE_MEMBER(jedi_state::video_off_w)
+{
+ m_video_off = state;
+}
+
/*************************************
*
@@ -139,7 +152,7 @@ void jedi_state::draw_background_and_text(bitmap_rgb32 &bitmap, const rectangle
uint8_t *prom2 = &memregion("proms")->base()[0x0800 | ((*m_smoothing_table & 0x03) << 8)];
int vscroll = m_vscroll;
int hscroll = m_hscroll;
- int tx_bank = *m_foreground_bank;
+ int tx_bank = m_foreground_bank;
uint8_t *tx_ram = m_foregroundram;
uint8_t *bg_ram = m_backgroundram;
@@ -165,7 +178,7 @@ void jedi_state::draw_background_and_text(bitmap_rgb32 &bitmap, const rectangle
offs_t bg_offs = ((sy & 0x1f0) << 1) | ((sx & 0x1f0) >> 4);
/* get the character codes */
- int tx_code = ((tx_bank & 0x80) << 1) | tx_ram[tx_offs];
+ int tx_code = (tx_bank << 8) | tx_ram[tx_offs];
int bg_bank = bg_ram[0x0400 | bg_offs];
int bg_code = bg_ram[0x0000 | bg_offs] |
((bg_bank & 0x01) << 8) |
@@ -326,7 +339,7 @@ void jedi_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
uint32_t jedi_state::screen_update_jedi(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
/* if no video, clear it all to black */
- if (*m_video_off & 0x01)
+ if (m_video_off)
bitmap.fill(rgb_t::black(), cliprect);
else
{
diff --git a/src/mame/video/kchamp.cpp b/src/mame/video/kchamp.cpp
index dc98cf94070..2e3e608627e 100644
--- a/src/mame/video/kchamp.cpp
+++ b/src/mame/video/kchamp.cpp
@@ -39,9 +39,9 @@ WRITE8_MEMBER(kchamp_state::kchamp_colorram_w)
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(kchamp_state::kchamp_flipscreen_w)
+WRITE_LINE_MEMBER(kchamp_state::flipscreen_w)
{
- flip_screen_set(data & 0x01);
+ flip_screen_set(state);
}
TILE_GET_INFO_MEMBER(kchamp_state::get_bg_tile_info)
diff --git a/src/mame/video/kyugo.cpp b/src/mame/video/kyugo.cpp
index 1eb06d0ff2b..5e3edcac2fb 100644
--- a/src/mame/video/kyugo.cpp
+++ b/src/mame/video/kyugo.cpp
@@ -127,9 +127,9 @@ WRITE8_MEMBER(kyugo_state::kyugo_scroll_y_w)
}
-WRITE8_MEMBER(kyugo_state::kyugo_flipscreen_w)
+WRITE_LINE_MEMBER(kyugo_state::flipscreen_w)
{
- flip_screen_set(data & 0x01);
+ flip_screen_set(state);
}
diff --git a/src/mame/video/ladybug.cpp b/src/mame/video/ladybug.cpp
index 0f72b78192b..3f2baa4148e 100644
--- a/src/mame/video/ladybug.cpp
+++ b/src/mame/video/ladybug.cpp
@@ -110,11 +110,11 @@ WRITE8_MEMBER(ladybug_state::ladybug_colorram_w)
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(ladybug_state::ladybug_flipscreen_w)
+WRITE_LINE_MEMBER(ladybug_state::flipscreen_w)
{
- if (flip_screen() != (data & 0x01))
+ if (flip_screen() != state)
{
- flip_screen_set(data & 0x01);
+ flip_screen_set(state);
machine().tilemap().mark_all_dirty();
}
}
diff --git a/src/mame/video/liberatr.cpp b/src/mame/video/liberatr.cpp
index c5ce2ef9251..c97b1cd66ad 100644
--- a/src/mame/video/liberatr.cpp
+++ b/src/mame/video/liberatr.cpp
@@ -54,6 +54,11 @@ WRITE8_MEMBER( liberatr_state::bitmap_w )
}
+WRITE_LINE_MEMBER(liberatr_state::planet_select_w)
+{
+ m_planet_select = state;
+}
+
/********************************************************************************************
liberatr_init_planet()
@@ -216,6 +221,8 @@ void liberatr_state::video_start()
// for each planet in the planet ROMs
init_planet(m_planets[0], &memregion("gfx1")->base()[0x2000]);
init_planet(m_planets[1], &memregion("gfx1")->base()[0x0000]);
+
+ save_item(NAME(m_planet_select));
}
@@ -249,7 +256,7 @@ void liberatr_state::draw_planet(bitmap_rgb32 &bitmap, pen_t *pens)
{
uint8_t latitude;
- uint8_t *buffer = m_planets[(*m_planet_select >> 4) & 0x01].frames[*m_planet_frame];
+ uint8_t *buffer = m_planets[m_planet_select].frames[*m_planet_frame];
/* for each latitude */
for (latitude = 0; latitude < 0x80; latitude++)
diff --git a/src/mame/video/marineb.cpp b/src/mame/video/marineb.cpp
index 6544fab5b27..6404dd213af 100644
--- a/src/mame/video/marineb.cpp
+++ b/src/mame/video/marineb.cpp
@@ -131,16 +131,16 @@ WRITE8_MEMBER(marineb_state::marineb_palette_bank_1_w)
}
-WRITE8_MEMBER(marineb_state::marineb_flipscreen_x_w)
+WRITE_LINE_MEMBER(marineb_state::flipscreen_x_w)
{
- m_flipscreen_x = data ^ m_marineb_active_low_flipscreen;
+ m_flipscreen_x = state;
m_bg_tilemap->set_flip((m_flipscreen_x ? TILEMAP_FLIPX : 0) | (m_flipscreen_y ? TILEMAP_FLIPY : 0));
}
-WRITE8_MEMBER(marineb_state::marineb_flipscreen_y_w)
+WRITE_LINE_MEMBER(marineb_state::flipscreen_y_w)
{
- m_flipscreen_y = data ^ m_marineb_active_low_flipscreen;
+ m_flipscreen_y = state;
m_bg_tilemap->set_flip((m_flipscreen_x ? TILEMAP_FLIPX : 0) | (m_flipscreen_y ? TILEMAP_FLIPY : 0));
}
diff --git a/src/mame/video/megazone.cpp b/src/mame/video/megazone.cpp
index 5b8585c5f78..7080e948617 100644
--- a/src/mame/video/megazone.cpp
+++ b/src/mame/video/megazone.cpp
@@ -96,9 +96,9 @@ PALETTE_INIT_MEMBER(megazone_state, megazone)
}
}
-WRITE8_MEMBER(megazone_state::megazone_flipscreen_w)
+WRITE_LINE_MEMBER(megazone_state::flipscreen_w)
{
- m_flipscreen = data & 1;
+ m_flipscreen = state;
}
void megazone_state::video_start()
diff --git a/src/mame/video/mermaid.cpp b/src/mame/video/mermaid.cpp
index 77a8aeb3ba2..88ece334dab 100644
--- a/src/mame/video/mermaid.cpp
+++ b/src/mame/video/mermaid.cpp
@@ -79,14 +79,14 @@ WRITE8_MEMBER(mermaid_state::mermaid_colorram_w)
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(mermaid_state::mermaid_flip_screen_x_w)
+WRITE_LINE_MEMBER(mermaid_state::flip_screen_x_w)
{
- flip_screen_x_set(data & 0x01);
+ flip_screen_x_set(state);
}
-WRITE8_MEMBER(mermaid_state::mermaid_flip_screen_y_w)
+WRITE_LINE_MEMBER(mermaid_state::flip_screen_y_w)
{
- flip_screen_y_set(data & 0x01);
+ flip_screen_y_set(state);
}
WRITE8_MEMBER(mermaid_state::mermaid_bg_scroll_w)
@@ -101,14 +101,14 @@ WRITE8_MEMBER(mermaid_state::mermaid_fg_scroll_w)
m_fg_tilemap->set_scrolly(offset, data);
}
-WRITE8_MEMBER(mermaid_state::rougien_gfxbankswitch1_w)
+WRITE_LINE_MEMBER(mermaid_state::rougien_gfxbankswitch1_w)
{
- m_rougien_gfxbank1 = data & 0x01;
+ m_rougien_gfxbank1 = state;
}
-WRITE8_MEMBER(mermaid_state::rougien_gfxbankswitch2_w)
+WRITE_LINE_MEMBER(mermaid_state::rougien_gfxbankswitch2_w)
{
- m_rougien_gfxbank2 = data & 0x01;
+ m_rougien_gfxbank2 = state;
}
READ8_MEMBER(mermaid_state::mermaid_collision_r)
diff --git a/src/mame/video/mouser.cpp b/src/mame/video/mouser.cpp
index c3659383ec6..f716464d970 100644
--- a/src/mame/video/mouser.cpp
+++ b/src/mame/video/mouser.cpp
@@ -47,14 +47,14 @@ PALETTE_INIT_MEMBER(mouser_state, mouser)
}
}
-WRITE8_MEMBER(mouser_state::mouser_flip_screen_x_w)
+WRITE_LINE_MEMBER(mouser_state::flip_screen_x_w)
{
- flip_screen_x_set(~data & 1);
+ flip_screen_x_set(!state);
}
-WRITE8_MEMBER(mouser_state::mouser_flip_screen_y_w)
+WRITE_LINE_MEMBER(mouser_state::flip_screen_y_w)
{
- flip_screen_y_set(~data & 1);
+ flip_screen_y_set(!state);
}
uint32_t mouser_state::screen_update_mouser(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
diff --git a/src/mame/video/nemesis.cpp b/src/mame/video/nemesis.cpp
index 71dc0f8ca42..aebbf5f7078 100644
--- a/src/mame/video/nemesis.cpp
+++ b/src/mame/video/nemesis.cpp
@@ -95,38 +95,26 @@ TILE_GET_INFO_MEMBER(nemesis_state::get_fg_tile_info)
}
-WRITE16_MEMBER(nemesis_state::nemesis_gfx_flipx_word_w)
+WRITE_LINE_MEMBER(nemesis_state::gfx_flipx_w)
{
- if (ACCESSING_BITS_0_7)
- {
- m_flipscreen = data & 0x01;
+ m_flipscreen = state;
- if (data & 0x01)
- m_tilemap_flip |= TILEMAP_FLIPX;
- else
- m_tilemap_flip &= ~TILEMAP_FLIPX;
-
- machine().tilemap().set_flip_all(m_tilemap_flip);
- }
+ if (state)
+ m_tilemap_flip |= TILEMAP_FLIPX;
+ else
+ m_tilemap_flip &= ~TILEMAP_FLIPX;
- if (ACCESSING_BITS_8_15)
- {
- if (data & 0x0100)
- m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
- }
+ machine().tilemap().set_flip_all(m_tilemap_flip);
}
-WRITE16_MEMBER(nemesis_state::nemesis_gfx_flipy_word_w)
+WRITE_LINE_MEMBER(nemesis_state::gfx_flipy_w)
{
- if (ACCESSING_BITS_0_7)
- {
- if (data & 0x01)
- m_tilemap_flip |= TILEMAP_FLIPY;
- else
- m_tilemap_flip &= ~TILEMAP_FLIPY;
+ if (state)
+ m_tilemap_flip |= TILEMAP_FLIPY;
+ else
+ m_tilemap_flip &= ~TILEMAP_FLIPY;
- machine().tilemap().set_flip_all(m_tilemap_flip);
- }
+ machine().tilemap().set_flip_all(m_tilemap_flip);
}
diff --git a/src/mame/video/pacman.cpp b/src/mame/video/pacman.cpp
index badb887ece7..e46ae8cbb75 100644
--- a/src/mame/video/pacman.cpp
+++ b/src/mame/video/pacman.cpp
@@ -195,9 +195,9 @@ WRITE8_MEMBER(pacman_state::pacman_colorram_w)
m_bg_tilemap->mark_tile_dirty(offset );
}
-WRITE8_MEMBER(pacman_state::pacman_flipscreen_w)
+WRITE_LINE_MEMBER(pacman_state::flipscreen_w)
{
- m_flipscreen = data & 1;
+ m_flipscreen = state;
m_bg_tilemap->set_flip(m_flipscreen * ( TILEMAP_FLIPX + TILEMAP_FLIPY ) );
}
@@ -325,32 +325,23 @@ VIDEO_START_MEMBER(pacman_state,pengo)
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(pacman_state::pacman_get_tile_info),this), tilemap_mapper_delegate(FUNC(pacman_state::pacman_scan_rows),this), 8, 8, 36, 28 );
}
-WRITE8_MEMBER(pacman_state::pengo_palettebank_w)
+WRITE_LINE_MEMBER(pacman_state::pengo_palettebank_w)
{
- if (m_palettebank != data)
- {
- m_palettebank = data;
- m_bg_tilemap->mark_all_dirty();
- }
+ m_palettebank = state;
+ m_bg_tilemap->mark_all_dirty();
}
-WRITE8_MEMBER(pacman_state::pengo_colortablebank_w)
+WRITE_LINE_MEMBER(pacman_state::pengo_colortablebank_w)
{
- if (m_colortablebank != data)
- {
- m_colortablebank = data;
- m_bg_tilemap->mark_all_dirty();
- }
+ m_colortablebank = state;
+ m_bg_tilemap->mark_all_dirty();
}
-WRITE8_MEMBER(pacman_state::pengo_gfxbank_w)
+WRITE_LINE_MEMBER(pacman_state::pengo_gfxbank_w)
{
- if (m_charbank != (data & 1))
- {
- m_spritebank = data & 1;
- m_charbank = data & 1;
- m_bg_tilemap->mark_all_dirty();
- }
+ m_spritebank = state;
+ m_charbank = state;
+ m_bg_tilemap->mark_all_dirty();
}
@@ -565,18 +556,15 @@ WRITE8_MEMBER(pacman_state::jrpacman_videoram_w)
jrpacman_mark_tile_dirty(offset);
}
-WRITE8_MEMBER(pacman_state::jrpacman_charbank_w)
+WRITE_LINE_MEMBER(pacman_state::jrpacman_charbank_w)
{
- if (m_charbank != (data & 1))
- {
- m_charbank = data & 1;
- m_bg_tilemap->mark_all_dirty();
- }
+ m_charbank = state;
+ m_bg_tilemap->mark_all_dirty();
}
-WRITE8_MEMBER(pacman_state::jrpacman_spritebank_w)
+WRITE_LINE_MEMBER(pacman_state::jrpacman_spritebank_w)
{
- m_spritebank = (data & 1);
+ m_spritebank = state;
}
WRITE8_MEMBER(pacman_state::jrpacman_scroll_w)
@@ -588,7 +576,7 @@ WRITE8_MEMBER(pacman_state::jrpacman_scroll_w)
}
}
-WRITE8_MEMBER(pacman_state::jrpacman_bgpriority_w)
+WRITE_LINE_MEMBER(pacman_state::jrpacman_bgpriority_w)
{
- m_bgpriority = (data & 1);
+ m_bgpriority = state;
}
diff --git a/src/mame/video/pandoras.cpp b/src/mame/video/pandoras.cpp
index 1159ac9223b..9464063fef0 100644
--- a/src/mame/video/pandoras.cpp
+++ b/src/mame/video/pandoras.cpp
@@ -133,9 +133,9 @@ WRITE8_MEMBER(pandoras_state::pandoras_scrolly_w)
m_layer0->set_scrolly(0, data);
}
-WRITE8_MEMBER(pandoras_state::pandoras_flipscreen_w)
+WRITE_LINE_MEMBER(pandoras_state::flipscreen_w)
{
- m_flipscreen = data;
+ m_flipscreen = state;
machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
}
diff --git a/src/mame/video/pooyan.cpp b/src/mame/video/pooyan.cpp
index c79e28f71e8..0e1210a5849 100644
--- a/src/mame/video/pooyan.cpp
+++ b/src/mame/video/pooyan.cpp
@@ -140,9 +140,9 @@ WRITE8_MEMBER(pooyan_state::colorram_w)
}
-WRITE8_MEMBER(pooyan_state::flipscreen_w)
+WRITE_LINE_MEMBER(pooyan_state::flipscreen_w)
{
- flip_screen_set(~data & 0x01);
+ flip_screen_set(!state);
}
diff --git a/src/mame/video/rallyx.cpp b/src/mame/video/rallyx.cpp
index df2e839dc11..b41a5e74a4a 100644
--- a/src/mame/video/rallyx.cpp
+++ b/src/mame/video/rallyx.cpp
@@ -406,9 +406,9 @@ WRITE8_MEMBER(rallyx_state::rallyx_scrolly_w)
m_bg_tilemap->set_scrolly(0, data);
}
-WRITE8_MEMBER(rallyx_state::tactcian_starson_w)
+WRITE_LINE_MEMBER(rallyx_state::stars_enable_w)
{
- m_stars_enable = data & 1;
+ m_stars_enable = state;
}
diff --git a/src/mame/video/rocnrope.cpp b/src/mame/video/rocnrope.cpp
index 05cfcd391ea..4e532a67dc8 100644
--- a/src/mame/video/rocnrope.cpp
+++ b/src/mame/video/rocnrope.cpp
@@ -94,13 +94,9 @@ WRITE8_MEMBER(rocnrope_state::rocnrope_colorram_w)
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(rocnrope_state::rocnrope_flipscreen_w)
+WRITE_LINE_MEMBER(rocnrope_state::flip_screen_w)
{
- if (flip_screen() != (~data & 0x01))
- {
- flip_screen_set(~data & 0x01);
- machine().tilemap().mark_all_dirty();
- }
+ flip_screen_set(!state);
}
TILE_GET_INFO_MEMBER(rocnrope_state::get_bg_tile_info)
diff --git a/src/mame/video/rollrace.cpp b/src/mame/video/rollrace.cpp
index 56247f3f755..4a365cccb98 100644
--- a/src/mame/video/rollrace.cpp
+++ b/src/mame/video/rollrace.cpp
@@ -92,10 +92,15 @@ PALETTE_INIT_MEMBER(rollrace_state, rollrace)
}
}
-WRITE8_MEMBER(rollrace_state::charbank_w)
+WRITE_LINE_MEMBER(rollrace_state::charbank_0_w)
{
- m_charbank[offset&1] = data;
- m_chrbank = m_charbank[0] | (m_charbank[1] << 1) ;
+ m_chrbank = state | (m_chrbank & 2);
+ m_fg_tilemap->mark_all_dirty();
+}
+
+WRITE_LINE_MEMBER(rollrace_state::charbank_1_w)
+{
+ m_chrbank = (m_chrbank & 1) | (state << 1);
m_fg_tilemap->mark_all_dirty();
}
@@ -104,9 +109,9 @@ WRITE8_MEMBER(rollrace_state::bkgpen_w)
m_bkgpen = data;
}
-WRITE8_MEMBER(rollrace_state::spritebank_w)
+WRITE_LINE_MEMBER(rollrace_state::spritebank_w)
{
- m_spritebank = data;
+ m_spritebank = state;
}
WRITE8_MEMBER(rollrace_state::backgroundpage_w)
@@ -128,9 +133,9 @@ WRITE8_MEMBER(rollrace_state::flipy_w)
// bit 2: cleared at night stage in attract, unknown purpose
}
-WRITE8_MEMBER(rollrace_state::flipx_w)
+WRITE_LINE_MEMBER(rollrace_state::flipx_w)
{
- m_flipx = data & 0x01;
+ m_flipx = state;
m_fg_tilemap->set_flip(m_flipx ? TILEMAP_FLIPX|TILEMAP_FLIPY : 0);
}
diff --git a/src/mame/video/sauro.cpp b/src/mame/video/sauro.cpp
index ceb33472191..c6b7965e3e8 100644
--- a/src/mame/video/sauro.cpp
+++ b/src/mame/video/sauro.cpp
@@ -65,9 +65,21 @@ TILE_GET_INFO_MEMBER(sauro_state::get_tile_info_fg)
static const int scroll2_map[8] = {2, 1, 4, 3, 6, 5, 0, 7};
static const int scroll2_map_flip[8] = {0, 7, 2, 1, 4, 3, 6, 5};
-WRITE8_MEMBER(sauro_state::sauro_palette_bank_w)
+WRITE_LINE_MEMBER(sauro_state::sauro_palette_bank0_w)
{
- m_palette_bank = (data & 0x03) << 4;
+ if (state)
+ m_palette_bank |= 0x10;
+ else
+ m_palette_bank &= ~0x10;
+ machine().tilemap().mark_all_dirty();
+}
+
+WRITE_LINE_MEMBER(sauro_state::sauro_palette_bank1_w)
+{
+ if (state)
+ m_palette_bank |= 0x20;
+ else
+ m_palette_bank &= ~0x20;
machine().tilemap().mark_all_dirty();
}
diff --git a/src/mame/video/skydiver.cpp b/src/mame/video/skydiver.cpp
index 4e58f9c735d..6b5c1dcd49b 100644
--- a/src/mame/video/skydiver.cpp
+++ b/src/mame/video/skydiver.cpp
@@ -13,21 +13,6 @@
void skydiver_state::machine_reset()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- /* reset all latches */
- start_lamp_1_w(space, 0, 0);
- start_lamp_2_w(space, 0, 0);
- lamp_s_w(space, 0, 0);
- lamp_k_w(space, 0, 0);
- lamp_y_w(space, 0, 0);
- lamp_d_w(space, 0, 0);
- output().set_value("lampi", 0);
- output().set_value("lampv", 0);
- output().set_value("lampe", 0);
- output().set_value("lampr", 0);
- width_w(space, 0, 0);
- coin_lockout_w(space, 0, 0);
}
@@ -84,79 +69,73 @@ WRITE8_MEMBER(skydiver_state::wram_w)
}
-WRITE8_MEMBER(skydiver_state::width_w)
+WRITE_LINE_MEMBER(skydiver_state::width_w)
{
- m_width = offset;
+ m_width = state;
}
-WRITE8_MEMBER(skydiver_state::coin_lockout_w)
+WRITE_LINE_MEMBER(skydiver_state::coin_lockout_w)
{
- machine().bookkeeping().coin_lockout_global_w(!offset);
+ machine().bookkeeping().coin_lockout_global_w(!state);
}
-WRITE8_MEMBER(skydiver_state::start_lamp_1_w)
+WRITE_LINE_MEMBER(skydiver_state::start_lamp_1_w)
{
- output().set_led_value(0, offset);
+ output().set_led_value(0, state);
}
-WRITE8_MEMBER(skydiver_state::start_lamp_2_w)
+WRITE_LINE_MEMBER(skydiver_state::start_lamp_2_w)
{
- output().set_led_value(1, offset);
+ output().set_led_value(1, state);
}
-WRITE8_MEMBER(skydiver_state::lamp_s_w)
+WRITE_LINE_MEMBER(skydiver_state::lamp_s_w)
{
- output().set_value("lamps", offset);
+ output().set_value("lamps", state);
}
-WRITE8_MEMBER(skydiver_state::lamp_k_w)
+WRITE_LINE_MEMBER(skydiver_state::lamp_k_w)
{
- output().set_value("lampk", offset);
+ output().set_value("lampk", state);
}
-WRITE8_MEMBER(skydiver_state::lamp_y_w)
+WRITE_LINE_MEMBER(skydiver_state::lamp_y_w)
{
- output().set_value("lampy", offset);
+ output().set_value("lampy", state);
}
-WRITE8_MEMBER(skydiver_state::lamp_d_w)
+WRITE_LINE_MEMBER(skydiver_state::lamp_d_w)
{
- output().set_value("lampd", offset);
+ output().set_value("lampd", state);
}
-WRITE8_MEMBER(skydiver_state::_2000_201F_w)
+WRITE_LINE_MEMBER(skydiver_state::lamp_i_w)
{
- int bit = offset & 0x01;
+ output().set_value("lampi", state);
+}
- m_watchdog->reset_w(space,0,0);
+WRITE_LINE_MEMBER(skydiver_state::lamp_v_w)
+{
+ output().set_value("lampv", state);
+}
- switch (offset & 0x0e)
- {
- case (0x02):
- output().set_value("lampi", bit);
- break;
- case (0x04):
- output().set_value("lampv", bit);
- break;
- case (0x06):
- output().set_value("lampe", bit);
- break;
- case (0x08):
- output().set_value("lampr", bit);
- break;
- case (0x0a):
- m_discrete->write(space, SKYDIVER_OCT1_EN, bit);
- break;
- case (0x0c):
- m_discrete->write(space, SKYDIVER_OCT2_EN, bit);
- break;
- case (0x0e):
- m_discrete->write(space, SKYDIVER_NOISE_RST, bit);
- break;
- }
+WRITE_LINE_MEMBER(skydiver_state::lamp_e_w)
+{
+ output().set_value("lampe", state);
+}
+
+WRITE_LINE_MEMBER(skydiver_state::lamp_r_w)
+{
+ output().set_value("lampr", state);
+}
+
+WRITE8_MEMBER(skydiver_state::latch3_watchdog_w)
+{
+ m_watchdog->reset_w(space, 0, 0);
+ m_latch3->write_a0(space, offset, 0);
}
diff --git a/src/mame/video/slapfght.cpp b/src/mame/video/slapfght.cpp
index 3a584fab746..cd1ef5465e9 100644
--- a/src/mame/video/slapfght.cpp
+++ b/src/mame/video/slapfght.cpp
@@ -116,14 +116,14 @@ WRITE8_MEMBER(slapfght_state::scrolly_w)
m_scrolly = data;
}
-WRITE8_MEMBER(slapfght_state::flipscreen_w)
+WRITE_LINE_MEMBER(slapfght_state::flipscreen_w)
{
- flip_screen_set(offset ? 0 : 1);
+ flip_screen_set(state ? 0 : 1);
}
-WRITE8_MEMBER(slapfght_state::palette_bank_w)
+WRITE_LINE_MEMBER(slapfght_state::palette_bank_w)
{
- m_palette_bank = offset;
+ m_palette_bank = state;
}
diff --git a/src/mame/video/sonson.cpp b/src/mame/video/sonson.cpp
index 322c2010c6e..d27377b3756 100644
--- a/src/mame/video/sonson.cpp
+++ b/src/mame/video/sonson.cpp
@@ -114,9 +114,9 @@ WRITE8_MEMBER(sonson_state::sonson_scrollx_w)
m_bg_tilemap->set_scrollx(row, data);
}
-WRITE8_MEMBER(sonson_state::sonson_flipscreen_w)
+WRITE_LINE_MEMBER(sonson_state::flipscreen_w)
{
- flip_screen_set(~data & 0x01);
+ flip_screen_set(!state);
}
TILE_GET_INFO_MEMBER(sonson_state::get_bg_tile_info)
diff --git a/src/mame/video/sprint8.cpp b/src/mame/video/sprint8.cpp
index 1bd241cfb19..9971b6d627e 100644
--- a/src/mame/video/sprint8.cpp
+++ b/src/mame/video/sprint8.cpp
@@ -29,7 +29,7 @@ void sprint8_state::set_pens()
{
for (int i = 0; i < 0x10; i += 8)
{
- if (*m_team & 1)
+ if (m_team)
{
m_palette->set_indirect_color(i + 0, rgb_t(0xff, 0x00, 0x00)); /* red */
m_palette->set_indirect_color(i + 1, rgb_t(0x00, 0x00, 0xff)); /* blue */
diff --git a/src/mame/video/subs.cpp b/src/mame/video/subs.cpp
index 513ab9ff8c6..7fb8c6bf2e4 100644
--- a/src/mame/video/subs.cpp
+++ b/src/mame/video/subs.cpp
@@ -10,9 +10,9 @@
#include "includes/subs.h"
#include "sound/discrete.h"
-WRITE8_MEMBER(subs_state::invert1_w)
+WRITE_LINE_MEMBER(subs_state::invert1_w)
{
- if ((offset & 0x01) == 1)
+ if (state)
{
m_palette->set_pen_color(0, rgb_t(0x00, 0x00, 0x00));
m_palette->set_pen_color(1, rgb_t(0xFF, 0xFF, 0xFF));
@@ -24,9 +24,9 @@ WRITE8_MEMBER(subs_state::invert1_w)
}
}
-WRITE8_MEMBER(subs_state::invert2_w)
+WRITE_LINE_MEMBER(subs_state::invert2_w)
{
- if ((offset & 0x01) == 1)
+ if (state)
{
m_palette->set_pen_color(2, rgb_t(0x00, 0x00, 0x00));
m_palette->set_pen_color(3, rgb_t(0xFF, 0xFF, 0xFF));
diff --git a/src/mame/video/thepit.cpp b/src/mame/video/thepit.cpp
index 1380261c9be..cafd9733df8 100644
--- a/src/mame/video/thepit.cpp
+++ b/src/mame/video/thepit.cpp
@@ -167,13 +167,11 @@ WRITE8_MEMBER(thepit_state::colorram_w)
}
-WRITE8_MEMBER(thepit_state::flip_screen_x_w)
+WRITE_LINE_MEMBER(thepit_state::flip_screen_x_w)
{
- int flip;
+ m_flip_x = state;
- m_flip_x = data & 0x01;
-
- flip = m_flip_x ? TILEMAP_FLIPX : 0;
+ int flip = m_flip_x ? TILEMAP_FLIPX : 0;
if (m_flip_y)
flip |= TILEMAP_FLIPY ;
@@ -183,13 +181,11 @@ WRITE8_MEMBER(thepit_state::flip_screen_x_w)
}
-WRITE8_MEMBER(thepit_state::flip_screen_y_w)
+WRITE_LINE_MEMBER(thepit_state::flip_screen_y_w)
{
- int flip;
-
- m_flip_y = data & 0x01;
+ m_flip_y = state;
- flip = m_flip_x ? TILEMAP_FLIPX : 0;
+ int flip = m_flip_x ? TILEMAP_FLIPX : 0;
if (m_flip_y)
flip |= TILEMAP_FLIPY ;
@@ -199,14 +195,11 @@ WRITE8_MEMBER(thepit_state::flip_screen_y_w)
}
-WRITE8_MEMBER(thepit_state::intrepid_graphics_bank_w)
+WRITE_LINE_MEMBER(thepit_state::intrepid_graphics_bank_w)
{
- if (m_graphics_bank != (data & 0x01))
- {
- m_graphics_bank = data & 0x01;
+ m_graphics_bank = state;
- m_tilemap->mark_all_dirty();
- }
+ m_tilemap->mark_all_dirty();
}
diff --git a/src/mame/video/timeplt.cpp b/src/mame/video/timeplt.cpp
index ab1f46ba74f..f2c80dd4b62 100644
--- a/src/mame/video/timeplt.cpp
+++ b/src/mame/video/timeplt.cpp
@@ -166,14 +166,14 @@ WRITE8_MEMBER(timeplt_state::colorram_w)
}
-WRITE8_MEMBER(timeplt_state::flipscreen_w)
+WRITE_LINE_MEMBER(timeplt_state::flipscreen_w)
{
- flip_screen_set(~data & 1);
+ flip_screen_set(!state);
}
-WRITE8_MEMBER(timeplt_state::video_enable_w)
+WRITE_LINE_MEMBER(timeplt_state::video_enable_w)
{
- m_video_enable = data & 1;
+ m_video_enable = state;
}
READ8_MEMBER(timeplt_state::scanline_r)
diff --git a/src/mame/video/tp84.cpp b/src/mame/video/tp84.cpp
index 634262ae41b..d6534f36e43 100644
--- a/src/mame/video/tp84.cpp
+++ b/src/mame/video/tp84.cpp
@@ -183,8 +183,8 @@ uint32_t tp84_state::screen_update_tp84(screen_device &screen, bitmap_ind16 &bit
m_bg_tilemap->set_scrollx(0, *m_scroll_x);
m_bg_tilemap->set_scrolly(0, *m_scroll_y);
- machine().tilemap().set_flip_all(((*m_flipscreen_x & 0x01) ? TILEMAP_FLIPX : 0) |
- ((*m_flipscreen_y & 0x01) ? TILEMAP_FLIPY : 0));
+ machine().tilemap().set_flip_all((m_flipscreen_x ? TILEMAP_FLIPX : 0) |
+ (m_flipscreen_y ? TILEMAP_FLIPY : 0));
}
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
diff --git a/src/mame/video/triplhnt.cpp b/src/mame/video/triplhnt.cpp
index 79d8863f6e1..e1b95963282 100644
--- a/src/mame/video/triplhnt.cpp
+++ b/src/mame/video/triplhnt.cpp
@@ -28,7 +28,6 @@ void triplhnt_state::video_start()
save_item(NAME(m_cmos));
save_item(NAME(m_da_latch));
- save_item(NAME(m_misc_flags));
save_item(NAME(m_cmos_latch));
save_item(NAME(m_hit_code));
save_item(NAME(m_sprite_zoom));
diff --git a/src/mame/video/tsamurai.cpp b/src/mame/video/tsamurai.cpp
index c2e2bcb6452..9b59bcd4d8a 100644
--- a/src/mame/video/tsamurai.cpp
+++ b/src/mame/video/tsamurai.cpp
@@ -91,22 +91,16 @@ WRITE8_MEMBER(tsamurai_state::bgcolor_w)
m_bgcolor = data;
}
-WRITE8_MEMBER(tsamurai_state::textbank1_w)
+WRITE_LINE_MEMBER(tsamurai_state::textbank1_w)
{
- if( m_textbank1!=data )
- {
- m_textbank1 = data;
- m_foreground ->mark_all_dirty();
- }
+ m_textbank1 = state;
+ m_foreground->mark_all_dirty();
}
-WRITE8_MEMBER(tsamurai_state::m660_textbank2_w)
+WRITE_LINE_MEMBER(tsamurai_state::textbank2_w)
{
- if( m_textbank2!=data )
- {
- m_textbank2 = data;
- m_foreground ->mark_all_dirty();
- }
+ m_textbank2 = state;
+ m_foreground->mark_all_dirty();
}
WRITE8_MEMBER(tsamurai_state::bg_videoram_w)
diff --git a/src/mame/video/tubep.cpp b/src/mame/video/tubep.cpp
index 63fb519ab92..9e4d72fd705 100644
--- a/src/mame/video/tubep.cpp
+++ b/src/mame/video/tubep.cpp
@@ -403,15 +403,23 @@ WRITE8_MEMBER(tubep_state::tubep_textram_w)
}
-WRITE8_MEMBER(tubep_state::tubep_background_romselect_w)
+WRITE_LINE_MEMBER(tubep_state::screen_flip_w)
{
- m_background_romsel = data & 1;
+ // screen flip, active high
}
-WRITE8_MEMBER(tubep_state::tubep_colorproms_A4_line_w)
+WRITE_LINE_MEMBER(tubep_state::background_romselect_w)
{
- m_color_A4 = (data & 1)<<4;
+ // 0->select roms: B1,B3,B5; 1->select roms: B2,B4,B6
+ m_background_romsel = state;
+}
+
+
+WRITE_LINE_MEMBER(tubep_state::colorproms_A4_line_w)
+{
+ // line A4 (color proms address) state
+ m_color_A4 = state << 4;
}
diff --git a/src/mame/video/tutankhm.cpp b/src/mame/video/tutankhm.cpp
index caa41b84e5d..8cd1a5a4bf6 100644
--- a/src/mame/video/tutankhm.cpp
+++ b/src/mame/video/tutankhm.cpp
@@ -18,15 +18,15 @@
*
*************************************/
-WRITE8_MEMBER(tutankhm_state::tutankhm_flip_screen_x_w)
+WRITE_LINE_MEMBER(tutankhm_state::flip_screen_x_w)
{
- m_flip_x = data & 0x01;
+ m_flip_x = state;
}
-WRITE8_MEMBER(tutankhm_state::tutankhm_flip_screen_y_w)
+WRITE_LINE_MEMBER(tutankhm_state::flip_screen_y_w)
{
- m_flip_y = data & 0x01;
+ m_flip_y = state;
}
@@ -48,7 +48,7 @@ uint32_t tutankhm_state::screen_update_tutankhm(screen_device &screen, bitmap_rg
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
{
uint8_t effx = x ^ xorx;
- uint8_t yscroll = (effx < 192) ? *m_scroll : 0;
+ uint8_t yscroll = (effx < 192 && m_scroll.found()) ? *m_scroll : 0;
uint8_t effy = (y ^ xory) + yscroll;
uint8_t vrambyte = m_videoram[effy * 128 + effx / 2];
uint8_t shifted = vrambyte >> (4 * (effx % 2));
diff --git a/src/mame/video/wiping.cpp b/src/mame/video/wiping.cpp
index 7b38928260c..89a69353254 100644
--- a/src/mame/video/wiping.cpp
+++ b/src/mame/video/wiping.cpp
@@ -79,9 +79,9 @@ PALETTE_INIT_MEMBER(wiping_state, wiping)
-WRITE8_MEMBER(wiping_state::flipscreen_w)
+WRITE_LINE_MEMBER(wiping_state::flipscreen_w)
{
- m_flipscreen = (data & 1);
+ m_flipscreen = state;
}