summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/machine.lua26
-rw-r--r--scripts/target/mame/arcade.lua2
-rw-r--r--scripts/target/mame/mess.lua2
-rw-r--r--scripts/target/mame/tiny.lua1
-rw-r--r--src/devices/bus/ti99/peb/pcode.cpp25
-rw-r--r--src/devices/bus/ti99/peb/pcode.h7
-rw-r--r--src/devices/bus/ti99/peb/ti_fdc.cpp120
-rw-r--r--src/devices/bus/ti99/peb/ti_fdc.h16
-rw-r--r--src/devices/bus/ti99/peb/ti_rs232.cpp164
-rw-r--r--src/devices/bus/ti99/peb/ti_rs232.h28
-rw-r--r--src/devices/machine/74259.cpp391
-rw-r--r--src/devices/machine/74259.h173
-rw-r--r--src/devices/machine/dm9334.cpp188
-rw-r--r--src/devices/machine/dm9334.h182
-rw-r--r--src/devices/machine/wozfdc.cpp27
-rw-r--r--src/devices/machine/wozfdc.h7
-rw-r--r--src/devices/sound/namco.cpp8
-rw-r--r--src/devices/sound/namco.h10
-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
294 files changed, 6317 insertions, 5375 deletions
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua
index 7b0356db03b..0683ab0a0b9 100644
--- a/scripts/src/machine.lua
+++ b/scripts/src/machine.lua
@@ -429,6 +429,18 @@ end
---------------------------------------------------
--
+--@src/devices/machine/74259.h,MACHINES["TTL74259"] = true
+---------------------------------------------------
+
+if (MACHINES["TTL74259"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/74259.cpp",
+ MAME_DIR .. "src/devices/machine/74259.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/machine/7474.h,MACHINES["TTL7474"] = true
---------------------------------------------------
@@ -766,20 +778,6 @@ if (MACHINES["CXD1095"]~=null) then
}
end
----------------------------------------------------
---
---@src/devices/machine/dm9334.h,MACHINES["DM9334"] = true
----------------------------------------------------
-
-if (MACHINES["DM9334"]~=null) then
- files {
- MAME_DIR .. "src/devices/machine/dm9334.cpp",
- MAME_DIR .. "src/devices/machine/dm9334.h",
- }
-end
-
----------------------------------------------------
---
--@src/devices/machine/ds1204.h,MACHINES["DS1204"] = true
---------------------------------------------------
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 712bdb4a618..5fb5fd61520 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -375,6 +375,7 @@ MACHINES["TTL74157"] = true
MACHINES["TTL74166"] = true
--MACHINES["TTL74175"] = true
MACHINES["TTL74181"] = true
+MACHINES["TTL74259"] = true
MACHINES["TTL7474"] = true
MACHINES["KBDC8042"] = true
MACHINES["I8257"] = true
@@ -406,7 +407,6 @@ MACHINES["CR589"] = true
--MACHINES["CS4031"] = true
--MACHINES["CS8221"] = true
MACHINES["CXD1095"] = true
---MACHINES["DM9334"] = true
MACHINES["DP8390"] = true
MACHINES["DS1204"] = true
MACHINES["DS1205"] = true
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index d989bdaf2d5..0bbe1aa57fa 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -397,7 +397,6 @@ MACHINES["CR589"] = true
MACHINES["CS4031"] = true
MACHINES["CS8221"] = true
MACHINES["CXD1095"] = true
-MACHINES["DM9334"] = true
MACHINES["DP8390"] = true
--MACHINES["DS1204"] = true
MACHINES["DS1302"] = true
@@ -561,6 +560,7 @@ MACHINES["TTL74161"] = true
MACHINES["TTL74164"] = true
MACHINES["TTL74175"] = true
MACHINES["TTL74181"] = true
+MACHINES["TTL74259"] = true
MACHINES["TTL7474"] = true
MACHINES["UPD1990A"] = true
--MACHINES["UPD4992"] = true
diff --git a/scripts/target/mame/tiny.lua b/scripts/target/mame/tiny.lua
index f4ac6d81074..c4d72fa7658 100644
--- a/scripts/target/mame/tiny.lua
+++ b/scripts/target/mame/tiny.lua
@@ -57,6 +57,7 @@ MACHINES["6821PIA"] = true
MACHINES["TTL74148"] = true
MACHINES["TTL74153"] = true
MACHINES["TTL7474"] = true
+MACHINES["TTL74259"] = true
MACHINES["RIOT6532"] = true
MACHINES["PIT8253"] = true
MACHINES["Z80CTC"] = true
diff --git a/src/devices/bus/ti99/peb/pcode.cpp b/src/devices/bus/ti99/peb/pcode.cpp
index 4e09b5a4739..d30622f6a41 100644
--- a/src/devices/bus/ti99/peb/pcode.cpp
+++ b/src/devices/bus/ti99/peb/pcode.cpp
@@ -103,6 +103,7 @@ ti_pcode_card_device::ti_pcode_card_device(const machine_config &mconfig, const
device_t(mconfig, TI99_P_CODE, tag, owner, clock),
device_ti99_peribox_card_interface(mconfig, *this),
m_rom(nullptr),
+ m_crulatch(*this, "crulatch"),
m_bank_select(0),
m_active(false),
m_clock_count(0),
@@ -254,18 +255,18 @@ READ8Z_MEMBER(ti_pcode_card_device::crureadz)
WRITE8_MEMBER(ti_pcode_card_device::cruwrite)
{
if ((offset & 0xff00)==CRU_BASE)
- {
- int addr = offset & 0x00ff;
+ m_crulatch->write_bit((offset & 0x80) >> 5 | (offset & 0x06) >> 1, data);
+}
- if (addr==0)
- m_selected = (data != 0);
+WRITE_LINE_MEMBER(ti_pcode_card_device::pcpage_w)
+{
+ m_selected = state;
+}
- if (addr==0x80) // Bit 4 is on address line 8
- {
- m_bank_select = (data+1); // we're calling this bank 1 and bank 2
- if (TRACE_CRU) logerror("Select rom bank %d\n", m_bank_select);
- }
- }
+WRITE_LINE_MEMBER(ti_pcode_card_device::ekrpg_w)
+{
+ m_bank_select = state ? 2 : 1; // we're calling this bank 1 and bank 2
+ if (TRACE_CRU) logerror("Select rom bank %d\n", m_bank_select);
}
void ti_pcode_card_device::device_start()
@@ -361,6 +362,10 @@ MACHINE_CONFIG_MEMBER( ti_pcode_card_device::device_add_mconfig )
MCFG_GROM_ADD( PGROM5_TAG, 5, PCODE_GROM_TAG, 0xa000, WRITELINE(ti_pcode_card_device, ready_line))
MCFG_GROM_ADD( PGROM6_TAG, 6, PCODE_GROM_TAG, 0xc000, WRITELINE(ti_pcode_card_device, ready_line))
MCFG_GROM_ADD( PGROM7_TAG, 7, PCODE_GROM_TAG, 0xe000, WRITELINE(ti_pcode_card_device, ready_line))
+
+ MCFG_DEVICE_ADD("crulatch", LS259, 0) // U12
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_pcode_card_device, pcpage_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_pcode_card_device, ekrpg_w))
MACHINE_CONFIG_END
const tiny_rom_entry *ti_pcode_card_device::device_rom_region() const
diff --git a/src/devices/bus/ti99/peb/pcode.h b/src/devices/bus/ti99/peb/pcode.h
index 21b77ff9cd8..a07effcd478 100644
--- a/src/devices/bus/ti99/peb/pcode.h
+++ b/src/devices/bus/ti99/peb/pcode.h
@@ -18,6 +18,7 @@
#pragma once
#include "peribox.h"
+#include "machine/74259.h"
#include "machine/tmc0430.h"
namespace bus { namespace ti99 { namespace peb {
@@ -45,11 +46,15 @@ protected:
virtual ioport_constructor device_input_ports() const override;
private:
- DECLARE_WRITE_LINE_MEMBER( ready_line );
+ DECLARE_WRITE_LINE_MEMBER(ready_line);
+
+ DECLARE_WRITE_LINE_MEMBER(pcpage_w);
+ DECLARE_WRITE_LINE_MEMBER(ekrpg_w);
void debugger_read(address_space& space, uint16_t addr, uint8_t& value);
tmc0430_device* m_grom[8];
uint8_t* m_rom;
+ required_device<ls259_device> m_crulatch;
int m_bank_select;
bool m_active;
int m_clock_count;
diff --git a/src/devices/bus/ti99/peb/ti_fdc.cpp b/src/devices/bus/ti99/peb/ti_fdc.cpp
index dea17a77c85..c185af4a95b 100644
--- a/src/devices/bus/ti99/peb/ti_fdc.cpp
+++ b/src/devices/bus/ti99/peb/ti_fdc.cpp
@@ -57,7 +57,7 @@ ti_fdc_device::ti_fdc_device(const machine_config &mconfig, const char *tag, dev
m_address(0),
m_DRQ(0),
m_IRQ(0),
- m_lastval(0),
+ m_crulatch(*this, "crulatch"),
m_DVENA(0),
m_inDsrArea(false),
m_WAITena(false),
@@ -246,67 +246,57 @@ READ8Z_MEMBER(ti_fdc_device::crureadz)
WRITE8_MEMBER(ti_fdc_device::cruwrite)
{
if ((offset & 0xff00)==m_cru_base)
- {
- int bit = (offset >> 1) & 0x07;
- switch (bit)
- {
- case 0:
- // (De)select the card. Indicated by a LED on the board.
- m_selected = (data!=0);
- if (TRACE_CRU) logerror("tifdc: Map DSR (bit 0) = %d\n", m_selected);
- break;
-
- case 1:
- // Activate motor
- if (data==1 && m_lastval==0)
- { // On rising edge, set motor_running for 4.23s
- if (TRACE_CRU) logerror("tifdc: trigger motor (bit 1)\n");
- set_floppy_motors_running(true);
- }
- m_lastval = data;
- break;
-
- case 2:
- // Set disk ready/hold (bit 2)
- // 0: ignore IRQ and DRQ
- // 1: TMS9900 is stopped until IRQ or DRQ are set
- // OR the motor stops rotating - rotates for 4.23s after write
- // to CRU bit 1
- m_WAITena = (data != 0);
- if (TRACE_CRU) logerror("tifdc: arm wait state logic (bit 2) = %d\n", data);
- break;
-
- case 3:
- // Load disk heads (HLT pin) (bit 3). Not implemented.
- if (TRACE_CRU) logerror("tifdc: set head load (bit 3) = %d\n", data);
- break;
-
- case 4:
- m_DSEL = (data != 0)? (m_DSEL | 0x01) : (m_DSEL & 0xfe);
- set_drive();
- break;
- case 5:
- m_DSEL = (data != 0)? (m_DSEL | 0x02) : (m_DSEL & 0xfd);
- set_drive();
- break;
- case 6:
- m_DSEL = (data != 0)? (m_DSEL | 0x04) : (m_DSEL & 0xfb);
- set_drive();
- break;
-
- case 7:
- // Select side of disk (bit 7)
- m_SIDSEL = (data==1)? ASSERT_LINE : CLEAR_LINE;
- if (TRACE_CRU) logerror("tifdc: set side (bit 7) = %d\n", data);
- if (m_current != NONE) m_floppy[m_current]->ss_w(data);
- break;
-
- default:
- break;
- }
+ m_crulatch->write_bit((offset >> 1) & 0x07, BIT(data, 0));
+}
+
+WRITE_LINE_MEMBER(ti_fdc_device::dskpgena_w)
+{
+ // (De)select the card. Indicated by a LED on the board.
+ m_selected = state;
+ if (TRACE_CRU) logerror("tifdc: Map DSR (bit 0) = %d\n", m_selected);
+}
+
+WRITE_LINE_MEMBER(ti_fdc_device::kaclk_w)
+{
+ // Activate motor
+ if (state)
+ { // On rising edge, set motor_running for 4.23s
+ if (TRACE_CRU) logerror("tifdc: trigger motor (bit 1)\n");
+ set_floppy_motors_running(true);
}
}
+WRITE_LINE_MEMBER(ti_fdc_device::waiten_w)
+{
+ // Set disk ready/hold (bit 2)
+ // 0: ignore IRQ and DRQ
+ // 1: TMS9900 is stopped until IRQ or DRQ are set
+ // OR the motor stops rotating - rotates for 4.23s after write
+ // to CRU bit 1
+ m_WAITena = state;
+ if (TRACE_CRU) logerror("tifdc: arm wait state logic (bit 2) = %d\n", state);
+}
+
+WRITE_LINE_MEMBER(ti_fdc_device::hlt_w)
+{
+ // Load disk heads (HLT pin) (bit 3). Not implemented.
+ if (TRACE_CRU) logerror("tifdc: set head load (bit 3) = %d\n", state);
+}
+
+WRITE_LINE_MEMBER(ti_fdc_device::dsel_w)
+{
+ m_DSEL = m_crulatch->q4_r() | (m_crulatch->q5_r() << 1) | (m_crulatch->q6_r() << 2);
+ set_drive();
+}
+
+WRITE_LINE_MEMBER(ti_fdc_device::sidsel_w)
+{
+ // Select side of disk (bit 7)
+ m_SIDSEL = state ? ASSERT_LINE : CLEAR_LINE;
+ if (TRACE_CRU) logerror("tifdc: set side (bit 7) = %d\n", state);
+ if (m_current != NONE) m_floppy[m_current]->ss_w(state);
+}
+
void ti_fdc_device::set_drive()
{
switch (m_DSEL)
@@ -390,7 +380,6 @@ void ti_fdc_device::device_start()
save_item(NAME(m_address));
save_item(NAME(m_DRQ));
save_item(NAME(m_IRQ));
- save_item(NAME(m_lastval));
save_item(NAME(m_DVENA));
save_item(NAME(m_inDsrArea));
save_item(NAME(m_WAITena));
@@ -403,7 +392,6 @@ void ti_fdc_device::device_start()
void ti_fdc_device::device_reset()
{
logerror("tifdc: TI FDC reset\n");
- m_lastval = 0;
if (m_genmod)
{
m_select_mask = 0x1fe000;
@@ -471,6 +459,16 @@ MACHINE_CONFIG_MEMBER( ti_fdc_device::device_add_mconfig )
MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD("2", tifdc_floppies, nullptr, ti_fdc_device::floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(true)
+
+ MCFG_DEVICE_ADD("crulatch", LS259, 0) // U23
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_fdc_device, dskpgena_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(ti_fdc_device, kaclk_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(ti_fdc_device, waiten_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ti_fdc_device, hlt_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_fdc_device, dsel_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ti_fdc_device, dsel_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ti_fdc_device, dsel_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ti_fdc_device, sidsel_w))
MACHINE_CONFIG_END
const tiny_rom_entry *ti_fdc_device::device_rom_region() const
diff --git a/src/devices/bus/ti99/peb/ti_fdc.h b/src/devices/bus/ti99/peb/ti_fdc.h
index a5c3d16f04d..c53e5a03ffc 100644
--- a/src/devices/bus/ti99/peb/ti_fdc.h
+++ b/src/devices/bus/ti99/peb/ti_fdc.h
@@ -17,6 +17,7 @@
#pragma once
#include "peribox.h"
+#include "machine/74259.h"
#include "machine/wd_fdc.h"
#include "imagedev/floppy.h"
@@ -48,8 +49,15 @@ protected:
private:
DECLARE_FLOPPY_FORMATS( floppy_formats );
- DECLARE_WRITE_LINE_MEMBER( fdc_irq_w );
- DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
+ DECLARE_WRITE_LINE_MEMBER(fdc_irq_w);
+ DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
+
+ DECLARE_WRITE_LINE_MEMBER(dskpgena_w);
+ DECLARE_WRITE_LINE_MEMBER(kaclk_w);
+ DECLARE_WRITE_LINE_MEMBER(waiten_w);
+ DECLARE_WRITE_LINE_MEMBER(hlt_w);
+ DECLARE_WRITE_LINE_MEMBER(dsel_w);
+ DECLARE_WRITE_LINE_MEMBER(sidsel_w);
// For debugger access
void debug_read(offs_t offset, uint8_t* value);
@@ -69,8 +77,8 @@ private:
// Holds the status of the DRQ and IRQ lines.
int m_DRQ, m_IRQ;
- // Needed for triggering the motor monoflop
- uint8_t m_lastval;
+ // Latched CRU outputs
+ required_device<ls259_device> m_crulatch;
// Signal DVENA. When true, makes some drive turning.
int m_DVENA;
diff --git a/src/devices/bus/ti99/peb/ti_rs232.cpp b/src/devices/bus/ti99/peb/ti_rs232.cpp
index b5d622bb36e..59e442f2ee5 100644
--- a/src/devices/bus/ti99/peb/ti_rs232.cpp
+++ b/src/devices/bus/ti99/peb/ti_rs232.cpp
@@ -131,6 +131,7 @@ namespace bus { namespace ti99 { namespace peb {
ti_rs232_pio_device::ti_rs232_pio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, TI99_RS232, tag, owner, clock),
device_ti99_peribox_card_interface(mconfig, *this),
+ m_crulatch(*this, "crulatch"),
m_piodev(nullptr),
m_dsrrom(nullptr),
m_pio_direction_in(false),
@@ -327,86 +328,89 @@ WRITE8_MEMBER(ti_rs232_pio_device::cruwrite)
return;
}
- device_image_interface *image = dynamic_cast<device_image_interface *>(m_piodev);
-
int bit = (offset & 0x00ff)>>1;
- switch (bit)
- {
- case 0:
- m_selected = (data!=0);
- break;
+ m_crulatch->write_bit(bit, data);
+ }
+}
- case 1:
- m_pio_direction_in = (data!=0);
- break;
+WRITE_LINE_MEMBER(ti_rs232_pio_device::selected_w)
+{
+ m_selected = state;
+}
- case 2:
- if ((data!=0) != m_pio_handshakeout)
- {
- m_pio_handshakeout = (data!=0);
- if (m_pio_write && m_pio_writable && (!m_pio_direction_in))
- { /* PIO in output mode */
- if (!m_pio_handshakeout)
- { /* write data strobe */
- /* write data and acknowledge */
- uint8_t buf = m_pio_out_buffer;
- int ret = image->fwrite(&buf, 1);
- if (ret)
- m_pio_handshakein = 1;
- }
- else
- {
- /* end strobe */
- /* we can write some data: set receiver ready */
- m_pio_handshakein = 0;
- }
- }
- if ((!m_pio_write) && m_pio_readable /*&& pio_direction_in*/)
- { /* PIO in input mode */
- if (!m_pio_handshakeout)
- { /* receiver ready */
- /* send data and strobe */
- uint8_t buf;
- if (image->fread(&buf, 1))
- m_pio_in_buffer = buf;
- m_pio_handshakein = 0;
- }
- else
- {
- /* data acknowledge */
- /* we can send some data: set transmitter ready */
- m_pio_handshakein = 1;
- }
- }
- }
- break;
-
- case 3:
- m_pio_spareout = (data!=0);
- break;
-
- case 4:
- m_flag0 = (data!=0);
- break;
-
- case 5:
- // Set the CTS line for RS232/1
- if (TRACE_LINES) logerror("(1/3) Setting CTS* via CRU to %d\n", data);
- output_line_state(0, tms9902_device::CTS, (data==0)? tms9902_device::CTS : 0);
- break;
-
- case 6:
- // Set the CTS line for RS232/2
- if (TRACE_LINES) logerror("(2/4) Setting CTS* via CRU to %d\n", data);
- output_line_state(1, tms9902_device::CTS, (data==0)? tms9902_device::CTS : 0);
- break;
-
- case 7:
- m_led = (data!=0);
- break;
+WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_direction_in_w)
+{
+ m_pio_direction_in = state;
+}
+
+WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_handshake_out_w)
+{
+ device_image_interface *image = dynamic_cast<device_image_interface *>(m_piodev);
+
+ m_pio_handshakeout = state;
+ if (m_pio_write && m_pio_writable && (!m_pio_direction_in))
+ { /* PIO in output mode */
+ if (!m_pio_handshakeout)
+ { /* write data strobe */
+ /* write data and acknowledge */
+ uint8_t buf = m_pio_out_buffer;
+ int ret = image->fwrite(&buf, 1);
+ if (ret)
+ m_pio_handshakein = 1;
+ }
+ else
+ {
+ /* end strobe */
+ /* we can write some data: set receiver ready */
+ m_pio_handshakein = 0;
}
- return;
}
+ if ((!m_pio_write) && m_pio_readable /*&& pio_direction_in*/)
+ { /* PIO in input mode */
+ if (!m_pio_handshakeout)
+ { /* receiver ready */
+ /* send data and strobe */
+ uint8_t buf;
+ if (image->fread(&buf, 1))
+ m_pio_in_buffer = buf;
+ m_pio_handshakein = 0;
+ }
+ else
+ {
+ /* data acknowledge */
+ /* we can send some data: set transmitter ready */
+ m_pio_handshakein = 1;
+ }
+ }
+}
+
+WRITE_LINE_MEMBER(ti_rs232_pio_device::pio_spareout_w)
+{
+ m_pio_spareout = state;
+}
+
+WRITE_LINE_MEMBER(ti_rs232_pio_device::flag0_w)
+{
+ m_flag0 = state;
+}
+
+WRITE_LINE_MEMBER(ti_rs232_pio_device::cts0_w)
+{
+ // Set the CTS line for RS232/1
+ if (TRACE_LINES) logerror("(1/3) Setting CTS* via CRU to %d\n", state);
+ output_line_state(0, tms9902_device::CTS, state ? 0 : tms9902_device::CTS);
+}
+
+WRITE_LINE_MEMBER(ti_rs232_pio_device::cts1_w)
+{
+ // Set the CTS line for RS232/2
+ if (TRACE_LINES) logerror("(2/4) Setting CTS* via CRU to %d\n", state);
+ output_line_state(1, tms9902_device::CTS, state ? 0 : tms9902_device::CTS);
+}
+
+WRITE_LINE_MEMBER(ti_rs232_pio_device::led_w)
+{
+ m_led = state;
}
/*
@@ -1150,6 +1154,16 @@ MACHINE_CONFIG_MEMBER( ti_rs232_pio_device::device_add_mconfig )
MCFG_DEVICE_ADD("serdev0", TI99_RS232_DEV, 0)
MCFG_DEVICE_ADD("serdev1", TI99_RS232_DEV, 0)
MCFG_DEVICE_ADD("piodev", TI99_PIO_DEV, 0)
+
+ MCFG_DEVICE_ADD("crulatch", LS259, 0) // U12
+ MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(ti_rs232_pio_device, selected_w))
+ MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_direction_in_w))
+ MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_handshake_out_w))
+ MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(ti_rs232_pio_device, pio_spareout_w))
+ MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(ti_rs232_pio_device, flag0_w))
+ MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ti_rs232_pio_device, cts0_w))
+ MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ti_rs232_pio_device, cts1_w))
+ MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(ti_rs232_pio_device, led_w))
MACHINE_CONFIG_END
const tiny_rom_entry *ti_rs232_pio_device::device_rom_region() const
diff --git a/src/devices/bus/ti99/peb/ti_rs232.h b/src/devices/bus/ti99/peb/ti_rs232.h
index d6ef84c45b9..425120b3488 100644
--- a/src/devices/bus/ti99/peb/ti_rs232.h
+++ b/src/devices/bus/ti99/peb/ti_rs232.h
@@ -16,6 +16,7 @@
#pragma once
#include "peribox.h"
+#include "machine/74259.h"
#include "machine/tms9902.h"
namespace bus { namespace ti99 { namespace peb {
@@ -45,14 +46,23 @@ protected:
virtual ioport_constructor device_input_ports() const override;
private:
- DECLARE_WRITE_LINE_MEMBER( int0_callback );
- DECLARE_WRITE_LINE_MEMBER( int1_callback );
- DECLARE_WRITE_LINE_MEMBER( rcv0_callback );
- DECLARE_WRITE_LINE_MEMBER( rcv1_callback );
- DECLARE_WRITE8_MEMBER( xmit0_callback );
- DECLARE_WRITE8_MEMBER( xmit1_callback );
- DECLARE_WRITE8_MEMBER( ctrl0_callback );
- DECLARE_WRITE8_MEMBER( ctrl1_callback );
+ DECLARE_WRITE_LINE_MEMBER(int0_callback);
+ DECLARE_WRITE_LINE_MEMBER(int1_callback);
+ DECLARE_WRITE_LINE_MEMBER(rcv0_callback);
+ DECLARE_WRITE_LINE_MEMBER(rcv1_callback);
+ DECLARE_WRITE8_MEMBER(xmit0_callback);
+ DECLARE_WRITE8_MEMBER(xmit1_callback);
+ DECLARE_WRITE8_MEMBER(ctrl0_callback);
+ DECLARE_WRITE8_MEMBER(ctrl1_callback);
+
+ DECLARE_WRITE_LINE_MEMBER(selected_w);
+ DECLARE_WRITE_LINE_MEMBER(pio_direction_in_w);
+ DECLARE_WRITE_LINE_MEMBER(pio_handshake_out_w);
+ DECLARE_WRITE_LINE_MEMBER(pio_spareout_w);
+ DECLARE_WRITE_LINE_MEMBER(flag0_w);
+ DECLARE_WRITE_LINE_MEMBER(cts0_w);
+ DECLARE_WRITE_LINE_MEMBER(cts1_w);
+ DECLARE_WRITE_LINE_MEMBER(led_w);
void incoming_dtr(int uartind, line_state value);
void transmit_data(int uartind, uint8_t value);
@@ -66,6 +76,8 @@ private:
void output_exception(int uartind, int param, uint8_t value);
void ctrl_callback(int uartind, int type, uint8_t data);
+ required_device<ls259_device> m_crulatch;
+
// UART chips
tms9902_device* m_uart[2];
// Connected images (file or socket connection) that represent the
diff --git a/src/devices/machine/74259.cpp b/src/devices/machine/74259.cpp
new file mode 100644
index 00000000000..a15336c1e65
--- /dev/null
+++ b/src/devices/machine/74259.cpp
@@ -0,0 +1,391 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/**********************************************************************
+
+ 74259/9334 8-Bit Addressable Latch
+
+ The normal latch mode of this device provides a simple write-only
+ interface to up to 8 output lines. Its 3-bit address, 1-bit data
+ and active-low write enable inputs were commonly connected to the
+ bus lines of popular 8-bit microprocessors in the 1970s and 1980s.
+
+ The device may alternately serve as an active-high 1-of-8
+ demultiplexer when the asynchronous parallel clear input is held
+ low. The practical applications of this mode are more limited, and
+ the clear input is usually asserted only during master reset.
+
+ The A0-A2 (or A,B,C) and D inputs may be sourced in various
+ permutations, but it seems reasonable to assume, as the emulation
+ here requires, that these four inputs should always be written
+ simultaneously, since modifying them independently of each other
+ while the latch is enabled for writing would cause additional and
+ probably undesired changes to outputs.
+
+ The original TTL version of this device was introduced by Fairchild
+ in the early 1970s as 9334 in their 9300 MSI series, and second-
+ sourced by National Semiconductor as DM8334/DM9334 (the higher
+ number being used for the military-rated version). TI copied and
+ definitively renumbered many Fairchild MSI devices into their
+ standard 5400/7400 series. While Schottky and later versions almost
+ always use the 259 numbering (TI assigned SN74LS259 the alternative
+ name of TIM9906 when promoting it as a CRU output interface for the
+ TMS9900 family), older schematics sometimes suggest 9334 or DM8334
+ as pin-compatible substitutes for 74LS259.
+
+ Other addressable latch devices include:
+ - CD4099B: Part of RCA's standard CMOS logic series, this device
+ offers the same functions as 74259/9334, though its pins are
+ arranged rather differently. Like many CMOS devices in the 4000B
+ series and the CMOS addressable latches listed below, its reset
+ input is active high rather than active low, as is normal for
+ TTL devices.
+ - SN74256: A dual 4-bit latch with common control inputs and a
+ pinout similar to 74259, this device subtracts one of its
+ address lines and replaces it with a second data input which is
+ loaded in parallel.
+ - F4723B/4724B: These dual 4-bit (4723B) and 8-bit (4724B) latches
+ likely became part of the 4000B series when Fairchild introduced
+ their isoplanar CMOS line around 1974. They are pin-compatible
+ with 74256 and 74259 except for having active high clear inputs.
+ 4723B (originally 34723) might actually have preceded 74256,
+ since Fairchild's 1975 MOS CCD Data Book denies the existence of
+ a TTL counterpart.
+ - MC14599B: Motorola's moderately successful expansion of the
+ 4000B CMOS series includes this enhanced version of the CD4099B,
+ which has a bidirectional data pin and additional read/write and
+ chip select (active high) control inputs, allowing output bits
+ to be read back.
+ - NE590/591 Addressable Peripheral Drivers: Part of Signetics'
+ linear catalogue, these combine addressable latches with high
+ current drivers. NE590 has open collector Darlington outputs
+ (inverting logic) and is pin-compatible with 74LS259. NE591 uses
+ an extra chip select and sources outputs from a common collector
+ line independent of Vcc; it lacks the demultiplex mode.
+
+***********************************************************************
+
+ 74259 Function Table Latch Selection Table
+
+ Inputs | Outputs Inputs | Output
+ /C /E | Qa Qn A2 A1 A0 | Addressed
+ ---------+---------- -----------+-------------
+ H L | D Qn L L L | Q0
+ H H | Qa Qn L L H | Q1
+ L L | Qa L L H L | Q2
+ L H | L L L H H | Q3
+ H L L | Q4
+ Qa = output addressed H L H | Q5
+ Qn = all other outputs H H L | Q6
+ H H H | Q7
+
+**********************************************************************/
+
+#include "emu.h"
+#include "74259.h"
+
+#define LOG_ALL_WRITES (0)
+#define LOG_UNDEFINED_WRITES (0)
+#define LOG_MYSTERY_BITS (0)
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+// device type definitions
+DEFINE_DEVICE_TYPE(LS259, ls259_device, "ls259", "74LS259 Addressable Latch")
+DEFINE_DEVICE_TYPE(HC259, hc259_device, "hc259", "74HC259 Addressable Latch")
+DEFINE_DEVICE_TYPE(HCT259, hct259_device, "hct259", "74HCT259 Addressable Latch")
+DEFINE_DEVICE_TYPE(F9334, f9334_device, "f9334", "Fairchild 9334 Addressable Latch")
+DEFINE_DEVICE_TYPE(CD4099, cd4099_device, "cd4099", "CD4099B Addressable Latch")
+
+//**************************************************************************
+// ADDRESSABLE LATCH DEVICE
+//**************************************************************************
+
+addressable_latch_device::addressable_latch_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock),
+ m_q_out_cb{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}},
+ m_parallel_out_cb(*this)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void addressable_latch_device::device_start()
+{
+ // resolve callbacks
+ for (devcb_write_line &cb : m_q_out_cb)
+ cb.resolve();
+ m_parallel_out_cb.resolve();
+
+ // initial input state
+ m_address = 0;
+ m_data = false;
+ m_enable = false;
+ m_clear = false;
+
+ // arbitrary initial output state
+ m_q = 0xff;
+
+ save_item(NAME(m_address));
+ save_item(NAME(m_data));
+ save_item(NAME(m_enable));
+ save_item(NAME(m_q));
+ save_item(NAME(m_clear));
+}
+
+//-------------------------------------------------
+// device_reset - reset the device
+//-------------------------------------------------
+
+void addressable_latch_device::device_reset()
+{
+ // assume clear upon reset
+ clear_outputs(m_enable ? u8(m_data) << m_address : 0);
+}
+
+//-------------------------------------------------
+// write_bit - synchronously update one of the
+// eight output lines with a new data bit
+//-------------------------------------------------
+
+void addressable_latch_device::write_bit(offs_t offset, bool d)
+{
+ write_abcd(offset, d);
+ enable_w(0);
+ enable_w(1);
+}
+
+//-------------------------------------------------
+// write_abcd - update address select and data
+// inputs without changing enable state
+//-------------------------------------------------
+
+void addressable_latch_device::write_abcd(u8 a, bool d)
+{
+ m_address = a & 7;
+ m_data = d;
+
+ if (m_enable)
+ {
+ if (m_clear)
+ clear_outputs(u8(m_data) << m_address);
+ else
+ update_bit();
+ }
+}
+
+//-------------------------------------------------
+// enable_w - handle enable input (active low)
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(addressable_latch_device::enable_w)
+{
+ m_enable = !state;
+ if (m_enable)
+ update_bit();
+ else if (m_clear)
+ clear_outputs(0);
+}
+
+//-------------------------------------------------
+// update_bit - update one of the eight output
+// lines with a new data bit
+//-------------------------------------------------
+
+void addressable_latch_device::update_bit()
+{
+ // first verify that the selected bit is actually changing
+ if (BIT(m_q, m_address) == m_data)
+ return;
+
+ if (!m_clear)
+ {
+ // update selected bit with new data
+ m_q = (m_q & ~(1 << m_address)) | (u8(m_data) << m_address);
+ }
+ else
+ {
+ // clear any other bit that was formerly set
+ clear_outputs(0);
+ m_q = u8(m_data) << m_address;
+ }
+
+ // update output line via callback
+ if (!m_q_out_cb[m_address].isnull())
+ m_q_out_cb[m_address](m_data);
+
+ // update parallel output
+ if (!m_parallel_out_cb.isnull())
+ m_parallel_out_cb(0, m_q, 1 << m_address);
+
+ // do some logging
+ if (LOG_ALL_WRITES || (LOG_UNDEFINED_WRITES && m_q_out_cb[m_address].isnull() && m_parallel_out_cb.isnull()))
+ logerror("Q%d %s at %s\n", m_address, m_data ? "set" : "cleared", machine().describe_context());
+}
+
+//-------------------------------------------------
+// write_d0 - bus-triggered write handler using
+// LSB of data (or CRUOUT on TMS99xx)
+//-------------------------------------------------
+
+WRITE8_MEMBER(addressable_latch_device::write_d0)
+{
+ if (LOG_MYSTERY_BITS && data != 0x00 && data != 0x01 && data != 0xff)
+ logerror("Mystery bits written to Q%d:%s%s%s%s%s%s%s\n",
+ offset,
+ BIT(data, 7) ? " D7" : "",
+ BIT(data, 6) ? " D6" : "",
+ BIT(data, 5) ? " D5" : "",
+ BIT(data, 4) ? " D4" : "",
+ BIT(data, 3) ? " D3" : "",
+ BIT(data, 2) ? " D2" : "",
+ BIT(data, 1) ? " D1" : "");
+
+ write_bit(offset, BIT(data, 0));
+}
+
+//-------------------------------------------------
+// write_d7 - bus-triggered write handler using
+// MSB of (8-bit) data
+//-------------------------------------------------
+
+WRITE8_MEMBER(addressable_latch_device::write_d7)
+{
+ if (LOG_MYSTERY_BITS && data != 0x00 && data != 0x80 && data != 0xff)
+ logerror("Mystery bits written to Q%d:%s%s%s%s%s%s%s\n",
+ offset,
+ BIT(data, 6) ? " D6" : "",
+ BIT(data, 5) ? " D5" : "",
+ BIT(data, 4) ? " D4" : "",
+ BIT(data, 3) ? " D3" : "",
+ BIT(data, 2) ? " D2" : "",
+ BIT(data, 1) ? " D1" : "",
+ BIT(data, 0) ? " D0" : "");
+
+ write_bit(offset, BIT(data, 7));
+}
+
+//-------------------------------------------------
+// write_a0 - write handler that uses lowest bit
+// of address bus as data input (data on bus is
+// ignored)
+//-------------------------------------------------
+
+WRITE8_MEMBER(addressable_latch_device::write_a0)
+{
+ write_bit(offset >> 1, offset & 1);
+}
+
+//-------------------------------------------------
+// write_nibble - write handler using LSB of
+// data as input and next three bits as address
+// (offset is ignored)
+//-------------------------------------------------
+
+WRITE8_MEMBER(addressable_latch_device::write_nibble)
+{
+ write_bit((data & 0x0e) >> 1, data & 0x01);
+}
+
+//-------------------------------------------------
+// clear - pulse clear line from bus write
+//-------------------------------------------------
+
+WRITE8_MEMBER(addressable_latch_device::clear)
+{
+ clear_outputs(m_enable ? u8(m_data) << m_address : 0);
+}
+
+//-------------------------------------------------
+// q[0-7]_r - read individual output lines
+//-------------------------------------------------
+
+READ_LINE_MEMBER(addressable_latch_device::q0_r) { return BIT(m_q, 0); }
+READ_LINE_MEMBER(addressable_latch_device::q1_r) { return BIT(m_q, 1); }
+READ_LINE_MEMBER(addressable_latch_device::q2_r) { return BIT(m_q, 2); }
+READ_LINE_MEMBER(addressable_latch_device::q3_r) { return BIT(m_q, 3); }
+READ_LINE_MEMBER(addressable_latch_device::q4_r) { return BIT(m_q, 4); }
+READ_LINE_MEMBER(addressable_latch_device::q5_r) { return BIT(m_q, 5); }
+READ_LINE_MEMBER(addressable_latch_device::q6_r) { return BIT(m_q, 6); }
+READ_LINE_MEMBER(addressable_latch_device::q7_r) { return BIT(m_q, 7); }
+
+//-------------------------------------------------
+// clear_w - handle clear/reset input
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(addressable_latch_device::clear_w)
+{
+ m_clear = is_cmos() ? bool(state) : !state;
+ if (m_clear)
+ clear_outputs(m_enable ? u8(m_data) << m_address : 0);
+}
+
+//-------------------------------------------------
+// clear_outputs - clear all output lines
+//-------------------------------------------------
+
+void addressable_latch_device::clear_outputs(u8 new_q)
+{
+ const u8 bits_changed = m_q ^ new_q;
+ if (bits_changed == 0)
+ return;
+
+ m_q = new_q;
+
+ // return any previously set output lines to clear state
+ for (int bit = 0; bit < 8; bit++)
+ if (BIT(bits_changed, bit) && !m_q_out_cb[bit].isnull())
+ m_q_out_cb[bit](BIT(new_q, bit));
+
+ // update parallel output
+ if (!m_parallel_out_cb.isnull())
+ m_parallel_out_cb(0, new_q, bits_changed);
+}
+
+//**************************************************************************
+// LS259 DEVICE
+//**************************************************************************
+
+ls259_device::ls259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : addressable_latch_device(mconfig, LS259, tag, owner, clock)
+{
+}
+
+//**************************************************************************
+// HC259 DEVICE
+//**************************************************************************
+
+hc259_device::hc259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : addressable_latch_device(mconfig, HC259, tag, owner, clock)
+{
+}
+
+//**************************************************************************
+// HCT259 DEVICE
+//**************************************************************************
+
+hct259_device::hct259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : addressable_latch_device(mconfig, HCT259, tag, owner, clock)
+{
+}
+
+//**************************************************************************
+// F9334 DEVICE
+//**************************************************************************
+
+f9334_device::f9334_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : addressable_latch_device(mconfig, F9334, tag, owner, clock)
+{
+}
+
+//**************************************************************************
+// CD4099 DEVICE
+//**************************************************************************
+
+cd4099_device::cd4099_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : addressable_latch_device(mconfig, CD4099, tag, owner, clock)
+{
+}
diff --git a/src/devices/machine/74259.h b/src/devices/machine/74259.h
new file mode 100644
index 00000000000..df84c94c0d0
--- /dev/null
+++ b/src/devices/machine/74259.h
@@ -0,0 +1,173 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/**********************************************************************
+
+ 74259/9334 8-Bit Addressable Latch
+
+***********************************************************************
+ ____ ____
+ A0 1 |* \_/ | 16 Vcc
+ A1 2 | | 15 /C
+ A2 3 | | 14 /E
+ Q0 4 | SN74259 | 13 D
+ Q1 5 | F 9334 | 12 Q7
+ Q2 6 | | 11 Q6
+ Q3 7 | | 10 Q5
+ GND 8 |___________| 9 Q4
+
+ ____ ____
+ Q7 1 |* \_/ | 16 Vdd
+ RESET 2 | | 15 Q6
+ DATA 3 | | 14 Q5
+ WRITE DISABLE 4 | | 13 Q4
+ A0 5 | CD4099B | 12 Q3
+ A1 6 | | 11 Q2
+ A2 7 | | 10 Q1
+ Vss 8 |___________| 9 Q0
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef DEVICES_MACHINE_74259_H
+#define DEVICES_MACHINE_74259_H
+
+//**************************************************************************
+// CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 0, DEVCB_##_devcb);
+#define MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 1, DEVCB_##_devcb);
+#define MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 2, DEVCB_##_devcb);
+#define MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 3, DEVCB_##_devcb);
+#define MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 4, DEVCB_##_devcb);
+#define MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 5, DEVCB_##_devcb);
+#define MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 6, DEVCB_##_devcb);
+#define MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_q_out_cb(*device, 7, DEVCB_##_devcb);
+
+#define MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(_devcb) \
+ devcb = &addressable_latch_device::set_parallel_out_cb(*device, DEVCB_##_devcb);
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> addressable_latch_device
+
+class addressable_latch_device : public device_t
+{
+public:
+ // construction/destruction
+ addressable_latch_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ // static configuration
+ template<class Object> static devcb_base &set_q_out_cb(device_t &device, int bit, Object object) { return downcast<addressable_latch_device &>(device).m_q_out_cb[bit].set_callback(object); }
+ template<class Object> static devcb_base &set_parallel_out_cb(device_t &device, Object object) { return downcast<addressable_latch_device &>(device).m_parallel_out_cb.set_callback(object); }
+
+ // data write handlers
+ void write_bit(offs_t offset, bool d);
+ void write_abcd(u8 a, bool d);
+ DECLARE_WRITE8_MEMBER(write_d0);
+ DECLARE_WRITE8_MEMBER(write_d7);
+ DECLARE_WRITE8_MEMBER(write_a0);
+ DECLARE_WRITE8_MEMBER(write_nibble);
+ DECLARE_WRITE8_MEMBER(clear);
+
+ // read handlers
+ DECLARE_READ_LINE_MEMBER(q0_r);
+ DECLARE_READ_LINE_MEMBER(q1_r);
+ DECLARE_READ_LINE_MEMBER(q2_r);
+ DECLARE_READ_LINE_MEMBER(q3_r);
+ DECLARE_READ_LINE_MEMBER(q4_r);
+ DECLARE_READ_LINE_MEMBER(q5_r);
+ DECLARE_READ_LINE_MEMBER(q6_r);
+ DECLARE_READ_LINE_MEMBER(q7_r);
+ u8 output_state() const { return m_q; }
+
+ // control inputs
+ DECLARE_WRITE_LINE_MEMBER(enable_w);
+ DECLARE_WRITE_LINE_MEMBER(clear_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual bool is_cmos() const { return false; }
+
+private:
+ // internal helpers
+ void update_bit();
+ void clear_outputs(u8 new_q);
+
+ // device callbacks
+ devcb_write_line m_q_out_cb[8]; // output line callback array
+ devcb_write8 m_parallel_out_cb; // parallel output option
+
+ // internal state
+ u8 m_address; // address input
+ bool m_data; // data bit input
+ u8 m_q; // latched output state
+ bool m_enable; // enable/load active state
+ bool m_clear; // clear/reset active state
+};
+
+// ======================> ls259_device
+
+class ls259_device : public addressable_latch_device
+{
+public:
+ ls259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+// ======================> hc259_device
+
+class hc259_device : public addressable_latch_device
+{
+public:
+ hc259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+// ======================> hct259_device
+
+class hct259_device : public addressable_latch_device
+{
+public:
+ hct259_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+// ======================> f9334_device
+
+class f9334_device : public addressable_latch_device
+{
+public:
+ f9334_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+// ======================> cd4099_device
+
+class cd4099_device : public addressable_latch_device
+{
+public:
+ cd4099_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ virtual bool is_cmos() const override { return true; }
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(LS259, ls259_device)
+DECLARE_DEVICE_TYPE(HC259, hc259_device)
+DECLARE_DEVICE_TYPE(HCT259, hct259_device)
+DECLARE_DEVICE_TYPE(F9334, f9334_device)
+DECLARE_DEVICE_TYPE(CD4099, cd4099_device)
+
+#endif
diff --git a/src/devices/machine/dm9334.cpp b/src/devices/machine/dm9334.cpp
deleted file mode 100644
index b4693ad7545..00000000000
--- a/src/devices/machine/dm9334.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ryan Holtz
-/*****************************************************************************
-
- (DM)9334 8-Bit Addressable Latch
-
-*****************************************************************************/
-
-#include "emu.h"
-#include "dm9334.h"
-
-DEFINE_DEVICE_TYPE(DM9334, dm9334_device, "dm9934", "NS [DM]9934 8-bit Addressable Latch")
-
-dm9334_device::dm9334_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, DM9334, tag, owner, clock)
- , m_out_func(*this)
- , m_q0_func(*this)
- , m_q1_func(*this)
- , m_q2_func(*this)
- , m_q3_func(*this)
- , m_q4_func(*this)
- , m_q5_func(*this)
- , m_q6_func(*this)
- , m_q7_func(*this)
- , m_e(0)
- , m_c(0)
- , m_d(0)
- , m_a(0)
- , m_out(0)
-{
-}
-
-void dm9334_device::device_start()
-{
- init();
-
- save_item(NAME(m_e));
- save_item(NAME(m_c));
- save_item(NAME(m_d));
- save_item(NAME(m_a));
- save_item(NAME(m_out));
-
- m_out_func.resolve_safe();
- m_q0_func.resolve_safe();
- m_q1_func.resolve_safe();
- m_q2_func.resolve_safe();
- m_q3_func.resolve_safe();
- m_q4_func.resolve_safe();
- m_q5_func.resolve_safe();
- m_q6_func.resolve_safe();
- m_q7_func.resolve_safe();
-}
-
-void dm9334_device::device_reset()
-{
- init();
-}
-
-void dm9334_device::init()
-{
- m_e = 0;
- m_c = 0;
- m_d = 0;
- m_a = 0;
- m_out = 0;
-}
-
-void dm9334_device::tick()
-{
- uint8_t last_out = m_out;
-
- mode_t mode = static_cast<mode_t>((m_e << 1) | m_c);
- switch(mode)
- {
- case mode_t::CLEAR:
- m_out = 0;
- break;
-
- case mode_t::DEMUX:
- m_out = (m_d << m_a);
- break;
-
- case mode_t::MEMORY:
- // Preserve previous state
- break;
-
- case mode_t::LATCH:
- m_out &= ~(1 << m_a);
- m_out |= (m_d << m_a);
- break;
- }
-
- if (m_out != last_out)
- {
- m_out_func(m_out);
-
- for (int bit = 0; bit < 8; bit++)
- {
- if (BIT(m_out, bit) == BIT(last_out, bit))
- continue;
-
- switch(bit)
- {
- case 0: m_q0_func(BIT(m_out, bit)); break;
- case 1: m_q1_func(BIT(m_out, bit)); break;
- case 2: m_q2_func(BIT(m_out, bit)); break;
- case 3: m_q3_func(BIT(m_out, bit)); break;
- case 4: m_q4_func(BIT(m_out, bit)); break;
- case 5: m_q5_func(BIT(m_out, bit)); break;
- case 6: m_q6_func(BIT(m_out, bit)); break;
- case 7: m_q7_func(BIT(m_out, bit)); break;
- }
- }
- }
-}
-
-WRITE_LINE_MEMBER( dm9334_device::e_w )
-{
- uint8_t last_e = m_e;
- m_e = state & 1;
- if (last_e != m_e)
- tick();
-}
-
-WRITE_LINE_MEMBER( dm9334_device::c_w )
-{
- uint8_t last_c = m_c;
- m_c = state & 1;
- if (last_c != m_c)
- tick();
-}
-
-WRITE_LINE_MEMBER( dm9334_device::d_w )
-{
- uint8_t last_d = m_d;
- m_d = state & 1;
- if (last_d != m_d)
- tick();
-}
-
-WRITE_LINE_MEMBER( dm9334_device::a0_w )
-{
- uint8_t last_a = m_a;
- m_a &= ~(1 << 0);
- m_a |= (state & 1) << 0;
- if (last_a != m_a)
- tick();
-}
-
-WRITE_LINE_MEMBER( dm9334_device::a1_w )
-{
- uint8_t last_a = m_a;
- m_a &= ~(1 << 1);
- m_a |= (state & 1) << 1;
- if (last_a != m_a)
- tick();
-}
-
-WRITE_LINE_MEMBER( dm9334_device::a2_w )
-{
- uint8_t last_a = m_a;
- m_a &= ~(1 << 2);
- m_a |= (state & 1) << 2;
- if (last_a != m_a)
- tick();
-}
-
-WRITE8_MEMBER( dm9334_device::a_w )
-{
- uint8_t last_a = m_a;
- m_a = data & 0x7;
- if (last_a != m_a)
- tick();
-}
-
-READ8_MEMBER( dm9334_device::output_r )
-{
- return m_out;
-}
-
-READ_LINE_MEMBER( dm9334_device::q0_r ) { return BIT(m_out, 0); }
-READ_LINE_MEMBER( dm9334_device::q1_r ) { return BIT(m_out, 1); }
-READ_LINE_MEMBER( dm9334_device::q2_r ) { return BIT(m_out, 2); }
-READ_LINE_MEMBER( dm9334_device::q3_r ) { return BIT(m_out, 3); }
-READ_LINE_MEMBER( dm9334_device::q4_r ) { return BIT(m_out, 4); }
-READ_LINE_MEMBER( dm9334_device::q5_r ) { return BIT(m_out, 5); }
-READ_LINE_MEMBER( dm9334_device::q6_r ) { return BIT(m_out, 6); }
-READ_LINE_MEMBER( dm9334_device::q7_r ) { return BIT(m_out, 7); }
diff --git a/src/devices/machine/dm9334.h b/src/devices/machine/dm9334.h
deleted file mode 100644
index cc71862e686..00000000000
--- a/src/devices/machine/dm9334.h
+++ /dev/null
@@ -1,182 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Ryan Holtz
-/*****************************************************************************
-
- (DM)9334 8-Bit Addressable Latch
-
-******************************************************************************
-
- Connection Diagram:
- ___ ___
- A0 1 |* u | 16 Vcc
- A1 2 | | 15 /C
- A2 3 | | 14 /E
- Q0 4 | | 13 D
- Q1 5 | | 12 Q7
- Q2 6 | | 11 Q6
- Q3 7 | | 10 Q5
- GND 8 |_______| 9 Q4
-
-***********************************************************************
-
- Function Tables:
-
- /E /C Mode
- L H Addressable Latch
- H H Memory
- L L Active High Eight
- Channel Demultiplexer
- H L Clear
-
- ___________________________________________________________________________________________
- | Inputs | Present Output States | |
- |---------------------------|-------------------------------------------------| Mode |
- | /C /E | D | A0 A1 A2 | Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 | |
- |---------|---|-------------|-------------------------------------------------|-------------|
- | L H | X | X X X | L L L L L L L L | Clear |
- |---------|---|-------------|-------------------------------------------------|-------------|
- | L L | L | L L L | L L L L L L L L | |
- | L L | H | L L L | H L L L L L L L | |
- | L L | L | H L L | L L L L L L L L | |
- | L L | H | H L L | L H L L L L L L | |
- | * * | * | * | * | Demultiplex |
- | * * | * | * | * | |
- | * * | * | * | * | |
- | * * | * | * | * | |
- | L L | H | H H H | L L L L L L L H | |
- |---------|---|-------------|-------------------------------------------------|-------------|
- | H H | X | X X X | Qn-1 | Memory |
- |---------|---|-------------|-------------------------------------------------|-------------|
- | H L | L | L L L | L Qn-1 Qn-1 Qn-1 | |
- | H L | H | L L L | H Qn-1 Qn-1 | |
- | H L | L | H L L | Qn-1 L Qn-1 | |
- | H L | H | H L L | Qn-1 H Qn-1 | |
- | * * | * | * | * | |
- | * * | * | * | * | |
- | * * | * | * | * | |
- | H L | L | H H H | Qn-1 Qn-1 L | |
- | H L | H | H H H | Qn-1 Qn-1 H | |
- |---------|---|-------------|-------------------------------------------------|-------------|
-
- X = Don't Care Condition
- L = Low Voltage Level
- H = High Voltage Level
- Qn-1 = Previous Output State
-
-**********************************************************************/
-
-#ifndef MAME_MACHINE_DM9334_H
-#define MAME_MACHINE_DM9334_H
-
-#pragma once
-
-
-#define MCFG_DM9334_OUTPUT_CB(_devcb) \
- devcb = &dm9334_device::set_out_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q0_CB(_devcb) \
- devcb = &dm9334_device::set_q0_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q1_CB(_devcb) \
- devcb = &dm9334_device::set_q1_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q2_CB(_devcb) \
- devcb = &dm9334_device::set_q2_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q3_CB(_devcb) \
- devcb = &dm9334_device::set_q3_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q4_CB(_devcb) \
- devcb = &dm9334_device::set_q4_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q5_CB(_devcb) \
- devcb = &dm9334_device::set_q5_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q6_CB(_devcb) \
- devcb = &dm9334_device::set_q6_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_Q7_CB(_devcb) \
- devcb = &dm9334_device::set_q7_cb(*device, DEVCB_##_devcb);
-
-#define MCFG_DM9334_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, DM9334, 0)
-
-class dm9334_device : public device_t
-{
-public:
- // construction/destruction
- dm9334_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- // static configuration helpers
- template <class Object> static devcb_base &set_out_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_out_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q0_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q0_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q1_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q1_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q2_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q2_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q3_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q3_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q4_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q4_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q5_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q5_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q6_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q6_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> static devcb_base &set_q7_cb(device_t &device, Object &&cb) { return downcast<dm9334_device &>(device).m_q7_func.set_callback(std::forward<Object>(cb)); }
-
- DECLARE_WRITE_LINE_MEMBER( e_w );
- DECLARE_WRITE_LINE_MEMBER( c_w );
- DECLARE_WRITE_LINE_MEMBER( d_w );
- DECLARE_WRITE_LINE_MEMBER( a0_w );
- DECLARE_WRITE_LINE_MEMBER( a1_w );
- DECLARE_WRITE_LINE_MEMBER( a2_w );
- DECLARE_WRITE8_MEMBER( a_w );
-
- DECLARE_READ8_MEMBER( output_r );
- DECLARE_READ_LINE_MEMBER( q0_r );
- DECLARE_READ_LINE_MEMBER( q1_r );
- DECLARE_READ_LINE_MEMBER( q2_r );
- DECLARE_READ_LINE_MEMBER( q3_r );
- DECLARE_READ_LINE_MEMBER( q4_r );
- DECLARE_READ_LINE_MEMBER( q5_r );
- DECLARE_READ_LINE_MEMBER( q6_r );
- DECLARE_READ_LINE_MEMBER( q7_r );
-
- uint8_t get_output() const { return m_out; }
-
-protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
-private:
- enum class mode_t
- {
- DEMUX = 0x00,
- LATCH = 0x01,
- CLEAR = 0x02,
- MEMORY = 0x03
- };
-
- void init();
- void tick();
-
- // callbacks
- devcb_write_line m_out_func;
- devcb_write_line m_q0_func;
- devcb_write_line m_q1_func;
- devcb_write_line m_q2_func;
- devcb_write_line m_q3_func;
- devcb_write_line m_q4_func;
- devcb_write_line m_q5_func;
- devcb_write_line m_q6_func;
- devcb_write_line m_q7_func;
-
- // inputs
- uint8_t m_e; // pin 14
- uint8_t m_c; // pin 15
- uint8_t m_d; // pin 13
- uint8_t m_a; // pins 1-3 from LSB to MSB
-
- // outputs
- uint8_t m_out; // pins 4-7 and 9-12 from LSB to MSB
-};
-
-// device type definition
-DECLARE_DEVICE_TYPE(DM9334, dm9334_device)
-
-#endif // MAME_MACHINE_DM9334_H
diff --git a/src/devices/machine/wozfdc.cpp b/src/devices/machine/wozfdc.cpp
index 1350ce4b126..df7570f7cd7 100644
--- a/src/devices/machine/wozfdc.cpp
+++ b/src/devices/machine/wozfdc.cpp
@@ -41,12 +41,22 @@ const tiny_rom_entry *wozfdc_device::device_rom_region() const
return ROM_NAME( diskiing );
}
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+MACHINE_CONFIG_MEMBER( wozfdc_device::device_add_mconfig )
+ MCFG_DEVICE_ADD("phaselatch", F9334, 0) // 9334 on circuit diagram but 74LS259 in parts list; actual chip may vary
+ MCFG_ADDRESSABLE_LATCH_PARALLEL_OUT_CB(WRITE8(wozfdc_device, set_phase))
+MACHINE_CONFIG_END
+
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
wozfdc_device::wozfdc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, type, tag, owner, clock)
+ device_t(mconfig, type, tag, owner, clock),
+ m_phaselatch(*this, "phaselatch")
{
}
@@ -75,7 +85,6 @@ void wozfdc_device::device_start()
save_item(NAME(mode_write));
save_item(NAME(mode_load));
save_item(NAME(active));
- save_item(NAME(phases));
save_item(NAME(external_io_select));
save_item(NAME(cycles));
save_item(NAME(data_reg));
@@ -91,7 +100,6 @@ void wozfdc_device::device_reset()
{
floppy = nullptr;
active = MODE_IDLE;
- phases = 0x00;
mode_write = false;
mode_load = false;
last_6502_write = 0x00;
@@ -208,21 +216,16 @@ WRITE8_MEMBER(wozfdc_device::write)
last_6502_write = data;
}
-void wozfdc_device::phase(int ph, bool on)
+WRITE8_MEMBER(wozfdc_device::set_phase)
{
- if(on)
- phases |= 1 << ph;
- else
- phases &= ~(1 << ph);
-
- if(floppy && active)
- floppy->seek_phase_w(phases);
+ if (floppy && active)
+ floppy->seek_phase_w(data);
}
void wozfdc_device::control(int offset)
{
if(offset < 8)
- phase(offset >> 1, offset & 1);
+ m_phaselatch->write_bit(offset >> 1, offset & 1);
else
switch(offset) {
diff --git a/src/devices/machine/wozfdc.h b/src/devices/machine/wozfdc.h
index beb076ee11c..13c3205416d 100644
--- a/src/devices/machine/wozfdc.h
+++ b/src/devices/machine/wozfdc.h
@@ -15,6 +15,7 @@
#include "imagedev/floppy.h"
#include "formats/flopimg.h"
+#include "machine/74259.h"
//**************************************************************************
// TYPE DEFINITIONS
@@ -27,6 +28,7 @@ class wozfdc_device:
public:
// optional information overrides
virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
DECLARE_READ8_MEMBER(read);
DECLARE_WRITE8_MEMBER(write);
@@ -40,7 +42,7 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
void control(int offset);
- void phase(int ph, bool on);
+ DECLARE_WRITE8_MEMBER(set_phase);
uint64_t time_to_cycles(const attotime &tm);
attotime cycles_to_time(uint64_t cycles);
void a3_update_drive_sel();
@@ -55,6 +57,8 @@ protected:
floppy_connector *floppy0, *floppy1, *floppy2, *floppy3;
floppy_image_device *floppy;
+ required_device<addressable_latch_device> m_phaselatch;
+
uint64_t cycles;
uint8_t data_reg, address;
attotime write_start_time;
@@ -66,7 +70,6 @@ protected:
uint8_t last_6502_write;
bool mode_write, mode_load;
int active;
- uint8_t phases;
emu_timer *timer, *delay_timer;
bool external_drive_select;
bool external_io_select;
diff --git a/src/devices/sound/namco.cpp b/src/devices/sound/namco.cpp
index 363b03d21f0..04e73d03b81 100644
--- a/src/devices/sound/namco.cpp
+++ b/src/devices/sound/namco.cpp
@@ -263,9 +263,9 @@ uint32_t namco_audio_device::namco_update_one(stream_sample_t *buffer, int lengt
0x1f: ch 2 volume
*/
-WRITE8_MEMBER( namco_device::pacman_sound_enable_w )
+WRITE_LINE_MEMBER(namco_device::pacman_sound_enable_w)
{
- m_sound_enable = data;
+ m_sound_enable = state;
}
WRITE8_MEMBER( namco_device::pacman_sound_w )
@@ -491,9 +491,9 @@ WRITE8_MEMBER( namco_device::polepos_sound_w )
0x3e ch 7 waveform select & frequency
*/
-void namco_15xx_device::mappy_sound_enable(int enable)
+WRITE_LINE_MEMBER(namco_15xx_device::mappy_sound_enable)
{
- m_sound_enable = enable;
+ m_sound_enable = state;
}
WRITE8_MEMBER(namco_15xx_device::namco_15xx_w)
diff --git a/src/devices/sound/namco.h b/src/devices/sound/namco.h
index 82df64bdc24..d1ef231e66c 100644
--- a/src/devices/sound/namco.h
+++ b/src/devices/sound/namco.h
@@ -82,13 +82,13 @@ class namco_device : public namco_audio_device
public:
namco_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_WRITE8_MEMBER( pacman_sound_enable_w );
- DECLARE_WRITE8_MEMBER( pacman_sound_w );
+ DECLARE_WRITE_LINE_MEMBER(pacman_sound_enable_w);
+ DECLARE_WRITE8_MEMBER(pacman_sound_w);
void polepos_sound_enable(int enable);
- DECLARE_READ8_MEMBER( polepos_sound_r );
- DECLARE_WRITE8_MEMBER( polepos_sound_w );
+ DECLARE_READ8_MEMBER(polepos_sound_r);
+ DECLARE_WRITE8_MEMBER(polepos_sound_w);
protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -104,7 +104,7 @@ public:
DECLARE_READ8_MEMBER( sharedram_r );
DECLARE_WRITE8_MEMBER( sharedram_w );
- void mappy_sound_enable(int enable);
+ DECLARE_WRITE_LINE_MEMBER(mappy_sound_enable);
protected:
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
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;
}