summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/bwidow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/bwidow.cpp')
-rw-r--r--src/mame/drivers/bwidow.cpp51
1 files changed, 40 insertions, 11 deletions
diff --git a/src/mame/drivers/bwidow.cpp b/src/mame/drivers/bwidow.cpp
index eb41b77ea1d..c71167bfae6 100644
--- a/src/mame/drivers/bwidow.cpp
+++ b/src/mame/drivers/bwidow.cpp
@@ -225,7 +225,6 @@
#include "machine/watchdog.h"
#include "video/vector.h"
#include "video/avgdvg.h"
-#include "machine/atari_vg.h"
#include "sound/pokey.h"
#include "sound/discrete.h"
@@ -359,6 +358,36 @@ WRITE8_MEMBER(bwidow_state::spacduel_coin_counter_w)
/*************************************
*
+ * High score EAROM
+ *
+ *************************************/
+
+READ8_MEMBER(bwidow_state::earom_read)
+{
+ return m_earom->data();
+}
+
+WRITE8_MEMBER(bwidow_state::earom_write)
+{
+ m_earom->set_address(offset & 0x3f);
+ m_earom->set_data(data);
+}
+
+WRITE8_MEMBER(bwidow_state::earom_control_w)
+{
+ // CK = DB0, C1 = /DB2, C2 = DB1, CS1 = DB3, /CS2 = GND
+ m_earom->set_control(BIT(data, 3), 1, !BIT(data, 2), BIT(data, 1));
+ m_earom->set_clk(BIT(data, 0));
+}
+
+void bwidow_state::machine_reset()
+{
+ earom_control_w(machine().dummy_space(), 0, 0);
+}
+
+
+/*************************************
+ *
* Interrupt ack
*
*************************************/
@@ -382,7 +411,7 @@ void bwidow_state::bwidow_map(address_map &map)
map(0x2800, 0x5fff).rom();
map(0x6000, 0x67ff).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x6800, 0x6fff).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write));
- map(0x7000, 0x7000).r("earom", FUNC(atari_vg_earom_device::read));
+ map(0x7000, 0x7000).r(FUNC(bwidow_state::earom_read));
map(0x7800, 0x7800).portr("IN0");
map(0x8000, 0x8000).portr("IN3");
map(0x8800, 0x8800).portr("IN4");
@@ -390,8 +419,8 @@ void bwidow_state::bwidow_map(address_map &map)
map(0x8840, 0x8840).w("avg", FUNC(avg_device::go_w));
map(0x8880, 0x8880).w("avg", FUNC(avg_device::reset_w));
map(0x88c0, 0x88c0).w(FUNC(bwidow_state::irq_ack_w)); /* interrupt acknowledge */
- map(0x8900, 0x8900).w("earom", FUNC(atari_vg_earom_device::ctrl_w));
- map(0x8940, 0x897f).w("earom", FUNC(atari_vg_earom_device::write));
+ map(0x8900, 0x8900).w(FUNC(bwidow_state::earom_control_w));
+ map(0x8940, 0x897f).w(FUNC(bwidow_state::earom_write));
map(0x8980, 0x89ed).nopw(); /* watchdog clear */
map(0x9000, 0xffff).rom();
}
@@ -410,9 +439,9 @@ void bwidow_state::bwidowp_map(address_map &map)
map(0x4000, 0x47ff).ram().share("vectorram").region("maincpu", 0x4000);
map(0x4800, 0x6fff).rom();
map(0x6000, 0x6000).w(FUNC(bwidow_state::irq_ack_w)); /* interrupt acknowledge */
- map(0x8000, 0x803f).w("earom", FUNC(atari_vg_earom_device::write));
- map(0x8800, 0x8800).w("earom", FUNC(atari_vg_earom_device::ctrl_w));
- map(0x9000, 0x9000).r("earom", FUNC(atari_vg_earom_device::read));
+ map(0x8000, 0x803f).w(FUNC(bwidow_state::earom_write));
+ map(0x8800, 0x8800).w(FUNC(bwidow_state::earom_control_w));
+ map(0x9000, 0x9000).r(FUNC(bwidow_state::earom_read));
map(0x9800, 0x9800).nopw(); /* ? written once at startup */
map(0xa000, 0xffff).rom();
}
@@ -423,14 +452,14 @@ void bwidow_state::spacduel_map(address_map &map)
map(0x0800, 0x0800).portr("IN0");
map(0x0900, 0x0907).r(FUNC(bwidow_state::spacduel_IN3_r)); /* IN1 */
map(0x0905, 0x0906).nopw(); /* ignore? */
- map(0x0a00, 0x0a00).r("earom", FUNC(atari_vg_earom_device::read));
+ map(0x0a00, 0x0a00).r(FUNC(bwidow_state::earom_read));
map(0x0c00, 0x0c00).w(FUNC(bwidow_state::spacduel_coin_counter_w)); /* coin out */
map(0x0c80, 0x0c80).w("avg", FUNC(avg_device::go_w));
map(0x0d00, 0x0d00).nopw(); /* watchdog clear */
map(0x0d80, 0x0d80).w("avg", FUNC(avg_device::reset_w));
map(0x0e00, 0x0e00).w(FUNC(bwidow_state::irq_ack_w)); /* interrupt acknowledge */
- map(0x0e80, 0x0e80).w("earom", FUNC(atari_vg_earom_device::ctrl_w));
- map(0x0f00, 0x0f3f).w("earom", FUNC(atari_vg_earom_device::write));
+ map(0x0e80, 0x0e80).w(FUNC(bwidow_state::earom_control_w));
+ map(0x0f00, 0x0f3f).w(FUNC(bwidow_state::earom_write));
map(0x1000, 0x10ff).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x1400, 0x14ff).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x2000, 0x27ff).ram().share("vectorram").region("maincpu", 0x2000);
@@ -741,7 +770,7 @@ MACHINE_CONFIG_START(bwidow_state::bwidow)
MCFG_DEVICE_PROGRAM_MAP(bwidow_map)
MCFG_DEVICE_PERIODIC_INT_DRIVER(bwidow_state, irq0_line_assert, CLOCK_3KHZ / 12)
- MCFG_ATARIVGEAROM_ADD("earom")
+ MCFG_DEVICE_ADD("earom", ER2055)
/* video hardware */
MCFG_VECTOR_ADD("vector")