summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-11-07 07:36:42 +1100
committer Vas Crabb <vas@vastheman.com>2020-11-07 07:38:10 +1100
commitdb4a5328a2a015dc42e6ef0ea0ec97e6f260e9b3 (patch)
treedbd2a6160fad7bc081cbc4edce53ae1992a9cb1f
parentfc0478133374d940ce8a7e60109d956697887087 (diff)
video/avgdvg.cpp: Modernised code somewhat.
bwidow is still broken, all other games seem to work.
-rw-r--r--src/emu/save.cpp15
-rw-r--r--src/emu/save.h2
-rw-r--r--src/mame/drivers/asteroid.cpp27
-rw-r--r--src/mame/drivers/bwidow.cpp39
-rw-r--r--src/mame/drivers/bzone.cpp17
-rw-r--r--src/mame/drivers/mhavoc.cpp145
-rw-r--r--src/mame/drivers/omegrace.cpp42
-rw-r--r--src/mame/drivers/quantum.cpp11
-rw-r--r--src/mame/drivers/starwars.cpp27
-rw-r--r--src/mame/drivers/tempest.cpp59
-rw-r--r--src/mame/drivers/tomcat.cpp13
-rw-r--r--src/mame/video/avgdvg.cpp436
-rw-r--r--src/mame/video/avgdvg.h203
13 files changed, 532 insertions, 504 deletions
diff --git a/src/emu/save.cpp b/src/emu/save.cpp
index 38366b61271..ab6ab7a2843 100644
--- a/src/emu/save.cpp
+++ b/src/emu/save.cpp
@@ -190,13 +190,13 @@ void save_manager::save_memory(device_t *device, const char *module, const char
// create the full name
std::string totalname;
- if (tag != nullptr)
+ if (tag)
totalname = string_format("%s/%s/%X/%s", module, tag, index, name);
else
totalname = string_format("%s/%X/%s", module, index, name);
// insert us into the list
- m_entry_list.emplace_back(std::make_unique<state_entry>(val, totalname, device, module, tag ? tag : "", index, valsize, valcount, blockcount, stride));
+ m_entry_list.emplace_back(std::make_unique<state_entry>(val, std::move(totalname), device, module, tag ? tag : "", index, valsize, valcount, blockcount, stride));
}
@@ -961,12 +961,15 @@ void rewinder::report_error(save_error error, rewind_operation operation)
// state_entry - constructor
//-------------------------------------------------
-save_manager::state_entry::state_entry(void *data, std::string name, device_t *device, std::string module, std::string tag, int index, u8 size, u32 valcount, u32 blockcount, u32 stride)
+save_manager::state_entry::state_entry(
+ void *data,
+ std::string &&name, device_t *device, std::string &&module, std::string &&tag, int index,
+ u8 size, u32 valcount, u32 blockcount, u32 stride)
: m_data(data)
- , m_name(name)
+ , m_name(std::move(name))
, m_device(device)
- , m_module(module)
- , m_tag(tag)
+ , m_module(std::move(module))
+ , m_tag(std::move(tag))
, m_index(index)
, m_typesize(size)
, m_typecount(valcount)
diff --git a/src/emu/save.h b/src/emu/save.h
index 1bd3eb840ba..32ba0526486 100644
--- a/src/emu/save.h
+++ b/src/emu/save.h
@@ -106,7 +106,7 @@ class save_manager
{
public:
// construction/destruction
- state_entry(void *data, std::string name, device_t *device, std::string module, std::string tag, int index, u8 size, u32 valcount, u32 blockcount, u32 stride);
+ state_entry(void *data, std::string &&name, device_t *device, std::string &&module, std::string &&tag, int index, u8 size, u32 valcount, u32 blockcount, u32 stride);
// helpers
void flip_data();
diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp
index 3762bca38ee..4441e09e965 100644
--- a/src/mame/drivers/asteroid.cpp
+++ b/src/mame/drivers/asteroid.cpp
@@ -323,9 +323,9 @@ void asteroid_state::asteroid_map(address_map &map)
map(0x0000, 0x01ff).ram();
map(0x0200, 0x02ff).bankrw("ram1");
map(0x0300, 0x03ff).bankrw("ram2");
- map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
- map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)); // IN1
- map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)).nopw(); // DSW1
+ map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
+ map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)); // IN1
+ map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)).nopw(); // DSW1
map(0x3000, 0x3000).w(m_dvg, FUNC(dvg_device::go_w));
map(0x3200, 0x3200).w("outlatch", FUNC(output_latch_device::write));
map(0x3400, 0x3400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
@@ -333,8 +333,8 @@ void asteroid_state::asteroid_map(address_map &map)
map(0x3a00, 0x3a00).w(FUNC(asteroid_state::asteroid_thump_w));
map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7));
map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w));
- map(0x4000, 0x47ff).ram().share("dvg:vectorram");
- map(0x5000, 0x57ff).rom(); // Vector ROM
+ map(0x4000, 0x47ff).ram(); // vector RAM
+ map(0x5000, 0x57ff).rom(); // vector ROM
map(0x6800, 0x7fff).rom();
}
@@ -345,9 +345,9 @@ void asteroid_state::astdelux_map(address_map &map)
map(0x0000, 0x01ff).ram();
map(0x0200, 0x02ff).bankrw("ram1");
map(0x0300, 0x03ff).bankrw("ram2");
- map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
- map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)).nopw(); // IN1
- map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)); // DSW1
+ map(0x2000, 0x2007).r(FUNC(asteroid_state::asteroid_IN0_r)).nopw(); // IN0
+ map(0x2400, 0x2407).r(FUNC(asteroid_state::asteroid_IN1_r)).nopw(); // IN1
+ map(0x2800, 0x2803).r(FUNC(asteroid_state::asteroid_DSW1_r)); // DSW1
map(0x2c00, 0x2c0f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x2c40, 0x2c7f).r(FUNC(asteroid_state::earom_read));
map(0x3000, 0x3000).w(m_dvg, FUNC(dvg_device::go_w));
@@ -357,8 +357,8 @@ void asteroid_state::astdelux_map(address_map &map)
map(0x3a00, 0x3a00).w(FUNC(asteroid_state::earom_control_w));
map(0x3c00, 0x3c07).w("audiolatch", FUNC(ls259_device::write_d7));
map(0x3e00, 0x3e00).w(FUNC(asteroid_state::asteroid_noise_reset_w));
- map(0x4000, 0x47ff).ram().share("dvg:vectorram");
- map(0x4800, 0x57ff).rom(); // Vector ROM
+ map(0x4000, 0x47ff).ram(); // vector RAM
+ map(0x4800, 0x57ff).rom(); // vector ROM
map(0x6000, 0x7fff).rom();
}
@@ -376,8 +376,8 @@ void asteroid_state::llander_map(address_map &map)
map(0x3400, 0x3400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
map(0x3c00, 0x3c00).w(FUNC(asteroid_state::llander_sounds_w));
map(0x3e00, 0x3e00).w(FUNC(asteroid_state::llander_snd_reset_w));
- map(0x4000, 0x47ff).ram().share("dvg:vectorram");
- map(0x4800, 0x5fff).rom(); // Vector ROM
+ map(0x4000, 0x47ff).ram(); // vector RAM
+ map(0x4800, 0x5fff).rom(); // vector ROM
map(0x5800, 0x5800).nopw(); // INC access?
map(0x6000, 0x7fff).rom();
}
@@ -762,7 +762,8 @@ void asteroid_state::asteroid_base(machine_config &config)
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
DVG(config, m_dvg, 0);
- m_dvg->set_vector_tag("vector");
+ m_dvg->set_vector("vector");
+ m_dvg->set_memory(m_maincpu, AS_PROGRAM, 0x4000);
}
void asteroid_state::asteroid(machine_config &config)
diff --git a/src/mame/drivers/bwidow.cpp b/src/mame/drivers/bwidow.cpp
index 6cd1b95cde3..cb5398ed1ff 100644
--- a/src/mame/drivers/bwidow.cpp
+++ b/src/mame/drivers/bwidow.cpp
@@ -407,21 +407,21 @@ void bwidow_state::irq_ack_w(uint8_t data)
void bwidow_state::bwidow_map(address_map &map)
{
map(0x0000, 0x07ff).ram();
- map(0x2000, 0x27ff).ram().share("avg:vectorram");
- map(0x2800, 0x5fff).rom();
+ map(0x2000, 0x27ff).ram(); // vector RAM
+ map(0x2800, 0x5fff).rom(); // vector 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(FUNC(bwidow_state::earom_read));
map(0x7800, 0x7800).portr("IN0");
map(0x8000, 0x8000).portr("IN3");
map(0x8800, 0x8800).portr("IN4");
- map(0x8800, 0x8800).w(FUNC(bwidow_state::bwidow_misc_w)); /* coin counters, leds */
+ map(0x8800, 0x8800).w(FUNC(bwidow_state::bwidow_misc_w)); // coin counters, LEDs
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(0x88c0, 0x88c0).w(FUNC(bwidow_state::irq_ack_w)); // interrupt acknowledge
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(0x8980, 0x89ed).nopw(); // watchdog clear
map(0x9000, 0xffff).rom();
}
@@ -435,14 +435,14 @@ void bwidow_state::bwidowp_map(address_map &map)
map(0x2000, 0x2000).w("avg", FUNC(avg_device::go_w));
map(0x2800, 0x2800).w("avg", FUNC(avg_device::reset_w));
map(0x3000, 0x3000).w("watchdog", FUNC(watchdog_timer_device::reset_w));
- map(0x3800, 0x3800).w(FUNC(bwidow_state::bwidow_misc_w)); /* coin counters, leds */
- map(0x4000, 0x47ff).ram().share("avg:vectorram");
- map(0x4800, 0x6fff).rom();
- map(0x6000, 0x6000).w(FUNC(bwidow_state::irq_ack_w)); /* interrupt acknowledge */
+ map(0x3800, 0x3800).w(FUNC(bwidow_state::bwidow_misc_w)); // coin counters, LEDs
+ map(0x4000, 0x47ff).ram(); // vector RAM
+ map(0x4800, 0x6fff).rom(); // vector ROM
+ map(0x6000, 0x6000).w(FUNC(bwidow_state::irq_ack_w)); // interrupt acknowledge
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(0x9800, 0x9800).nopw(); // ? written once at startup
map(0xa000, 0xffff).rom();
}
@@ -450,20 +450,20 @@ void bwidow_state::spacduel_map(address_map &map)
{
map(0x0000, 0x03ff).ram();
map(0x0800, 0x0800).portr("IN0");
- map(0x0900, 0x0907).r(FUNC(bwidow_state::spacduel_IN3_r)); /* IN1 */
- map(0x0905, 0x0906).nopw(); /* ignore? */
+ map(0x0900, 0x0907).r(FUNC(bwidow_state::spacduel_IN3_r)); // IN1
+ map(0x0905, 0x0906).nopw(); // ignore?
map(0x0a00, 0x0a00).r(FUNC(bwidow_state::earom_read));
- map(0x0c00, 0x0c00).w(FUNC(bwidow_state::spacduel_coin_counter_w)); /* coin out */
+ 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(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(0x0e00, 0x0e00).w(FUNC(bwidow_state::irq_ack_w)); // interrupt acknowledge
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("avg:vectorram");
- map(0x2800, 0x3fff).rom();
+ map(0x2000, 0x27ff).ram(); // vector RAM
+ map(0x2800, 0x3fff).rom(); // vector ROM
map(0x4000, 0xffff).rom();
}
@@ -781,7 +781,8 @@ void bwidow_state::bwidow(machine_config &config)
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
avg_device &avg(AVG(config, "avg", 0));
- avg.set_vector_tag("vector");
+ avg.set_vector("vector");
+ avg.set_memory(m_maincpu, AS_PROGRAM, 0x2000);
/* sound hardware */
bwidow_audio(config);
@@ -793,6 +794,8 @@ void bwidow_state::bwidowp(machine_config &config)
bwidow(config);
m_maincpu->set_addrmap(AS_PROGRAM, &bwidow_state::bwidowp_map);
+ subdevice<avg_device>("avg")->set_memory(m_maincpu, AS_PROGRAM, 0x4000);
+
WATCHDOG_TIMER(config, "watchdog");
}
diff --git a/src/mame/drivers/bzone.cpp b/src/mame/drivers/bzone.cpp
index 9f278f4fa91..3685d0f3ee4 100644
--- a/src/mame/drivers/bzone.cpp
+++ b/src/mame/drivers/bzone.cpp
@@ -339,16 +339,16 @@ void bzone_state::bzone_map(address_map &map)
map(0x0a00, 0x0a00).portr("DSW0");
map(0x0c00, 0x0c00).portr("DSW1");
map(0x1000, 0x1000).w(FUNC(bzone_state::bzone_coin_counter_w));
- map(0x1200, 0x1200).w("avg", FUNC(avg_bzone_device::go_w));
+ map(0x1200, 0x1200).w("avg", FUNC(avg_device::go_w));
map(0x1400, 0x1400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
- map(0x1600, 0x1600).w("avg", FUNC(avg_bzone_device::reset_w));
+ map(0x1600, 0x1600).w("avg", FUNC(avg_device::reset_w));
map(0x1800, 0x1800).r(m_mathbox, FUNC(mathbox_device::status_r));
map(0x1810, 0x1810).r(m_mathbox, FUNC(mathbox_device::lo_r));
map(0x1818, 0x1818).r(m_mathbox, FUNC(mathbox_device::hi_r));
map(0x1820, 0x182f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x1840, 0x1840).w(FUNC(bzone_state::bzone_sounds_w));
map(0x1860, 0x187f).w(m_mathbox, FUNC(mathbox_device::go_w));
- map(0x2000, 0x2fff).ram().share("avg:vectorram");
+ map(0x2000, 0x2fff).ram();
map(0x3000, 0x7fff).rom();
}
@@ -370,9 +370,9 @@ void redbaron_state::redbaron_map(address_map &map)
map(0x0a00, 0x0a00).portr("DSW0");
map(0x0c00, 0x0c00).portr("DSW1");
map(0x1000, 0x1000).nopw(); /* coin out - Manual states this is "Coin Counter" */
- map(0x1200, 0x1200).w("avg", FUNC(avg_bzone_device::go_w));
+ map(0x1200, 0x1200).w("avg", FUNC(avg_device::go_w));
map(0x1400, 0x1400).w("watchdog", FUNC(watchdog_timer_device::reset_w));
- map(0x1600, 0x1600).w("avg", FUNC(avg_bzone_device::reset_w));
+ map(0x1600, 0x1600).w("avg", FUNC(avg_device::reset_w));
map(0x1800, 0x1800).r("mathbox", FUNC(mathbox_device::status_r));
map(0x1802, 0x1802).portr("IN4");
map(0x1804, 0x1804).r("mathbox", FUNC(mathbox_device::lo_r));
@@ -383,7 +383,7 @@ void redbaron_state::redbaron_map(address_map &map)
map(0x1810, 0x181f).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write));
map(0x1820, 0x185f).rw(FUNC(redbaron_state::earom_read), FUNC(redbaron_state::earom_write));
map(0x1860, 0x187f).nopr().w("mathbox", FUNC(mathbox_device::go_w));
- map(0x2000, 0x2fff).ram().share("avg:vectorram");
+ map(0x2000, 0x2fff).ram();
map(0x3000, 0x7fff).rom();
}
@@ -404,7 +404,7 @@ void redbaron_state::redbaron_map(address_map &map)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Diagnostic Step") \
/* bit 6 is the VG HALT bit. We set it to "low" */\
/* per default (busy vector processor). */\
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_bzone_device, done_r)\
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_device, done_r)\
/* bit 7 is tied to a 3kHz clock */\
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(bzone_state, clock_r)
@@ -596,7 +596,8 @@ void bzone_state::bzone_base(machine_config &config)
m_screen->set_screen_update("vector", FUNC(vector_device::screen_update));
avg_device &avg(AVG_BZONE(config, "avg", 0));
- avg.set_vector_tag("vector");
+ avg.set_vector("vector");
+ avg.set_memory(m_maincpu, AS_PROGRAM, 0x2000);
/* Drivers */
MATHBOX(config, m_mathbox, 0);
diff --git a/src/mame/drivers/mhavoc.cpp b/src/mame/drivers/mhavoc.cpp
index 7fca46c96f7..264b9e9ac79 100644
--- a/src/mame/drivers/mhavoc.cpp
+++ b/src/mame/drivers/mhavoc.cpp
@@ -275,22 +275,23 @@ void mhavoc_state::alpha_map(address_map &map)
map(0x0200, 0x07ff).bankrw("bank1").share("zram0");
map(0x0800, 0x09ff).ram();
map(0x0a00, 0x0fff).bankrw("bank1").share("zram1");
- map(0x1000, 0x1000).r(FUNC(mhavoc_state::mhavoc_gamma_r)); /* Gamma Read Port */
- map(0x1200, 0x1200).portr("IN0").nopw(); /* Alpha Input Port 0 */
- map(0x1400, 0x141f).ram().share("avg:colorram"); /* ColorRAM */
- map(0x1600, 0x1600).w(FUNC(mhavoc_state::mhavoc_out_0_w)); /* Control Signals */
- map(0x1640, 0x1640).w("avg", FUNC(avg_mhavoc_device::go_w)); /* Vector Generator GO */
- map(0x1680, 0x1680).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* Watchdog Clear */
- map(0x16c0, 0x16c0).w("avg", FUNC(avg_mhavoc_device::reset_w)); /* Vector Generator Reset */
- map(0x1700, 0x1700).w(FUNC(mhavoc_state::mhavoc_alpha_irq_ack_w)); /* IRQ ack */
- map(0x1740, 0x1740).w(FUNC(mhavoc_state::mhavoc_rom_banksel_w)); /* Program ROM Page Select */
- map(0x1780, 0x1780).w(FUNC(mhavoc_state::mhavoc_ram_banksel_w)); /* Program RAM Page Select */
- map(0x17c0, 0x17c0).w(FUNC(mhavoc_state::mhavoc_gamma_w)); /* Gamma Communication Write Port */
- map(0x1800, 0x1fff).ram(); /* Shared Beta Ram */
- map(0x2000, 0x3fff).bankr("bank2"); /* Paged Program ROM (32K) */
- map(0x4000, 0x4fff).ram().share("avg:vectorram"); /* Vector Generator RAM */
- map(0x5000, 0x7fff).rom(); /* Vector ROM */
- map(0x8000, 0xffff).rom(); /* Program ROM (32K) */
+ map(0x1000, 0x1000).r(FUNC(mhavoc_state::mhavoc_gamma_r)); // Gamma Read Port
+ map(0x1200, 0x1200).portr("IN0").nopw(); // Alpha Input Port 0
+ map(0x1400, 0x141f).ram().share("avg:colorram"); // ColorRAM
+ map(0x1600, 0x1600).w(FUNC(mhavoc_state::mhavoc_out_0_w)); // Control Signals
+ map(0x1640, 0x1640).w("avg", FUNC(avg_device::go_w)); // Vector Generator GO
+ map(0x1680, 0x1680).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // Watchdog Clear
+ map(0x16c0, 0x16c0).w("avg", FUNC(avg_device::reset_w)); // Vector Generator Reset
+ map(0x1700, 0x1700).w(FUNC(mhavoc_state::mhavoc_alpha_irq_ack_w)); // IRQ ack
+ map(0x1740, 0x1740).w(FUNC(mhavoc_state::mhavoc_rom_banksel_w)); // Program ROM Page Select
+ map(0x1780, 0x1780).w(FUNC(mhavoc_state::mhavoc_ram_banksel_w)); // Program RAM Page Select
+ map(0x17c0, 0x17c0).w(FUNC(mhavoc_state::mhavoc_gamma_w)); // Gamma Communication Write Port
+ map(0x1800, 0x1fff).ram(); // Shared Beta RAM
+ map(0x2000, 0x3fff).bankr("bank2"); // Paged Program ROM (32K)
+ map(0x4000, 0x4fff).ram(); // Vector Generator RAM
+ map(0x5000, 0x5fff).rom().region("vectorrom", 0x0000); // Vector ROM
+ map(0x6000, 0x6fff).rom().region("vectorrom", 0x1000).mirror(0x1000);
+ map(0x8000, 0xffff).rom(); // Program ROM (32K)
}
@@ -324,18 +325,18 @@ a15 a14 a13 a12 a11 a10 a09 a08 a07 a06 a05 a04 a03 a02 a01 a00
void mhavoc_state::gamma_map(address_map &map)
{
- map(0x0000, 0x07ff).ram().mirror(0x1800); /* Program RAM (2K) */
- map(0x2000, 0x203f).rw(FUNC(mhavoc_state::quad_pokeyn_r), FUNC(mhavoc_state::quad_pokeyn_w)).mirror(0x07C0); /* Quad Pokey read/write */
- map(0x2800, 0x2800).portr("IN1").mirror(0x07ff); /* Gamma Input Port */
- map(0x3000, 0x3000).r(FUNC(mhavoc_state::mhavoc_alpha_r)).mirror(0x07ff); /* Alpha Comm. Read Port */
- map(0x3800, 0x3803).portr("DIAL").mirror(0x07fc); /* Roller Controller Input */
- map(0x4000, 0x4000).portr("DSW2").w(FUNC(mhavoc_state::mhavoc_gamma_irq_ack_w)).mirror(0x07ff); /* DSW at 8S, IRQ Acknowledge */
- map(0x4800, 0x4800).w(FUNC(mhavoc_state::mhavoc_out_1_w)).mirror(0x07ff); /* Coin Counters */
- map(0x5000, 0x5000).w(FUNC(mhavoc_state::mhavoc_alpha_w)).mirror(0x07ff); /* Alpha Comm. Write Port */
- //map(0x5800, 0x5800).w(FUNC(mhavoc_state::mhavocrv_speech_data_w)).mirror(0x06ff); /* TMS5220 data write */
- //map(0x5900, 0x5900).w(FUNC(mhavoc_state::mhavocrv_speech_strobe_w)).mirror(0x06ff); /* TMS5220 /WS strobe write */
- map(0x6000, 0x61ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).mirror(0x1e00); /* EEROM */
- map(0x8000, 0xbfff).rom().mirror(0x4000); /* Program ROM (16K) */
+ map(0x0000, 0x07ff).ram().mirror(0x1800); // Program RAM (2K)
+ map(0x2000, 0x203f).rw(FUNC(mhavoc_state::quad_pokeyn_r), FUNC(mhavoc_state::quad_pokeyn_w)).mirror(0x07c0); // Quad Pokey read/write
+ map(0x2800, 0x2800).portr("IN1").mirror(0x07ff); // Gamma Input Port
+ map(0x3000, 0x3000).r(FUNC(mhavoc_state::mhavoc_alpha_r)).mirror(0x07ff); // Alpha Comm. Read Port
+ map(0x3800, 0x3803).portr("DIAL").mirror(0x07fc); // Roller Controller Input
+ map(0x4000, 0x4000).portr("DSW2").w(FUNC(mhavoc_state::mhavoc_gamma_irq_ack_w)).mirror(0x07ff); // DSW at 8S, IRQ Acknowledge
+ map(0x4800, 0x4800).w(FUNC(mhavoc_state::mhavoc_out_1_w)).mirror(0x07ff); // Coin Counters
+ map(0x5000, 0x5000).w(FUNC(mhavoc_state::mhavoc_alpha_w)).mirror(0x07ff); // Alpha Comm. Write Port
+ //map(0x5800, 0x5800).w(FUNC(mhavoc_state::mhavocrv_speech_data_w)).mirror(0x06ff); // TMS5220 data write
+ //map(0x5900, 0x5900).w(FUNC(mhavoc_state::mhavocrv_speech_strobe_w)).mirror(0x06ff); // TMS5220 /WS strobe write
+ map(0x6000, 0x61ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).mirror(0x1e00); // EEROM
+ map(0x8000, 0xbfff).rom().region("gamma", 0).mirror(0x4000); // Program ROM (16K)
}
@@ -354,22 +355,23 @@ void mhavoc_state::alphaone_map(address_map &map)
map(0x0800, 0x09ff).ram();
map(0x0a00, 0x0fff).bankrw("bank1").share("zram1");
map(0x1020, 0x103f).rw(FUNC(mhavoc_state::dual_pokey_r), FUNC(mhavoc_state::dual_pokey_w));
- map(0x1040, 0x1040).portr("IN0").nopw(); /* Alpha Input Port 0 */
- map(0x1060, 0x1060).portr("IN1"); /* Gamma Input Port */
- map(0x1080, 0x1080).portr("DIAL"); /* Roller Controller Input*/
- map(0x10a0, 0x10a0).w(FUNC(mhavoc_state::alphaone_out_0_w)); /* Control Signals */
- map(0x10a4, 0x10a4).w("avg", FUNC(avg_mhavoc_device::go_w)); /* Vector Generator GO */
- map(0x10a8, 0x10a8).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* Watchdog Clear */
- map(0x10ac, 0x10ac).w("avg", FUNC(avg_mhavoc_device::reset_w)); /* Vector Generator Reset */
- map(0x10b0, 0x10b0).w(FUNC(mhavoc_state::mhavoc_alpha_irq_ack_w)); /* IRQ ack */
+ map(0x1040, 0x1040).portr("IN0").nopw(); // Alpha Input Port 0
+ map(0x1060, 0x1060).portr("IN1"); // Gamma Input Port
+ map(0x1080, 0x1080).portr("DIAL"); // Roller Controller Input
+ map(0x10a0, 0x10a0).w(FUNC(mhavoc_state::alphaone_out_0_w)); // Control Signals
+ map(0x10a4, 0x10a4).w("avg", FUNC(avg_device::go_w)); // Vector Generator GO
+ map(0x10a8, 0x10a8).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // Watchdog Clear
+ map(0x10ac, 0x10ac).w("avg", FUNC(avg_device::reset_w)); // Vector Generator Reset
+ map(0x10b0, 0x10b0).w(FUNC(mhavoc_state::mhavoc_alpha_irq_ack_w)); // IRQ ack
map(0x10b4, 0x10b4).w(FUNC(mhavoc_state::mhavoc_rom_banksel_w));
map(0x10b8, 0x10b8).w(FUNC(mhavoc_state::mhavoc_ram_banksel_w));
- map(0x10e0, 0x10ff).nopr().writeonly().share("avg:colorram"); /* ColorRAM */
- map(0x1800, 0x18ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)); /* EEROM */
- map(0x2000, 0x3fff).bankr("bank2"); /* Paged Program ROM (32K) */
- map(0x4000, 0x4fff).ram().share("avg:vectorram"); /* Vector Generator RAM */
- map(0x5000, 0x7fff).rom(); /* Vector ROM */
- map(0x8000, 0xffff).rom(); /* Program ROM (32K) */
+ map(0x10e0, 0x10ff).nopr().writeonly().share("avg:colorram"); // ColorRAM
+ map(0x1800, 0x18ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)); // EEROM
+ map(0x2000, 0x3fff).bankr("bank2"); // Paged Program ROM (32K)
+ map(0x4000, 0x4fff).ram(); // Vector Generator RAM
+ map(0x5000, 0x5fff).rom().region("vectorrom", 0); // Vector ROM
+ map(0x6000, 0x6fff).rom().region("vectorrom", 0).mirror(0x1000);
+ map(0x8000, 0xffff).rom(); // Program ROM (32K)
}
@@ -399,7 +401,7 @@ static INPUT_PORTS_START( mhavoc )
/* Bit 2 = Gamma xmtd flag */
/* Bit 1 = 2.4kHz (divide 2.5MHz by 1024) */
/* Bit 0 = Vector generator halt flag */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_mhavoc_device, done_r)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_device, done_r)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(mhavoc_state, clock_r)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(mhavoc_state, gamma_xmtd_r)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(mhavoc_state, gamma_rcvd_r)
@@ -498,7 +500,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( alphaone )
PORT_START("IN0") /* alpha (player_1 = 0) */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_mhavoc_device, done_r)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_device, done_r)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(mhavoc_state, clock_r)
PORT_BIT( 0x7c, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
@@ -545,7 +547,8 @@ void mhavoc_state::mhavoc(machine_config &config)
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
avg_device &avg(AVG_MHAVOC(config, "avg", 0));
- avg.set_vector_tag("vector");
+ avg.set_vector("vector");
+ avg.set_memory(m_alpha, AS_PROGRAM, 0x4000);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -623,11 +626,12 @@ void mhavoc_state::alphaone(machine_config &config)
ROM_START( mhavoc )
/* Alpha Processor ROMs */
- ROM_REGION( 0x18000, "alpha", 0 ) /* 152KB for ROMs */
/* Vector Generator ROM */
- ROM_LOAD( "136025.210", 0x05000, 0x2000, CRC(c67284ca) SHA1(d9adad80c266d36429444f483cac4ebcf1fec7b8) )
+ ROM_REGION( 0x2000, "vectorrom", 0 )
+ ROM_LOAD( "136025.210", 0x0000, 0x2000, CRC(c67284ca) SHA1(d9adad80c266d36429444f483cac4ebcf1fec7b8) )
/* Program ROM */
+ ROM_REGION( 0x18000, "alpha", 0 ) /* 152KB for ROMs */
ROM_LOAD( "136025.216", 0x08000, 0x4000, CRC(522a9cc0) SHA1(bbd75e01c45220e1c87bd1e013cf2c2fb9f376b2) )
ROM_LOAD( "136025.217", 0x0c000, 0x4000, CRC(ea3d6877) SHA1(27823c1b546c073b37ff11a8cb25312ea71673c2) )
@@ -641,22 +645,23 @@ ROM_START( mhavoc )
ROM_LOAD( "136025.107", 0x4000, 0x4000, CRC(5f81c5f3) SHA1(be4055727a2d4536e37ec20150deffdb5af5b01f) ) /* page 2+3 */
/* Gamma Processor ROM */
- ROM_REGION( 0x10000, "gamma", 0 )
- ROM_LOAD( "136025.108", 0x08000, 0x4000, CRC(93faf210) SHA1(7744368a1d520f986d1c4246113a7e24fcdd6d04) ) /* mirrored to c000-ffff for reset+interrupt vectors */
+ ROM_REGION( 0x4000, "gamma", 0 )
+ ROM_LOAD( "136025.108", 0x0000, 0x4000, CRC(93faf210) SHA1(7744368a1d520f986d1c4246113a7e24fcdd6d04) ) /* mirrored to c000-ffff for reset+interrupt vectors */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
- ROM_LOAD( "136002-125.6c", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) )
+ ROM_LOAD( "136002-125.6c",0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) )
ROM_END
ROM_START( mhavoc2 )
/* Alpha Processor ROMs */
- ROM_REGION( 0x18000, "alpha", 0 )
/* Vector Generator ROM */
- ROM_LOAD( "136025.110", 0x05000, 0x2000, CRC(16eef583) SHA1(277252bd716dd96d5b98ec5e33a3a6a3bc1a9abf) )
+ ROM_REGION( 0x2000, "vectorrom", 0 )
+ ROM_LOAD( "136025.110", 0x0000, 0x2000, CRC(16eef583) SHA1(277252bd716dd96d5b98ec5e33a3a6a3bc1a9abf) )
/* Program ROM */
+ ROM_REGION( 0x18000, "alpha", 0 )
ROM_LOAD( "136025.103", 0x08000, 0x4000, CRC(bf192284) SHA1(4c2dc3ba75122e521ebf2c42f89b31737613c2df) )
ROM_LOAD( "136025.104", 0x0c000, 0x4000, CRC(833c5d4e) SHA1(932861b2a329172247c1a5d0a6498a00a1fce814) )
@@ -672,22 +677,23 @@ ROM_START( mhavoc2 )
/* the last 0x1000 is used for the 2 RAM pages */
/* Gamma Processor ROM */
- ROM_REGION( 0x10000, "gamma", 0 )
- ROM_LOAD( "136025.108", 0x08000, 0x4000, CRC(93faf210) SHA1(7744368a1d520f986d1c4246113a7e24fcdd6d04) ) /* mirrored to c000-ffff for reset+interrupt vectors */
+ ROM_REGION( 0x4000, "gamma", 0 )
+ ROM_LOAD( "136025.108", 0x0000, 0x4000, CRC(93faf210) SHA1(7744368a1d520f986d1c4246113a7e24fcdd6d04) ) /* mirrored to c000-ffff for reset+interrupt vectors */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
- ROM_LOAD( "136002-125.6c", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) )
+ ROM_LOAD( "136002-125.6c",0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) )
ROM_END
ROM_START( mhavocrv )
/* Alpha Processor ROMs */
- ROM_REGION( 0x18000, "alpha", 0 ) /* 152KB for ROMs */
/* Vector Generator ROM */
- ROM_LOAD( "136025.210", 0x05000, 0x2000, CRC(c67284ca) SHA1(d9adad80c266d36429444f483cac4ebcf1fec7b8) )
+ ROM_REGION( 0x2000, "vectorrom", 0 )
+ ROM_LOAD( "136025.210", 0x0000, 0x2000, CRC(c67284ca) SHA1(d9adad80c266d36429444f483cac4ebcf1fec7b8) )
/* Program ROM */
+ ROM_REGION( 0x18000, "alpha", 0 ) /* 152KB for ROMs */
ROM_LOAD( "136025.916", 0x08000, 0x4000, CRC(1255bd7f) SHA1(e277fe7b23ce8cf1294b6bfa5548b24a6c8952ce) )
ROM_LOAD( "136025.917", 0x0c000, 0x4000, CRC(21889079) SHA1(d1ad6d9fa1432912e376bca50ceeefac2bfd6ac3) )
@@ -703,22 +709,23 @@ ROM_START( mhavocrv )
/* the last 0x1000 is used for the 2 RAM pages */
/* Gamma Processor ROM */
- ROM_REGION( 0x10000, "gamma", 0 )
- ROM_LOAD( "136025.908", 0x08000, 0x4000, CRC(c52ec664) SHA1(08120a385f71b17ec02a3c2ef856ff835a91773e) ) /* mirrored to c000-ffff for reset+interrupt vectors */
+ ROM_REGION( 0x4000, "gamma", 0 )
+ ROM_LOAD( "136025.908", 0x0000, 0x4000, CRC(c52ec664) SHA1(08120a385f71b17ec02a3c2ef856ff835a91773e) ) /* mirrored to c000-ffff for reset+interrupt vectors */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
- ROM_LOAD( "136002-125.6c", 0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) )
+ ROM_LOAD( "136002-125.6c",0x0000, 0x0100, CRC(5903af03) SHA1(24bc0366f394ad0ec486919212e38be0f08d0239) )
ROM_END
ROM_START( mhavocp )
/* Alpha Processor ROMs */
- ROM_REGION( 0x18000, "alpha", 0 )
/* Vector Generator ROM */
- ROM_LOAD( "136025.010", 0x05000, 0x2000, CRC(3050c0e6) SHA1(f19a9538996d949cdca7e6abd4f04e8ff6e0e2c1) )
+ ROM_REGION( 0x2000, "vectorrom", 0 )
+ ROM_LOAD( "136025.010", 0x0000, 0x2000, CRC(3050c0e6) SHA1(f19a9538996d949cdca7e6abd4f04e8ff6e0e2c1) )
/* Program ROM */
+ ROM_REGION( 0x18000, "alpha", 0 )
ROM_LOAD( "136025.016", 0x08000, 0x4000, CRC(94caf6c0) SHA1(8734411280bd0484c99a59231b97ad64d6e787e8) )
ROM_LOAD( "136025.017", 0x0c000, 0x4000, CRC(05cba70a) SHA1(c069e6dec3e5bc278103156d0908ab93f3784be1) )
@@ -734,8 +741,8 @@ ROM_START( mhavocp )
/* the last 0x1000 is used for the 2 RAM pages */
/* Gamma Processor ROM */
- ROM_REGION( 0x10000, "gamma", 0 )
- ROM_LOAD( "136025.008", 0x8000, 0x4000, CRC(22ea7399) SHA1(eeda8cc40089506063835a62c3273e7dd3918fd5) ) /* mirrored to c000-ffff for reset+interrupt vectors */
+ ROM_REGION( 0x4000, "gamma", 0 )
+ ROM_LOAD( "136025.008", 0x0000, 0x4000, CRC(22ea7399) SHA1(eeda8cc40089506063835a62c3273e7dd3918fd5) ) /* mirrored to c000-ffff for reset+interrupt vectors */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
@@ -744,11 +751,12 @@ ROM_END
ROM_START( alphaone )
- ROM_REGION( 0x18000, "alpha", 0 )
/* Vector Generator ROM */
- ROM_LOAD( "vec5000.tw", 0x05000, 0x1000, CRC(2a4c149f) SHA1(b60a0b29958bee9b5f7c1d88163680b626bb76dd) )
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "vec5000.tw", 0x0000, 0x1000, CRC(2a4c149f) SHA1(b60a0b29958bee9b5f7c1d88163680b626bb76dd) )
/* Program ROM */
+ ROM_REGION( 0x18000, "alpha", 0 )
ROM_LOAD( "8000.tw", 0x08000, 0x2000, CRC(962d4da2) SHA1(2299f850aed7470a80a21526143f7b412a879cb1) )
ROM_LOAD( "a000.tw", 0x0a000, 0x2000, CRC(f739a791) SHA1(1e70e446fc7dd27683ad71e768ebb2bc1d4fedd3) )
ROM_LOAD( "twjk1.bin", 0x0c000, 0x2000, CRC(1ead0b34) SHA1(085e05526d029bcff7c8ae050cde73f52ee13846) )
@@ -772,11 +780,12 @@ ROM_END
ROM_START( alphaonea )
- ROM_REGION( 0x18000, "alpha", 0 )
/* Vector Generator ROM */
- ROM_LOAD( "vec5000.tw", 0x05000, 0x1000, CRC(2a4c149f) SHA1(b60a0b29958bee9b5f7c1d88163680b626bb76dd) )
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "vec5000.tw", 0x0000, 0x1000, CRC(2a4c149f) SHA1(b60a0b29958bee9b5f7c1d88163680b626bb76dd) )
/* Program ROM */
+ ROM_REGION( 0x18000, "alpha", 0 )
ROM_LOAD( "8000.tw", 0x08000, 0x2000, CRC(962d4da2) SHA1(2299f850aed7470a80a21526143f7b412a879cb1) )
ROM_LOAD( "a000.tw", 0x0a000, 0x2000, CRC(f739a791) SHA1(1e70e446fc7dd27683ad71e768ebb2bc1d4fedd3) )
ROM_LOAD( "c000.tw", 0x0c000, 0x2000, CRC(f21fb1ac) SHA1(2590147e75611a3f87397e7b0baa7020e7528ac8) )
diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp
index c7e5beaef85..12164c1f037 100644
--- a/src/mame/drivers/omegrace.cpp
+++ b/src/mame/drivers/omegrace.cpp
@@ -228,6 +228,7 @@
#include "omegrace.lh"
+namespace {
class omegrace_state : public driver_device
{
@@ -380,11 +381,11 @@ void omegrace_state::omegrace_leds_w(uint8_t data)
void omegrace_state::main_map(address_map &map)
{
- map(0x0000, 0x3fff).rom();
+ map(0x0000, 0x3fff).rom().region("maincpu", 0);
map(0x4000, 0x4bff).ram();
- map(0x5c00, 0x5cff).ram().share("nvram"); /* NVRAM */
- map(0x8000, 0x8fff).ram().share("dvg:vectorram"); /* vector ram */
- map(0x9000, 0x9fff).rom(); /* vector rom */
+ map(0x5c00, 0x5cff).ram().share("nvram"); // NVRAM
+ map(0x8000, 0x8fff).ram(); // vector RAM
+ map(0x9000, 0x9fff).rom().region("vectorrom", 0); // vector ROM
}
@@ -555,7 +556,8 @@ void omegrace_state::omegrace(machine_config &config)
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
DVG(config, m_dvg, 0);
- m_dvg->set_vector_tag("vector");
+ m_dvg->set_vector("vector");
+ m_dvg->set_memory(m_maincpu, AS_PROGRAM, 0x8000);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -579,29 +581,33 @@ void omegrace_state::omegrace(machine_config &config)
*************************************/
ROM_START( omegrace )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x4000, "maincpu", 0 )
ROM_LOAD( "omega.m7", 0x0000, 0x1000, CRC(0424d46e) SHA1(cc1ac6c06ba6f6e8466fa08286a0c70b5335af33) )
ROM_LOAD( "omega.l7", 0x1000, 0x1000, CRC(edcd7a7d) SHA1(5d142de2f48b01d563578a54fd5540e5d0ac8f4c) )
ROM_LOAD( "omega.k7", 0x2000, 0x1000, CRC(6d10f197) SHA1(9609a0cbeeef2efa10d49cde9f0afdca96e9c2f8) )
ROM_LOAD( "omega.j7", 0x3000, 0x1000, CRC(8e8d4b54) SHA1(944192c0f6f0cdb25d492ee9f33959d38a1062f2) )
- ROM_LOAD( "omega.e1", 0x9000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
- ROM_LOAD( "omega.f1", 0x9800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
+
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "omega.e1", 0x0000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
+ ROM_LOAD( "omega.f1", 0x0800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "sound.k5", 0x0000, 0x0800, CRC(7d426017) SHA1(370f0fb5608819de873c845f6010cbde75a9818e) )
ROM_REGION( 0x100, "dvg:prom", 0 )
- ROM_LOAD( "dvgprom.bin", 0x0000, 0x0100, CRC(d481e958) SHA1(d8790547dc539e25984807573097b61ec3ffe614) )
+ ROM_LOAD( "dvgprom.bin", 0x0000, 0x0100, CRC(d481e958) SHA1(d8790547dc539e25984807573097b61ec3ffe614) )
ROM_END
ROM_START( omegrace2 )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x4000, "maincpu", 0 )
ROM_LOAD( "o.r._1a.m7", 0x0000, 0x1000, CRC(f8539d46) SHA1(bb0c6bc2a84e904d1cb00822052c53c0a8ff1083) )
ROM_LOAD( "o.r._2a.l7", 0x1000, 0x1000, CRC(0ff70783) SHA1(5fceaaea1439c3ae408a45f4d7839ec56b71504c) )
ROM_LOAD( "o.r._3a.k7", 0x2000, 0x1000, CRC(6349130d) SHA1(a1ff62044d9e59294f56079e704beeebc65a56aa) )
ROM_LOAD( "o.r._4a.j7", 0x3000, 0x1000, CRC(0a5ef64a) SHA1(42bcc5d5bfe11af4b26ba7753d83e121eef4b597) )
- ROM_LOAD( "o.r._vector_i_6-1-81.e1", 0x9000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
- ROM_LOAD( "o.r._vector_ii_6-1-81.f1", 0x9800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
+
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "o.r._vector_i_6-1-81.e1", 0x0000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
+ ROM_LOAD( "o.r._vector_ii_6-1-81.f1", 0x0800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "o.r.r._audio_6-1-81.k5", 0x0000, 0x0800, CRC(7d426017) SHA1(370f0fb5608819de873c845f6010cbde75a9818e) )
@@ -611,19 +617,21 @@ ROM_START( omegrace2 )
ROM_END
ROM_START( deltrace )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x4000, "maincpu", 0 )
ROM_LOAD( "omega.m7", 0x0000, 0x1000, CRC(0424d46e) SHA1(cc1ac6c06ba6f6e8466fa08286a0c70b5335af33) )
ROM_LOAD( "omega.l7", 0x1000, 0x1000, CRC(edcd7a7d) SHA1(5d142de2f48b01d563578a54fd5540e5d0ac8f4c) )
ROM_LOAD( "omega.k7", 0x2000, 0x1000, CRC(6d10f197) SHA1(9609a0cbeeef2efa10d49cde9f0afdca96e9c2f8) )
ROM_LOAD( "delta.j7", 0x3000, 0x1000, CRC(8ef9541e) SHA1(89e34f50a958ac60c5f223bcb6c1c14796b903c7) )
- ROM_LOAD( "omega.e1", 0x9000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
- ROM_LOAD( "omega.f1", 0x9800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
+
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "omega.e1", 0x0000, 0x0800, CRC(1d0fdf3a) SHA1(3333397a9745874cea1dd6a1bda783cc59393b55) )
+ ROM_LOAD( "omega.f1", 0x0800, 0x0800, CRC(d44c0814) SHA1(2f216ee6de88bbe09775619003aee2d5aa8c554d) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "sound.k5", 0x0000, 0x0800, CRC(7d426017) SHA1(370f0fb5608819de873c845f6010cbde75a9818e) )
ROM_REGION( 0x100, "dvg:prom", 0 )
- ROM_LOAD( "dvgprom.bin", 0x0000, 0x0100, CRC(d481e958) SHA1(d8790547dc539e25984807573097b61ec3ffe614) )
+ ROM_LOAD( "dvgprom.bin", 0x0000, 0x0100, CRC(d481e958) SHA1(d8790547dc539e25984807573097b61ec3ffe614) )
ROM_END
@@ -647,6 +655,8 @@ void omegrace_state::init_omegrace()
prom[i] = bitswap<8>(prom[i],7,6,5,4,1,0,3,2);
}
+} // anonymous namespace
+
/*************************************
*
diff --git a/src/mame/drivers/quantum.cpp b/src/mame/drivers/quantum.cpp
index f71fd25ad1c..16e0ef8a14a 100644
--- a/src/mame/drivers/quantum.cpp
+++ b/src/mame/drivers/quantum.cpp
@@ -60,6 +60,8 @@ NOTE: The Atari 136002-125 PROM in the sets below wasn't dumped from an actual
#include "speaker.h"
+namespace {
+
class quantum_state : public driver_device
{
public:
@@ -166,11 +168,11 @@ void quantum_state::main_map(address_map &map)
{
map(0x000000, 0x013fff).rom();
map(0x018000, 0x01cfff).ram();
- map(0x800000, 0x801fff).ram().share("avg:vectorram");
+ map(0x800000, 0x801fff).ram(); // vector RAM
map(0x840000, 0x84001f).rw("pokey1", FUNC(pokey_device::read), FUNC(pokey_device::write)).umask16(0x00ff);
map(0x840020, 0x84003f).rw("pokey2", FUNC(pokey_device::read), FUNC(pokey_device::write)).umask16(0x00ff);
map(0x900000, 0x9001ff).rw("nvram", FUNC(x2212_device::read), FUNC(x2212_device::write)).umask16(0x00ff);
- map(0x940000, 0x940001).r(FUNC(quantum_state::trackball_r)); /* trackball */
+ map(0x940000, 0x940001).r(FUNC(quantum_state::trackball_r)); // trackball
map(0x948000, 0x948001).portr("SYSTEM");
map(0x950000, 0x95001f).writeonly().share("avg:colorram");
map(0x958000, 0x958001).w(FUNC(quantum_state::led_w));
@@ -307,7 +309,8 @@ void quantum_state::quantum(machine_config &config)
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
AVG_QUANTUM(config, m_avg, 0);
- m_avg->set_vector_tag("vector");
+ m_avg->set_vector("vector");
+ m_avg->set_memory(m_maincpu, AS_PROGRAM, 0x800000);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -409,6 +412,8 @@ ROM_START( quantump )
ROM_LOAD( "cf2038n.1b", 0x0000, 0x00eb, CRC(b372fa4f) SHA1(a60b51849e9f691b412ae4c4afc834ff93d8a30f) ) /* Original chip is a 82S153, schematics refer to this chip as 137290-001 */
ROM_END
+} // anonoymous namespace
+
/*************************************
diff --git a/src/mame/drivers/starwars.cpp b/src/mame/drivers/starwars.cpp
index cefa10998ee..b76e5c3843b 100644
--- a/src/mame/drivers/starwars.cpp
+++ b/src/mame/drivers/starwars.cpp
@@ -127,8 +127,8 @@ void starwars_state::esb_slapstic_w(address_space &space, offs_t offset, uint8_t
void starwars_state::main_map(address_map &map)
{
- map(0x0000, 0x2fff).ram().share("avg:vectorram");
- map(0x3000, 0x3fff).rom(); /* vector_rom */
+ map(0x0000, 0x2fff).ram();
+ map(0x3000, 0x3fff).rom().region("vectorrom", 0);
map(0x4300, 0x431f).portr("IN0");
map(0x4320, 0x433f).portr("IN1");
map(0x4340, 0x435f).portr("DSW0");
@@ -342,7 +342,8 @@ void starwars_state::starwars(machine_config &config)
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
avg_device &avg(AVG_STARWARS(config, "avg", 0));
- avg.set_vector_tag("vector");
+ avg.set_vector("vector");
+ avg.set_memory(m_maincpu, AS_PROGRAM, 0x0000);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -386,7 +387,6 @@ void starwars_state::esb(machine_config &config)
ROM_START( starwars )
ROM_REGION( 0x12000, "maincpu", 0 ) /* 2 64k ROM spaces */
- ROM_LOAD( "136021-105.1l", 0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
ROM_LOAD( "136021.214.1f", 0x6000, 0x2000, CRC(04f1876e) SHA1(c1d3637cb31ece0890c25f6122d6bcd27e6ffe0c) ) /* ROM 0 bank pages 0 and 1 */
ROM_CONTINUE( 0x10000, 0x2000 )
ROM_LOAD( "136021.102.1hj",0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
@@ -394,6 +394,9 @@ ROM_START( starwars )
ROM_LOAD( "136021.104.1kl",0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
ROM_LOAD( "136021.206.1m", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136021-105.1l", 0x0000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
+
/* Sound ROMS */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "136021-107.1jk",0x4000, 0x2000, CRC(dbf3aea2) SHA1(c38661b2b846fe93487eef09ca3cda19c44f08a0) ) /* Sound ROM 0 */
@@ -414,7 +417,6 @@ ROM_END
ROM_START( starwars1 )
ROM_REGION( 0x12000, "maincpu", 0 ) /* 2 64k ROM spaces */
- ROM_LOAD( "136021-105.1l", 0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
ROM_LOAD( "136021.114.1f", 0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) ) /* ROM 0 bank pages 0 and 1 */
ROM_CONTINUE( 0x10000, 0x2000 )
ROM_LOAD( "136021.102.1hj",0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
@@ -422,6 +424,9 @@ ROM_START( starwars1 )
ROM_LOAD( "136021.104.1kl",0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
ROM_LOAD( "136021.206.1m", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136021-105.1l", 0x0000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
+
/* Sound ROMS */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "136021-107.1jk",0x4000, 0x2000, CRC(dbf3aea2) SHA1(c38661b2b846fe93487eef09ca3cda19c44f08a0) ) /* Sound ROM 0 */
@@ -442,7 +447,6 @@ ROM_END
ROM_START( starwarso )
ROM_REGION( 0x12000, "maincpu", 0 ) /* 2 64k ROM spaces */
- ROM_LOAD( "136021-105.1l", 0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
ROM_LOAD( "136021-114.1f", 0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) ) /* ROM 0 bank pages 0 and 1 */
ROM_CONTINUE( 0x10000, 0x2000 )
ROM_LOAD( "136021-102.1hj",0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
@@ -450,6 +454,9 @@ ROM_START( starwarso )
ROM_LOAD( "136021-104.1kl",0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
ROM_LOAD( "136021-206.1m", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136021-105.1l", 0x0000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
+
/* Sound ROMS */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "136021-107.1jk",0x4000, 0x2000, CRC(dbf3aea2) SHA1(c38661b2b846fe93487eef09ca3cda19c44f08a0) ) /* Sound ROM 0 */
@@ -472,12 +479,14 @@ ROM_END
ROM_START( tomcatsw )
ROM_REGION( 0x12000, "maincpu", 0 )
- ROM_LOAD( "tcavg3.1l", 0x3000, 0x1000, CRC(27188aa9) SHA1(5d9a978a7ac1913b57586e81045a1b955db27b48) )
ROM_LOAD( "tc6.1f", 0x6000, 0x2000, CRC(56e284ff) SHA1(a5fda9db0f6b8f7d28a4a607976fe978e62158cf) )
ROM_LOAD( "tc8.1hj", 0x8000, 0x2000, CRC(7b7575e3) SHA1(bdb838603ffb12195966d0ce454900253bc0f43f) )
ROM_LOAD( "tca.1jk", 0xa000, 0x2000, CRC(a1020331) SHA1(128745a2ec771ac818a8fbba59a08f0cf5f28e8f) )
ROM_LOAD( "tce.1m", 0xe000, 0x2000, CRC(4a3de8a3) SHA1(e48fc17201326358317f6b428e583ecaa3ecb881) )
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "tcavg3.1l", 0x0000, 0x1000, CRC(27188aa9) SHA1(5d9a978a7ac1913b57586e81045a1b955db27b48) )
+
/* Sound ROMS */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "136021-107.1jk",0x4000, 0x2000, NO_DUMP ) /* Sound ROM 0 */
@@ -499,7 +508,6 @@ ROM_END
ROM_START( esb )
ROM_REGION( 0x22000, "maincpu", 0 ) /* 64k for code and a buttload for the banked ROMs */
- ROM_LOAD( "136031-111.1l", 0x3000, 0x1000, CRC(b1f9bd12) SHA1(76f15395c9fdcd80dd241307a377031a1f44e150) ) /* 3000-3fff is 4k vector rom */
ROM_LOAD( "136031-101.1f", 0x6000, 0x2000, CRC(ef1e3ae5) SHA1(d228ff076faa7f9605badeee3b827adb62593e0a) )
ROM_CONTINUE( 0x10000, 0x2000 )
/* $8000 - $9fff : slapstic page */
@@ -513,6 +521,9 @@ ROM_START( esb )
ROM_LOAD( "136031-105.3u", 0x14000, 0x4000, CRC(ea9e4dce) SHA1(9363fd5b1fce62c2306b448a7766eaf7ec97cdf5) ) /* slapstic 0, 1 */
ROM_LOAD( "136031-106.2u", 0x18000, 0x4000, CRC(76d07f59) SHA1(44dd018b406f95e1512ce92923c2c87f1458844f) ) /* slapstic 2, 3 */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136031-111.1l", 0x0000, 0x1000, CRC(b1f9bd12) SHA1(76f15395c9fdcd80dd241307a377031a1f44e150) ) /* 3000-3fff is 4k vector rom */
+
/* Sound ROMS */
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "136031-113.1jk",0x4000, 0x2000, CRC(24ae3815) SHA1(b1a93af76de79b902317eebbc50b400b1f8c1e3c) ) /* Sound ROM 0 */
diff --git a/src/mame/drivers/tempest.cpp b/src/mame/drivers/tempest.cpp
index a0717778fe6..ec44346443d 100644
--- a/src/mame/drivers/tempest.cpp
+++ b/src/mame/drivers/tempest.cpp
@@ -341,7 +341,7 @@ protected:
required_device<cpu_device> m_maincpu;
required_device<mathbox_device> m_mathbox;
required_device<watchdog_timer_device> m_watchdog;
- required_device<avg_tempest_device> m_avg;
+ required_device<avg_device> m_avg;
required_device<er2055_device> m_earom;
required_region_ptr<uint8_t> m_rom;
@@ -488,12 +488,12 @@ void tempest_state::main_map(address_map &map)
map(0x0c00, 0x0c00).portr("IN0");
map(0x0d00, 0x0d00).portr("DSW1");
map(0x0e00, 0x0e00).portr("DSW2");
- map(0x2000, 0x2fff).ram().share("avg:vectorram");
- map(0x3000, 0x3fff).rom();
+ map(0x2000, 0x2fff).ram();
+ map(0x3000, 0x3fff).rom().region("vectorrom", 0);
map(0x4000, 0x4000).w(FUNC(tempest_state::tempest_coin_w));
- map(0x4800, 0x4800).w(m_avg, FUNC(avg_tempest_device::go_w));
+ map(0x4800, 0x4800).w(m_avg, FUNC(avg_device::go_w));
map(0x5000, 0x5000).w(FUNC(tempest_state::wdclr_w));
- map(0x5800, 0x5800).w(m_avg, FUNC(avg_tempest_device::reset_w));
+ map(0x5800, 0x5800).w(m_avg, FUNC(avg_device::reset_w));
map(0x6000, 0x603f).w(FUNC(tempest_state::earom_write));
map(0x6040, 0x6040).r(m_mathbox, FUNC(mathbox_device::status_r)).w(FUNC(tempest_state::earom_control_w));
map(0x6050, 0x6050).r(FUNC(tempest_state::earom_read));
@@ -525,7 +525,7 @@ static INPUT_PORTS_START( tempest )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Diagnostic Step")
/* bit 6 is the VG HALT bit. We set it to "low" */
/* per default (busy vector processor). */
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_tempest_device, done_r)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_device, done_r)
/* bit 7 is tied to a 3kHz (?) clock */
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(tempest_state, clock_r)
@@ -652,7 +652,8 @@ void tempest_state::tempest(machine_config &config)
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
AVG_TEMPEST(config, m_avg, 0);
- m_avg->set_vector_tag("vector");
+ m_avg->set_vector("vector");
+ m_avg->set_memory(m_maincpu, AS_PROGRAM, 0x2000);
/* Drivers */
MATHBOX(config, m_mathbox, 0);
@@ -694,16 +695,18 @@ void tempest_state::tempest(machine_config &config)
*************************************/
ROM_START( tempest ) /* rev 3 */
- ROM_REGION( 0x10000, "maincpu", 0 )
/* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-03 or A037383-04 */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "136002-133.d1", 0x9000, 0x1000, CRC(1d0cc503) SHA1(7bef95db9b1102d6b1166bda0ccb276ef4cc3764) ) /* 136002-113 + 136002-114 */
ROM_LOAD( "136002-134.f1", 0xa000, 0x1000, CRC(c88e3524) SHA1(89144baf1efc703b2336774793ce345b37829ee7) ) /* 136002-115 + 136002-316 */
ROM_LOAD( "136002-235.j1", 0xb000, 0x1000, CRC(a4b2ce3f) SHA1(a5f5fb630a48c5d25346f90d4c13aaa98f60b228) ) /* 136002-217 + 136002-118 */
ROM_LOAD( "136002-136.lm1", 0xc000, 0x1000, CRC(65a9a9f9) SHA1(73aa7d6f4e7093ccb2d97f6344f354872bcfd72a) ) /* 136002-119 + 136002-120 */
ROM_LOAD( "136002-237.p1", 0xd000, 0x1000, CRC(de4e9e34) SHA1(04be074e45bf5cd95a852af97cd04e35b7f27fc4) ) /* 136002-121 + 136002-222 */
ROM_RELOAD( 0xf000, 0x1000 ) /* for reset/interrupt vectors */
+
/* Vector ROM */
- ROM_LOAD( "136002-138.np3", 0x3000, 0x1000, CRC(9995256d) SHA1(2b725ee1a57d423c7d7377a1744f48412e0f2f69) )
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136002-138.np3", 0x0000, 0x1000, CRC(9995256d) SHA1(2b725ee1a57d423c7d7377a1744f48412e0f2f69) )
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
@@ -724,16 +727,18 @@ ROM_END
ROM_START( tempest1r ) /* rev 1 */
- ROM_REGION( 0x10000, "maincpu", 0 )
/* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-03 or A037383-04 */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "136002-133.d1", 0x9000, 0x1000, CRC(1d0cc503) SHA1(7bef95db9b1102d6b1166bda0ccb276ef4cc3764) ) /* 136002-113 + 136002-114 */
ROM_LOAD( "136002-134.f1", 0xa000, 0x1000, CRC(c88e3524) SHA1(89144baf1efc703b2336774793ce345b37829ee7) ) /* 136002-115 + 136002-316 */
ROM_LOAD( "136002-135.j1", 0xb000, 0x1000, CRC(1ca27781) SHA1(cafbec28d682e98a74fdd5b8dfcfa33c64ff6a93) ) /* 136002-117 + 136002-118 */
ROM_LOAD( "136002-136.lm1", 0xc000, 0x1000, CRC(65a9a9f9) SHA1(73aa7d6f4e7093ccb2d97f6344f354872bcfd72a) ) /* 136002-119 + 136002-120 */
ROM_LOAD( "136002-137.p1", 0xd000, 0x1000, CRC(d75fd2ef) SHA1(19f611a77989d201d346b3e89fac5789663a01ce) ) /* 136002-121 + 136002-122 */
ROM_RELOAD( 0xf000, 0x1000 ) /* for reset/interrupt vectors */
+
/* Vector ROM */
- ROM_LOAD( "136002-138.np3", 0x3000, 0x1000, CRC(9995256d) SHA1(2b725ee1a57d423c7d7377a1744f48412e0f2f69) )
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136002-138.np3", 0x0000, 0x1000, CRC(9995256d) SHA1(2b725ee1a57d423c7d7377a1744f48412e0f2f69) )
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
@@ -754,8 +759,8 @@ ROM_END
ROM_START( tempest3 ) /* rev 3 */
- ROM_REGION( 0x10000, "maincpu", 0 )
/* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
@@ -767,9 +772,11 @@ ROM_START( tempest3 ) /* rev 3 */
ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
ROM_LOAD( "136002-222.r1", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) )
ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
+
/* Vector ROM */
- ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
- ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136002-123.np3", 0x0000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
+ ROM_LOAD( "136002-124.r3", 0x0800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
@@ -790,8 +797,8 @@ ROM_END
ROM_START( tempest2 ) /* rev 2 */
- ROM_REGION( 0x10000, "maincpu", 0 )
/* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
@@ -803,9 +810,11 @@ ROM_START( tempest2 ) /* rev 2 */
ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
ROM_LOAD( "136002-222.r1", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) )
ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
+
/* Vector ROM */
- ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
- ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136002-123.np3", 0x0000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
+ ROM_LOAD( "136002-124.r3", 0x0800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
@@ -826,8 +835,8 @@ ROM_END
ROM_START( tempest1 ) /* rev 1 */
- ROM_REGION( 0x10000, "maincpu", 0 )
/* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
@@ -839,9 +848,11 @@ ROM_START( tempest1 ) /* rev 1 */
ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
ROM_LOAD( "136002-122.r1", 0xd800, 0x0800, CRC(796a9918) SHA1(c862a0d4ea330161e4c3cc8e5e9ad38893fffbd4) )
ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
+
/* Vector ROM */
- ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
- ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136002-123.np3", 0x0000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
+ ROM_LOAD( "136002-124.r3", 0x0800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
@@ -862,8 +873,8 @@ ROM_END
ROM_START( temptube )
- ROM_REGION( 0x10000, "maincpu", 0 )
/* Roms are for Tempest Analog Vector-Generator PCB Assembly A037383-01 or A037383-02 */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "136002-113.d1", 0x9000, 0x0800, CRC(65d61fe7) SHA1(38a1e8a8f65b7887cf3e190269fe4ce2c6f818aa) )
ROM_LOAD( "136002-114.e1", 0x9800, 0x0800, CRC(11077375) SHA1(ed8ff0ca969da6672a7683b93d4fcf2935a0d903) )
ROM_LOAD( "136002-115.f1", 0xa000, 0x0800, CRC(f3e2827a) SHA1(bd04fcfbbba995e08c3144c1474fcddaaeb1c700) )
@@ -875,9 +886,11 @@ ROM_START( temptube )
ROM_LOAD( "136002-121.p1", 0xd000, 0x0800, CRC(73d38e47) SHA1(9980606376a79ba94f8e2a325871a6c8d10d83fc) )
ROM_LOAD( "136002-222.r1", 0xd800, 0x0800, CRC(707bd5c3) SHA1(2f0af6fb7154c244c794f7247e5c16a1e06ddf7d) )
ROM_RELOAD( 0xf800, 0x0800 ) /* for reset/interrupt vectors */
+
/* Vector ROM */
- ROM_LOAD( "136002-123.np3", 0x3000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
- ROM_LOAD( "136002-124.r3", 0x3800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
+ ROM_REGION( 0x1000, "vectorrom", 0 )
+ ROM_LOAD( "136002-123.np3", 0x0000, 0x0800, CRC(29f7e937) SHA1(686c8b9b8901262e743497cee7f2f7dd5cb3af7e) ) /* May be labeled "136002-111", same data */
+ ROM_LOAD( "136002-124.r3", 0x0800, 0x0800, CRC(c16ec351) SHA1(a30a3662c740810c0f20e3712679606921b8ca06) ) /* May be labeled "136002-112", same data */
/* AVG PROM */
ROM_REGION( 0x100, "avg:prom", 0 )
diff --git a/src/mame/drivers/tomcat.cpp b/src/mame/drivers/tomcat.cpp
index 169698b6da5..aa1219cc8dd 100644
--- a/src/mame/drivers/tomcat.cpp
+++ b/src/mame/drivers/tomcat.cpp
@@ -229,12 +229,12 @@ void tomcat_state::tomcat_map(address_map &map)
{
map(0x000000, 0x00ffff).rom();
map(0x402001, 0x402001).r("adc", FUNC(adc0808_device::data_r)).w(FUNC(tomcat_state::adcon_w));
- map(0x404000, 0x404001).r(FUNC(tomcat_state::tomcat_inputs_r)).w("avg", FUNC(avg_tomcat_device::go_word_w));
- map(0x406000, 0x406001).w("avg", FUNC(avg_tomcat_device::reset_word_w));
+ map(0x404000, 0x404001).r(FUNC(tomcat_state::tomcat_inputs_r)).w("avg", FUNC(avg_device::go_word_w));
+ map(0x406000, 0x406001).w("avg", FUNC(avg_device::reset_word_w));
map(0x408000, 0x408001).r(FUNC(tomcat_state::tomcat_inputs2_r)).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x40a000, 0x40a001).rw(FUNC(tomcat_state::tomcat_320bio_r), FUNC(tomcat_state::tomcat_irqclr_w));
map(0x40e000, 0x40e01f).w(FUNC(tomcat_state::main_latch_w));
- map(0x800000, 0x803fff).ram().share("avg:vectorram");
+ map(0x800000, 0x803fff).ram();
map(0xffa000, 0xffbfff).ram().share("shared_ram");
map(0xffc000, 0xffcfff).ram();
map(0xffd000, 0xffdfff).rw("m48t02", FUNC(timekeeper_device::read), FUNC(timekeeper_device::write)).umask16(0xff00);
@@ -276,7 +276,7 @@ void tomcat_state::sound_map(address_map &map)
static INPUT_PORTS_START( tomcat )
PORT_START("IN0") /* INPUTS */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_tomcat_device, done_r)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("avg", avg_device, done_r)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) // SPARE
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) // DIAGNOSTIC
PORT_SERVICE( 0x08, IP_ACTIVE_LOW )
@@ -369,8 +369,9 @@ void tomcat_state::tomcat(machine_config &config)
screen.set_visarea(0, 280, 0, 250);
screen.set_screen_update("vector", FUNC(vector_device::screen_update));
- avg_device &avg(AVG_TOMCAT(config, "avg", 0));
- avg.set_vector_tag("vector");
+ avg_device &avg(AVG_STARWARS(config, "avg", 0));
+ avg.set_vector("vector");
+ avg.set_memory(m_maincpu, AS_PROGRAM, 0x800000);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
diff --git a/src/mame/video/avgdvg.cpp b/src/mame/video/avgdvg.cpp
index c247bb33fbc..7b138d1f25f 100644
--- a/src/mame/video/avgdvg.cpp
+++ b/src/mame/video/avgdvg.cpp
@@ -43,12 +43,12 @@
*
*************************************/
-void avgdvg_device::apply_flipping(int *x, int *y)
+void avgdvg_device_base::apply_flipping(int &x, int &y) const
{
if (m_flip_x)
- *x += (m_xcenter - *x) << 1;
+ x += (m_xcenter - x) << 1;
if (m_flip_y)
- *y += (m_ycenter - *y) << 1;
+ y += (m_ycenter - y) << 1;
}
@@ -58,7 +58,7 @@ void avgdvg_device::apply_flipping(int *x, int *y)
*
*************************************/
-void avgdvg_device::vg_flush()
+void avgdvg_device_base::vg_flush()
{
int cx0 = 0, cy0 = 0, cx1 = 0x5000000, cy1 = 0x5000000;
int i = 0;
@@ -155,7 +155,7 @@ void avgdvg_device::vg_flush()
m_nvect = 0;
}
-void avgdvg_device::vg_add_point_buf(int x, int y, rgb_t color, int intensity)
+void avgdvg_device_base::vg_add_point_buf(int x, int y, rgb_t color, int intensity)
{
if (m_nvect < MAXVECT)
{
@@ -168,7 +168,7 @@ void avgdvg_device::vg_add_point_buf(int x, int y, rgb_t color, int intensity)
}
}
-void avgdvg_device::vg_add_clip(int xmin, int ymin, int xmax, int ymax)
+void avgdvg_device_base::vg_add_clip(int xmin, int ymin, int xmax, int ymax)
{
if (m_nvect < MAXVECT)
{
@@ -190,10 +190,8 @@ void avgdvg_device::vg_add_clip(int xmin, int ymin, int xmax, int ymax)
void dvg_device::update_databus() // dvg_data
{
- /*
- * DVG uses low bit of state for address
- */
- m_data = m_vectorram[(m_pc << 1) | (m_state_latch & 1)];
+ // DVG uses low bit of state for address
+ m_data = m_memspace->read_byte(m_membase | (m_pc << 1) | (m_state_latch & 1));
}
u8 dvg_device::state_addr() // dvg_state_addr
@@ -208,7 +206,7 @@ u8 dvg_device::state_addr() // dvg_state_addr
int dvg_device::handler_0() // dvg_dmapush
{
- if (OP0 == 0)
+ if (!OP0)
{
m_sp = (m_sp + 1) & 0xf;
m_stack[m_sp & 3] = m_pc;
@@ -233,12 +231,14 @@ int dvg_device::handler_1() // dvg_dmald
void dvg_device::dvg_draw_to(int x, int y, int intensity)
{
- apply_flipping(&x, &y);
+ apply_flipping(x, y);
- if (((x | y) & 0x400) == 0)
- vg_add_point_buf((m_xmin + x - 512) << 16,
- (m_ymin + 512 - y) << 16,
- vector_device::color111(7), intensity << 4);
+ if (!((x | y) & 0x400))
+ vg_add_point_buf(
+ (m_xmin + x - 512) << 16,
+ (m_ymin + 512 - y) << 16,
+ vector_device::color111(7),
+ intensity << 4);
}
int dvg_device::handler_2() //dvg_gostrobe
@@ -356,7 +356,7 @@ int dvg_device::handler_3() // dvg_haltstrobe
{
m_halt = OP0;
- if (OP0 == 0)
+ if (!OP0)
{
m_xpos = m_dvx & 0xfff;
m_ypos = m_dvy & 0xfff;
@@ -447,7 +447,7 @@ u8 avg_device::state_addr() // avg_state_addr
void avg_device::update_databus() // avg_data
{
- m_data = m_vectorram[m_pc ^ 1];
+ m_data = m_memspace->read_byte(m_membase | (m_pc ^ 1));
}
void avg_device::vggo() // avg_vggo
@@ -559,7 +559,7 @@ int avg_device::avg_common_strobe1()
int avg_device::handler_5() // avg_strobe1
{
- if (OP2 == 0)
+ if (!OP2)
{
for (int i = m_bin_scale; i > 0; i--)
{
@@ -625,7 +625,7 @@ int avg_device::avg_common_strobe2()
int avg_device::handler_6() // avg_strobe2
{
- if ((OP2 == 0) && (m_dvy12 == 0))
+ if (!OP2 && !m_dvy12)
{
m_color = m_dvy & 0x7;
m_intensity = (m_dvy >> 4) & 0xf;
@@ -688,10 +688,9 @@ int avg_device::handler_7() // avg_strobe3
int avg_tempest_device::handler_6() // tempest_strobe2
{
- if ((OP2 == 0) && (m_dvy12 == 0))
+ if (!OP2 && !m_dvy12)
{
- /* Contrary to previous documentation in MAME,
- Tempest does not have the m_enspkl bit. */
+ // Contrary to previous documentation in MAME, Tempest does not have the m_enspkl bit.
if (m_dvy & 0x800)
m_color = m_dvy & 0xf;
else
@@ -708,10 +707,10 @@ int avg_tempest_device::handler_7() // tempest_strobe3
if ((m_op & 5) == 0)
{
const u8 data = m_colorram[m_color];
- const u8 bit3 = (~data >> 3) & 1;
- const u8 bit2 = (~data >> 2) & 1;
- const u8 bit1 = (~data >> 1) & 1;
- const u8 bit0 = (~data >> 0) & 1;
+ const u8 bit3 = BIT(~data, 3);
+ const u8 bit2 = BIT(~data, 2);
+ const u8 bit1 = BIT(~data, 1);
+ const u8 bit0 = BIT(~data, 0);
const u8 r = bit1 * 0xf3 + bit0 * 0x0c;
const u8 g = bit3 * 0xf3;
@@ -720,11 +719,13 @@ int avg_tempest_device::handler_7() // tempest_strobe3
int x = m_xpos;
int y = m_ypos;
- apply_flipping(&x, &y);
+ apply_flipping(x, y);
- vg_add_point_buf(y - m_ycenter + m_xcenter,
- x - m_xcenter + m_ycenter, rgb_t(r, g, b),
- (((m_int_latch >> 1) == 1)? m_intensity: m_int_latch & 0xe) << 4);
+ vg_add_point_buf(
+ y - m_ycenter + m_xcenter,
+ x - m_xcenter + m_ycenter,
+ rgb_t(r, g, b),
+ (((m_int_latch >> 1) == 1) ? m_intensity : m_int_latch & 0xe) << 4);
}
return cycles;
@@ -753,14 +754,10 @@ void avg_tempest_device::vggo() // tempest_vggo
int avg_mhavoc_device::handler_1() // mhavoc_latch1
{
- /*
- * Major Havoc just has ymin clipping
- */
+ // * Major Havoc just has ymin clipping
- if (m_lst == 0)
- {
+ if (!m_lst)
vg_add_clip(0, m_ypos, m_xmax << 16, m_ymax << 16);
- }
m_lst = 1;
return avg_device::handler_1(); //avg_latch1()
@@ -768,7 +765,7 @@ int avg_mhavoc_device::handler_1() // mhavoc_latch1
int avg_mhavoc_device::handler_6() // mhavoc_strobe2
{
- if (OP2 == 0)
+ if (!OP2)
{
if (m_dvy12)
{
@@ -795,7 +792,7 @@ int avg_mhavoc_device::handler_6() // mhavoc_strobe2
m_enspkl = 0;
}
- /* Major Havoc can do X-flipping by inverting the DAC input */
+ // Major Havoc can do X-flipping by inverting the DAC input
if (m_dvy & 0x400)
m_xdac_xor = 0x1ff;
else
@@ -831,25 +828,21 @@ int avg_mhavoc_device::handler_7() // mhavoc_strobe3
{
m_xpos += dx / 2;
m_ypos -= dy / 2;
- const u8 data = m_colorram[0xf +
- (((m_spkl_shift & 1) << 3)
- | (m_spkl_shift & 4)
- | ((m_spkl_shift & 0x10) >> 3)
- | ((m_spkl_shift & 0x40) >> 6))];
- const u8 bit3 = (~data >> 3) & 1;
- const u8 bit2 = (~data >> 2) & 1;
- const u8 bit1 = (~data >> 1) & 1;
- const u8 bit0 = (~data >> 0) & 1;
+ const u8 data = m_colorram[0xf + bitswap<4>(m_spkl_shift, 0, 2, 4, 6)];
+ const u8 bit3 = BIT(~data, 3);
+ const u8 bit2 = BIT(~data, 2);
+ const u8 bit1 = BIT(~data, 1);
+ const u8 bit0 = BIT(~data, 0);
const u8 r = bit3 * 0xcb + bit2 * 0x34;
const u8 g = bit1 * 0xcb;
const u8 b = bit0 * 0xcb;
- vg_add_point_buf(m_xpos, m_ypos, rgb_t(r, g, b),
- (((m_int_latch >> 1) == 1)? m_intensity: m_int_latch & 0xe) << 4);
- m_spkl_shift = (((m_spkl_shift & 0x40) >> 6)
- ^ ((m_spkl_shift & 0x20) >> 5)
- ^ 1)
- | (m_spkl_shift << 1);
+ vg_add_point_buf(
+ m_xpos,
+ m_ypos,
+ rgb_t(r, g, b),
+ (((m_int_latch >> 1) == 1) ? m_intensity : m_int_latch & 0xe) << 4);
+ m_spkl_shift = (BIT(m_spkl_shift, 6) ^ BIT(m_spkl_shift, 5) ^ 1) | (m_spkl_shift << 1);
if ((m_spkl_shift & 0x7f) == 0x7f)
m_spkl_shift = 0;
@@ -861,16 +854,19 @@ int avg_mhavoc_device::handler_7() // mhavoc_strobe3
m_ypos -= (dy * cycles) >> 4;
const u8 data = m_colorram[m_color];
- const u8 bit3 = (~data >> 3) & 1;
- const u8 bit2 = (~data >> 2) & 1;
- const u8 bit1 = (~data >> 1) & 1;
- const u8 bit0 = (~data >> 0) & 1;
+ const u8 bit3 = BIT(~data, 3);
+ const u8 bit2 = BIT(~data, 2);
+ const u8 bit1 = BIT(~data, 1);
+ const u8 bit0 = BIT(~data, 0);
const u8 r = bit3 * 0xcb + bit2 * 0x34;
const u8 g = bit1 * 0xcb;
const u8 b = bit0 * 0xcb;
- vg_add_point_buf(m_xpos, m_ypos, rgb_t(r, g, b),
- (((m_int_latch >> 1) == 1)? m_intensity: m_int_latch & 0xe) << 4);
+ vg_add_point_buf(
+ m_xpos,
+ m_ypos,
+ rgb_t(r, g, b),
+ (((m_int_latch >> 1) == 1) ? m_intensity : m_int_latch & 0xe) << 4);
}
}
if (OP2)
@@ -888,13 +884,9 @@ int avg_mhavoc_device::handler_7() // mhavoc_strobe3
void avg_mhavoc_device::update_databus() // mhavoc_data
{
if (m_pc & 0x2000)
- {
m_data = m_bank_region[(m_map << 13) | ((m_pc ^ 1) & 0x1fff)];
- }
else
- {
- m_data = m_vectorram[m_pc ^ 1];
- }
+ m_data = m_memspace->read_byte(m_membase | (m_pc ^ 1));
}
void avg_mhavoc_device::vgrst() // mhavoc_vgrst
@@ -912,13 +904,12 @@ void avg_mhavoc_device::vgrst() // mhavoc_vgrst
void avg_starwars_device::update_databus() // starwars_data
{
- m_data = m_vectorram[m_pc];
+ m_data = m_memspace->read_byte(m_membase | m_pc);
}
-
int avg_starwars_device::handler_6() // starwars_strobe2
{
- if ((OP2 == 0) && (m_dvy12 == 0))
+ if (!OP2 && !m_dvy12)
{
m_intensity = m_dvy & 0xff;
m_color = (m_dvy >> 8) & 0xf;
@@ -933,8 +924,11 @@ int avg_starwars_device::handler_7() // starwars_strobe3
if ((m_op & 5) == 0)
{
- vg_add_point_buf(m_xpos, m_ypos, vector_device::color111(m_color),
- ((m_int_latch >> 1) * m_intensity) >> 3);
+ vg_add_point_buf(
+ m_xpos,
+ m_ypos,
+ vector_device::color111(m_color),
+ ((m_int_latch >> 1) * m_intensity) >> 3);
}
return cycles;
@@ -948,7 +942,7 @@ int avg_starwars_device::handler_7() // starwars_strobe3
void avg_quantum_device::update_databus() // quantum_data
{
- m_data = ((u16 *)m_vectorram.target())[m_pc >> 1];
+ m_data = m_memspace->read_word(m_membase | m_pc);
}
void avg_quantum_device::vggo() // tempest_vggo
@@ -1013,9 +1007,7 @@ int avg_quantum_device::handler_4() // quantum_strobe0
}
else
{
- /*
- * Quantum normalizes to 12 bit
- */
+ // Quantum normalizes to 12 bit
int i = 0;
while ((((m_dvy ^ (m_dvy << 1)) & 0x800) == 0)
&& (((m_dvx ^ (m_dvx << 1)) & 0x800) == 0)
@@ -1024,7 +1016,7 @@ int avg_quantum_device::handler_4() // quantum_strobe0
m_dvy = (m_dvy << 1) & 0xfff;
m_dvx = (m_dvx << 1) & 0xfff;
m_timer >>= 1;
- m_timer |= 0x2000 ;
+ m_timer |= 0x2000;
}
}
@@ -1033,7 +1025,7 @@ int avg_quantum_device::handler_4() // quantum_strobe0
int avg_quantum_device::handler_5() // quantum_strobe1
{
- if (OP2 == 0)
+ if (!OP2)
{
for (int i = m_bin_scale; i > 0; i--)
{
@@ -1047,7 +1039,7 @@ int avg_quantum_device::handler_5() // quantum_strobe1
int avg_quantum_device::handler_6() // quantum_strobe2
{
- if ((OP2 == 0) && (m_dvy12 == 0) && (m_dvy & 0x800))
+ if (!OP2 && !m_dvy12 && (m_dvy & 0x800))
{
m_color = m_dvy & 0xf;
m_intensity = (m_dvy >> 4) & 0xf;
@@ -1064,11 +1056,11 @@ int avg_quantum_device::handler_7() // quantum_strobe3
if ((m_op & 5) == 0)
{
- const u16 data = ((u16 *)m_colorram.target())[m_color];
- const u8 bit3 = (~data >> 3) & 1;
- const u8 bit2 = (~data >> 2) & 1;
- const u8 bit1 = (~data >> 1) & 1;
- const u8 bit0 = (~data >> 0) & 1;
+ const u16 data = m_colorram[m_color];
+ const u8 bit3 = BIT(~data, 3);
+ const u8 bit2 = BIT(~data, 2);
+ const u8 bit1 = BIT(~data, 1);
+ const u8 bit0 = BIT(~data, 0);
const u8 g = bit1 * 0xaa + bit0 * 0x54;
const u8 b = bit2 * 0xce;
@@ -1083,11 +1075,13 @@ int avg_quantum_device::handler_7() // quantum_strobe3
int x = m_xpos;
int y = m_ypos;
- apply_flipping(&x, &y);
+ apply_flipping(x, y);
- vg_add_point_buf(y - m_ycenter + m_xcenter,
- x - m_xcenter + m_ycenter, rgb_t(r, g, b),
- ((m_int_latch == 2)? m_intensity: m_int_latch) << 4);
+ vg_add_point_buf(
+ y - m_ycenter + m_xcenter,
+ x - m_xcenter + m_ycenter,
+ rgb_t(r, g, b),
+ ((m_int_latch == 2) ? m_intensity : m_int_latch) << 4);
}
if (OP2)
{
@@ -1114,22 +1108,20 @@ int avg_bzone_device::handler_1() // bzone_latch1
* turned off.
*/
- if (m_hst == 0)
+ if (!m_hst)
{
m_clipx_max = m_xpos;
m_clipy_min = m_ypos;
}
- if (m_lst == 0)
+ if (!m_lst)
{
m_clipx_min = m_xpos;
m_clipy_max = m_ypos;
}
- if (m_lst == 0 || m_hst == 0)
- {
+ if (!m_lst || !m_hst)
vg_add_clip(m_clipx_min, m_clipy_min, m_clipx_max, m_clipy_max);
- }
m_lst = m_hst = 1;
return avg_device::handler_1(); // avg_latch1()
@@ -1138,7 +1130,7 @@ int avg_bzone_device::handler_1() // bzone_latch1
int avg_bzone_device::handler_6() // bzone_strobe2
{
- if ((OP2 == 0) && (m_dvy12 == 0))
+ if (!OP2 && !m_dvy12)
{
m_intensity = (m_dvy >> 4) & 0xf;
@@ -1173,36 +1165,6 @@ int avg_bzone_device::handler_7() // bzone_strobe3
return cycles;
}
-/*************************************
- *
- * Tomcat handler functions
- *
- *************************************/
-
-int avg_tomcat_device::handler_6() // starwars_strobe2
-{
- if ((OP2 == 0) && (m_dvy12 == 0))
- {
- m_intensity = m_dvy & 0xff;
- m_color = (m_dvy >> 8) & 0xf;
- }
-
- return avg_common_strobe2();
-}
-
-int avg_tomcat_device::handler_7() // starwars_strobe3
-{
- const int cycles = avg_common_strobe3();
-
- if ((m_op & 5) == 0)
- {
- vg_add_point_buf(m_xpos, m_ypos, vector_device::color111(m_color),
- ((m_int_latch >> 1) * m_intensity) >> 3);
- }
-
- return cycles;
-}
-
/*************************************
*
@@ -1210,13 +1172,13 @@ int avg_tomcat_device::handler_7() // starwars_strobe3
*
*************************************/
-void avgdvg_device::vg_set_halt(int dummy)
+void avgdvg_device_base::vg_set_halt(int dummy)
{
m_halt = dummy;
m_sync_halt = dummy;
}
-TIMER_CALLBACK_MEMBER(avgdvg_device::vg_set_halt_callback)
+TIMER_CALLBACK_MEMBER(avgdvg_device_base::vg_set_halt_callback)
{
vg_set_halt(param);
}
@@ -1235,35 +1197,35 @@ TIMER_CALLBACK_MEMBER(avgdvg_device::vg_set_halt_callback)
*
*******************************************************************/
-TIMER_CALLBACK_MEMBER(avgdvg_device::run_state_machine)
+TIMER_CALLBACK_MEMBER(avgdvg_device_base::run_state_machine)
{
int cycles = 0;
while (cycles < VGSLICE)
{
- /* Get next state */
- m_state_latch = (m_state_latch & 0x10)
- | (m_prom[state_addr()] & 0xf);
+ // Get next state
+ m_state_latch = (m_state_latch & 0x10) | (m_prom[state_addr()] & 0xf);
if (ST3)
{
- /* Read vector RAM/ROM */
+ // Read vector RAM/ROM
update_databus();
- /* Decode state and call the corresponding handler */
- switch(m_state_latch & 7) {
- case 0 : cycles += handler_0(); break;
- case 1 : cycles += handler_1(); break;
- case 2 : cycles += handler_2(); break;
- case 3 : cycles += handler_3(); break;
- case 4 : cycles += handler_4(); break;
- case 5 : cycles += handler_5(); break;
- case 6 : cycles += handler_6(); break;
- case 7 : cycles += handler_7(); break;
+ // Decode state and call the corresponding handler
+ switch (m_state_latch & 7)
+ {
+ case 0 : cycles += handler_0(); break;
+ case 1 : cycles += handler_1(); break;
+ case 2 : cycles += handler_2(); break;
+ case 3 : cycles += handler_3(); break;
+ case 4 : cycles += handler_4(); break;
+ case 5 : cycles += handler_5(); break;
+ case 6 : cycles += handler_6(); break;
+ case 7 : cycles += handler_7(); break;
}
}
- /* If halt flag was set, let CPU catch up before we make halt visible */
+ // If halt flag was set, let CPU catch up before we make halt visible
if (m_halt && !(m_state_latch & 0x10))
m_vg_halt_timer->adjust(attotime::from_hz(MASTER_CLOCK) * cycles, 1);
@@ -1281,12 +1243,12 @@ TIMER_CALLBACK_MEMBER(avgdvg_device::run_state_machine)
*
************************************/
-READ_LINE_MEMBER(avgdvg_device::done_r)
+READ_LINE_MEMBER(avgdvg_device_base::done_r)
{
return m_sync_halt ? 1 : 0;
}
-void avgdvg_device::go_w(u8 data)
+void avgdvg_device_base::go_w(u8 data)
{
vggo();
@@ -1305,7 +1267,7 @@ void avgdvg_device::go_w(u8 data)
m_vg_run_timer->adjust(attotime::zero);
}
-void avgdvg_device::go_word_w(u16 data)
+void avgdvg_device_base::go_word_w(u16 data)
{
go_w(data);
}
@@ -1317,13 +1279,13 @@ void avgdvg_device::go_word_w(u16 data)
*
************************************/
-void avgdvg_device::reset_w(u8 data)
+void avgdvg_device_base::reset_w(u8 data)
{
vgrst();
vg_set_halt(1);
}
-void avgdvg_device::reset_word_w(u16 data)
+void avgdvg_device_base::reset_word_w(u16 data)
{
reset_w(data);
}
@@ -1334,48 +1296,51 @@ void avgdvg_device::reset_word_w(u16 data)
*
************************************/
-void avgdvg_device::register_state()
+void avgdvg_device_base::device_start()
{
+ if (!m_vector->started())
+ throw device_missing_dependencies();
+
+ m_vg_halt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device_base::vg_set_halt_callback), this));
+ m_vg_run_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device_base::run_state_machine), this));
+
+ m_flip_x = m_flip_y = false;
+
save_item(NAME(m_pc));
save_item(NAME(m_sp));
save_item(NAME(m_dvx));
save_item(NAME(m_dvy));
- save_item(NAME(m_dvy12));
- save_item(NAME(m_timer));
save_item(NAME(m_stack));
save_item(NAME(m_data));
save_item(NAME(m_state_latch));
- save_item(NAME(m_int_latch));
save_item(NAME(m_scale));
- save_item(NAME(m_bin_scale));
save_item(NAME(m_intensity));
- save_item(NAME(m_color));
- save_item(NAME(m_enspkl));
- save_item(NAME(m_spkl_shift));
- save_item(NAME(m_map));
- save_item(NAME(m_hst));
- save_item(NAME(m_lst));
- save_item(NAME(m_izblank));
save_item(NAME(m_op));
save_item(NAME(m_halt));
save_item(NAME(m_sync_halt));
- save_item(NAME(m_xdac_xor));
- save_item(NAME(m_ydac_xor));
save_item(NAME(m_xpos));
save_item(NAME(m_ypos));
- save_item(NAME(m_clipx_min));
- save_item(NAME(m_clipy_min));
- save_item(NAME(m_clipx_max));
- save_item(NAME(m_clipy_max));
save_item(NAME(m_flip_x));
save_item(NAME(m_flip_y));
}
+void dvg_device::device_start()
+{
+ avgdvg_device_base::device_start();
+
+ const rectangle &visarea = m_vector->screen().visible_area();
+
+ m_xmin = visarea.min_x;
+ m_ymin = visarea.min_y;
+
+ m_xcenter = 512;
+ m_ycenter = 512;
+}
+
void avg_device::device_start()
{
- if (!m_vector->started())
- throw device_missing_dependencies();
+ avgdvg_device_base::device_start();
const rectangle &visarea = m_vector->screen().visible_area();
@@ -1387,10 +1352,12 @@ void avg_device::device_start()
m_xcenter = ((m_xmax - m_xmin) / 2) << 16;
m_ycenter = ((m_ymax - m_ymin) / 2) << 16;
- m_flip_x = m_flip_y = false;
+ m_dvy12 = 0;
+ m_timer = 0;
+ m_int_latch = 0;
- m_vg_halt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::vg_set_halt_callback),this));
- m_vg_run_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::run_state_machine),this));
+ m_bin_scale = 0;
+ m_color = 0;
/*
* The x and y DACs use 10 bit of the counter values which are in
@@ -1400,43 +1367,67 @@ void avg_device::device_start()
m_xdac_xor = 0x200;
m_ydac_xor = 0x200;
- register_state();
+ save_item(NAME(m_dvy12));
+ save_item(NAME(m_timer));
+ save_item(NAME(m_int_latch));
+ save_item(NAME(m_bin_scale));
+ save_item(NAME(m_color));
+ save_item(NAME(m_xdac_xor));
+ save_item(NAME(m_ydac_xor));
}
-void dvg_device::device_start()
+void avg_mhavoc_device::device_start()
{
- if (!m_vector->started())
- throw device_missing_dependencies();
+ avg_device::device_start();
- const rectangle &visarea = m_vector->screen().visible_area();
+ m_enspkl = 0;
+ m_spkl_shift = 0;
+ m_map = 0;
- m_xmin = visarea.min_x;
- m_ymin = visarea.min_y;
+ m_lst = 0;
- m_xcenter = 512;
- m_ycenter = 512;
+ save_item(NAME(m_enspkl));
+ save_item(NAME(m_spkl_shift));
+ save_item(NAME(m_map));
+ save_item(NAME(m_lst));
+}
- m_flip_x = m_flip_y = false;
+void avg_bzone_device::device_start()
+{
+ avg_device::device_start();
- m_vg_halt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::vg_set_halt_callback),this));
- m_vg_run_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device::run_state_machine),this));
+ m_hst = 0;
+ m_lst = 0;
+ m_izblank = 0;
+
+ m_clipx_min = 0;
+ m_clipy_min = 0;
+ m_clipx_max = 0;
+ m_clipy_max = 0;
- register_state();
+ save_item(NAME(m_hst));
+ save_item(NAME(m_lst));
+ save_item(NAME(m_izblank));
+ save_item(NAME(m_clipx_min));
+ save_item(NAME(m_clipy_min));
+ save_item(NAME(m_clipx_max));
+ save_item(NAME(m_clipy_max));
}
-avgdvg_device::avgdvg_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, type, tag, owner, clock)
- , m_vectorram(*this, "vectorram")
- , m_colorram(*this, "colorram")
- , m_prom(*this, "prom")
- , m_vector(*this, finder_base::DUMMY_TAG)
+
+avgdvg_device_base::avgdvg_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, type, tag, owner, clock),
+ m_vector(*this, finder_base::DUMMY_TAG),
+ m_memspace(*this, finder_base::DUMMY_TAG, -1),
+ m_membase(0),
+ m_prom(*this, "prom"),
+ m_vg_run_timer(nullptr),
+ m_vg_halt_timer(nullptr)
{
m_pc = 0;
m_sp = 0;
m_dvx = 0;
m_dvy = 0;
- m_dvy12 = 0;
- m_timer = 0;
m_stack[0] = 0;
m_stack[1] = 0;
m_stack[2] = 0;
@@ -1444,90 +1435,70 @@ avgdvg_device::avgdvg_device(const machine_config &mconfig, device_type type, co
m_data = 0;
m_state_latch = 0;
- m_int_latch = 0;
m_scale = 0;
- m_bin_scale = 0;
m_intensity = 0;
- m_color = 0;
- m_enspkl = 0;
- m_spkl_shift = 0;
- m_map = 0;
-
- m_hst = 0;
- m_lst = 0;
- m_izblank = 0;
m_op = 0;
m_halt = 0;
m_sync_halt = 0;
- m_xdac_xor = 0;
- m_ydac_xor = 0;
-
m_xpos = 0;
m_ypos = 0;
- m_clipx_min = 0;
- m_clipy_min = 0;
- m_clipx_max = 0;
- m_clipy_max = 0;
-
- m_xmin = 0;
- m_xmax = 0;
- m_ymin = 0;
- m_ymax = 0;
- m_xcenter = 0;
- m_ycenter = 0;
- m_flip_x = false;
- m_flip_y = false;
m_nvect = 0;
}
-dvg_device::dvg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- avgdvg_device(mconfig, DVG, tag, owner, clock)
+dvg_device::dvg_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
+ avgdvg_device_base(mconfig, DVG, tag, owner, clock)
{
}
-avg_device::avg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+avg_device::avg_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
avg_device(mconfig, AVG, tag, owner, clock)
{
}
-avg_device::avg_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
- avgdvg_device(mconfig, type, tag, owner, clock)
+avg_device::avg_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) :
+ avgdvg_device_base(mconfig, type, tag, owner, clock)
{
}
-
-avg_tempest_device::avg_tempest_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- avg_device(mconfig, AVG_TEMPEST, tag, owner, clock)
+avg_tempest_device::avg_tempest_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
+ avg_device(mconfig, AVG_TEMPEST, tag, owner, clock),
+ m_colorram(*this, "colorram")
{
}
-avg_mhavoc_device::avg_mhavoc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+
+avg_mhavoc_device::avg_mhavoc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
avg_device(mconfig, AVG_MHAVOC, tag, owner, clock),
+ m_colorram(*this, "colorram"),
m_bank_region(*this, DEVICE_SELF)
{
}
-avg_starwars_device::avg_starwars_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+avg_starwars_device::avg_starwars_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
avg_device(mconfig, AVG_STARWARS, tag, owner, clock)
{
}
-avg_quantum_device::avg_quantum_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- avg_device(mconfig, AVG_QUANTUM, tag, owner, clock)
+avg_quantum_device::avg_quantum_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
+ avg_device(mconfig, AVG_QUANTUM, tag, owner, clock),
+ m_colorram(*this, "colorram")
{
}
-avg_bzone_device::avg_bzone_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+avg_bzone_device::avg_bzone_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
avg_device(mconfig, AVG_BZONE, tag, owner, clock)
{
}
-avg_tomcat_device::avg_tomcat_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- avg_device(mconfig, AVG_TOMCAT, tag, owner, clock)
-{
-}
+
+
+/*************************************
+ *
+ * Device type definitions
+ *
+ *************************************/
DEFINE_DEVICE_TYPE(DVG, dvg_device, "dvg", "Atari DVG")
DEFINE_DEVICE_TYPE(AVG, avg_device, "avg", "Atari AVG")
@@ -1536,4 +1507,3 @@ DEFINE_DEVICE_TYPE(AVG_MHAVOC, avg_mhavoc_device, "avg_mhavoc", "Atari AVG
DEFINE_DEVICE_TYPE(AVG_STARWARS, avg_starwars_device, "avg_starwars", "Atari AVG (Star Wars)")
DEFINE_DEVICE_TYPE(AVG_QUANTUM, avg_quantum_device, "avg_quantum", "Atari AVG (Quantum)")
DEFINE_DEVICE_TYPE(AVG_BZONE, avg_bzone_device, "avg_bzone", "Atari AVG (Battle Zone)")
-DEFINE_DEVICE_TYPE(AVG_TOMCAT, avg_tomcat_device, "avg_tomcat", "Atari AVG (TomCat)")
diff --git a/src/mame/video/avgdvg.h b/src/mame/video/avgdvg.h
index af75d1b8f81..3d8431e182c 100644
--- a/src/mame/video/avgdvg.h
+++ b/src/mame/video/avgdvg.h
@@ -9,12 +9,18 @@
#include "video/vector.h"
-// ======================> avgdvg_device
-
-class avgdvg_device : public device_t
+class avgdvg_device_base : public device_t
{
public:
- template <typename T> void set_vector_tag(T &&tag) { m_vector.set_tag(std::forward<T>(tag)); }
+ template <typename T> void set_vector(T &&tag)
+ {
+ m_vector.set_tag(std::forward<T>(tag));
+ }
+ template <typename T> void set_memory(T &&tag, int no, offs_t base)
+ {
+ m_memspace.set_tag(std::forward<T>(tag), no);
+ m_membase = base;
+ }
DECLARE_READ_LINE_MEMBER(done_r);
void go_w(u8 data = 0);
@@ -23,12 +29,10 @@ public:
void go_word_w(u16 data = 0);
void reset_word_w(u16 data = 0);
- /* Tempest and Quantum use this capability */
+ // Tempest and Quantum use this capability
void set_flip_x(bool flip) { m_flip_x = flip; }
void set_flip_y(bool flip) { m_flip_y = flip; }
- TIMER_CALLBACK_MEMBER(vg_set_halt_callback);
- TIMER_CALLBACK_MEMBER(run_state_machine);
protected:
static constexpr unsigned MAXVECT = 10000;
@@ -41,25 +45,36 @@ protected:
int status;
};
- // construction/destruction
- avgdvg_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ avgdvg_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
- void apply_flipping(int *x, int *y);
+ virtual int handler_0() = 0;
+ virtual int handler_1() = 0;
+ virtual int handler_2() = 0;
+ virtual int handler_3() = 0;
+ virtual int handler_4() = 0;
+ virtual int handler_5() = 0;
+ virtual int handler_6() = 0;
+ virtual int handler_7() = 0;
+ virtual u8 state_addr() = 0;
+ virtual void update_databus() = 0;
+ virtual void vggo() = 0;
+ virtual void vgrst() = 0;
+
+ void apply_flipping(int &x, int &y) const;
void vg_set_halt(int dummy);
void vg_flush();
void vg_add_point_buf(int x, int y, rgb_t color, int intensity);
void vg_add_clip(int xmin, int ymin, int xmax, int ymax);
- void register_state();
-
- required_shared_ptr<u8> m_vectorram;
- optional_shared_ptr<u8> m_colorram;
- required_region_ptr<u8> m_prom;
+ required_device<vector_device> m_vector;
+ required_address_space m_memspace;
+ offs_t m_membase;
- int m_xmin, m_xmax, m_ymin, m_ymax;
+ int m_xmin, m_ymin;
int m_xcenter, m_ycenter;
- emu_timer *m_vg_run_timer, *m_vg_halt_timer;
bool m_flip_x, m_flip_y;
@@ -70,65 +85,37 @@ protected:
u8 m_sp;
u16 m_dvx;
u16 m_dvy;
- u8 m_dvy12;
- u16 m_timer;
u16 m_stack[4];
u16 m_data;
u8 m_state_latch;
- u8 m_int_latch;
u8 m_scale;
- u8 m_bin_scale;
u8 m_intensity;
- u8 m_color;
- u8 m_enspkl;
- u8 m_spkl_shift;
- u8 m_map;
-
- u16 m_hst;
- u16 m_lst;
- u16 m_izblank;
u8 m_op;
u8 m_halt;
u8 m_sync_halt;
- u16 m_xdac_xor;
- u16 m_ydac_xor;
-
s32 m_xpos;
s32 m_ypos;
- s32 m_clipx_min;
- s32 m_clipy_min;
- s32 m_clipx_max;
- s32 m_clipy_max;
-
- virtual int handler_0() = 0;
- virtual int handler_1() = 0;
- virtual int handler_2() = 0;
- virtual int handler_3() = 0;
- virtual int handler_4() = 0;
- virtual int handler_5() = 0;
- virtual int handler_6() = 0;
- virtual int handler_7() = 0;
- virtual u8 state_addr() = 0;
- virtual void update_databus() = 0;
- virtual void vggo() = 0;
- virtual void vgrst() = 0;
+private:
+ TIMER_CALLBACK_MEMBER(vg_set_halt_callback);
+ TIMER_CALLBACK_MEMBER(run_state_machine);
- required_device<vector_device> m_vector;
+ required_region_ptr<u8> m_prom;
+ emu_timer *m_vg_run_timer, *m_vg_halt_timer;
};
-class dvg_device : public avgdvg_device
+
+class dvg_device : public avgdvg_device_base
{
public:
- // construction/destruction
- dvg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- void dvg_draw_to(int x, int y, int intensity);
+ dvg_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
+ virtual void device_start() override;
+
virtual int handler_0() override;
virtual int handler_1() override;
virtual int handler_2() override;
@@ -142,24 +129,20 @@ protected:
virtual void vggo() override;
virtual void vgrst() override;
- virtual void device_start() override;
+private:
+ void dvg_draw_to(int x, int y, int intensity);
};
-// device type definition
-DECLARE_DEVICE_TYPE(DVG, dvg_device)
-class avg_device : public avgdvg_device
+class avg_device : public avgdvg_device_base
{
public:
- // construction/destruction
- avg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- int avg_common_strobe1();
- int avg_common_strobe2();
- int avg_common_strobe3();
+ avg_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
- avg_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+ avg_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ virtual void device_start() override;
virtual int handler_0() override;
virtual int handler_1() override;
@@ -174,34 +157,47 @@ protected:
virtual void vggo() override;
virtual void vgrst() override;
- virtual void device_start() override;
+ int avg_common_strobe1();
+ int avg_common_strobe2();
+ int avg_common_strobe3();
+
+ int m_xmax, m_ymax;
+
+ u8 m_dvy12;
+ u16 m_timer;
+
+ u8 m_int_latch;
+ u8 m_bin_scale;
+ u8 m_color;
+
+ u16 m_xdac_xor;
+ u16 m_ydac_xor;
};
-// device type definition
-DECLARE_DEVICE_TYPE(AVG, avg_device)
class avg_tempest_device : public avg_device
{
public:
- // construction/destruction
- avg_tempest_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ avg_tempest_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
virtual int handler_6() override;
virtual int handler_7() override;
//virtual void vggo();
+
+private:
+ required_shared_ptr<u8> m_colorram;
};
-// device type definition
-DECLARE_DEVICE_TYPE(AVG_TEMPEST, avg_tempest_device)
class avg_mhavoc_device : public avg_device
{
public:
- // construction/destruction
- avg_mhavoc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ avg_mhavoc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
+ virtual void device_start() override;
+
virtual int handler_1() override;
virtual int handler_6() override;
virtual int handler_7() override;
@@ -209,17 +205,21 @@ protected:
virtual void vgrst() override;
private:
+ required_shared_ptr<u8> m_colorram;
required_region_ptr<u8> m_bank_region;
+
+ u8 m_enspkl;
+ u8 m_spkl_shift;
+ u8 m_map;
+
+ u16 m_lst;
};
-// device type definition
-DECLARE_DEVICE_TYPE(AVG_MHAVOC, avg_mhavoc_device)
class avg_starwars_device : public avg_device
{
public:
- // construction/destruction
- avg_starwars_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ avg_starwars_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
virtual int handler_6() override;
@@ -227,14 +227,11 @@ protected:
virtual void update_databus() override;
};
-// device type definition
-DECLARE_DEVICE_TYPE(AVG_STARWARS, avg_starwars_device)
class avg_quantum_device : public avg_device
{
public:
- // construction/destruction
- avg_quantum_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ avg_quantum_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
virtual int handler_0() override;
@@ -247,39 +244,43 @@ protected:
virtual int handler_7() override;
virtual void update_databus() override;
virtual void vggo() override;
+
+private:
+ required_shared_ptr<u16> m_colorram;
};
-// device type definition
-DECLARE_DEVICE_TYPE(AVG_QUANTUM, avg_quantum_device)
class avg_bzone_device : public avg_device
{
public:
- // construction/destruction
- avg_bzone_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ avg_bzone_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
+ virtual void device_start() override;
+
virtual int handler_1() override;
virtual int handler_6() override;
virtual int handler_7() override;
-};
-// device type definition
-DECLARE_DEVICE_TYPE(AVG_BZONE, avg_bzone_device)
-
-class avg_tomcat_device : public avg_device
-{
-public:
- // construction/destruction
- avg_tomcat_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+private:
+ u16 m_hst;
+ u16 m_lst;
+ u16 m_izblank;
-protected:
- virtual int handler_6() override;
- virtual int handler_7() override;
+ s32 m_clipx_min;
+ s32 m_clipy_min;
+ s32 m_clipx_max;
+ s32 m_clipy_max;
};
-// device type definition
-DECLARE_DEVICE_TYPE(AVG_TOMCAT, avg_tomcat_device)
+// device type declarations
+DECLARE_DEVICE_TYPE(DVG, dvg_device)
+DECLARE_DEVICE_TYPE(AVG, avg_device)
+DECLARE_DEVICE_TYPE(AVG_TEMPEST, avg_tempest_device)
+DECLARE_DEVICE_TYPE(AVG_MHAVOC, avg_mhavoc_device)
+DECLARE_DEVICE_TYPE(AVG_STARWARS, avg_starwars_device)
+DECLARE_DEVICE_TYPE(AVG_QUANTUM, avg_quantum_device)
+DECLARE_DEVICE_TYPE(AVG_BZONE, avg_bzone_device)
#endif // MAME_VIDEO_AVGDVG_H