diff options
author | 2020-11-07 07:36:42 +1100 | |
---|---|---|
committer | 2020-11-07 07:38:10 +1100 | |
commit | db4a5328a2a015dc42e6ef0ea0ec97e6f260e9b3 (patch) | |
tree | dbd2a6160fad7bc081cbc4edce53ae1992a9cb1f | |
parent | fc0478133374d940ce8a7e60109d956697887087 (diff) |
video/avgdvg.cpp: Modernised code somewhat.
bwidow is still broken, all other games seem to work.
-rw-r--r-- | src/emu/save.cpp | 15 | ||||
-rw-r--r-- | src/emu/save.h | 2 | ||||
-rw-r--r-- | src/mame/drivers/asteroid.cpp | 27 | ||||
-rw-r--r-- | src/mame/drivers/bwidow.cpp | 39 | ||||
-rw-r--r-- | src/mame/drivers/bzone.cpp | 17 | ||||
-rw-r--r-- | src/mame/drivers/mhavoc.cpp | 145 | ||||
-rw-r--r-- | src/mame/drivers/omegrace.cpp | 42 | ||||
-rw-r--r-- | src/mame/drivers/quantum.cpp | 11 | ||||
-rw-r--r-- | src/mame/drivers/starwars.cpp | 27 | ||||
-rw-r--r-- | src/mame/drivers/tempest.cpp | 59 | ||||
-rw-r--r-- | src/mame/drivers/tomcat.cpp | 13 | ||||
-rw-r--r-- | src/mame/video/avgdvg.cpp | 436 | ||||
-rw-r--r-- | src/mame/video/avgdvg.h | 203 |
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 |