diff options
Diffstat (limited to 'src/mame/atari/vindictr.cpp')
-rw-r--r-- | src/mame/atari/vindictr.cpp | 457 |
1 files changed, 384 insertions, 73 deletions
diff --git a/src/mame/atari/vindictr.cpp b/src/mame/atari/vindictr.cpp index 9bc8b9bf49b..51af0669896 100644 --- a/src/mame/atari/vindictr.cpp +++ b/src/mame/atari/vindictr.cpp @@ -20,13 +20,340 @@ #include "emu.h" -#include "vindictr.h" + +#include "atarijsa.h" +#include "atarimo.h" #include "cpu/m68000/m68010.h" #include "machine/eeprompar.h" +#include "machine/timer.h" #include "machine/watchdog.h" + +#include "emupal.h" +#include "screen.h" #include "speaker.h" +#include "tilemap.h" + + +namespace { + +class vindictr_state : public driver_device +{ +public: + vindictr_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_screen(*this, "screen"), + m_playfield_tilemap(*this, "playfield"), + m_alpha_tilemap(*this, "alpha"), + m_mob(*this, "mob"), + m_jsa(*this, "jsa"), + m_palette(*this, "palette"), + m_paletteram(*this, "paletteram"), + m_260010(*this, "260010") + { } + + void vindictr(machine_config &config); + +protected: + virtual void video_start() override; + +private: + required_device<cpu_device> m_maincpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<screen_device> m_screen; + required_device<tilemap_device> m_playfield_tilemap; + required_device<tilemap_device> m_alpha_tilemap; + required_device<atari_motion_objects_device> m_mob; + required_device<atari_jsa_i_device> m_jsa; + required_device<palette_device> m_palette; + required_shared_ptr<uint16_t> m_paletteram; + required_ioport m_260010; + + uint8_t m_playfield_tile_bank = 0; + uint16_t m_playfield_xscroll = 0; + uint16_t m_playfield_yscroll = 0; + + void scanline_interrupt(); + void scanline_int_ack_w(uint16_t data); + TIMER_DEVICE_CALLBACK_MEMBER(scanline_update); + uint16_t port1_r(); + TILE_GET_INFO_MEMBER(get_alpha_tile_info); + TILE_GET_INFO_MEMBER(get_playfield_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + + static const atari_motion_objects_config s_mob_config; + void main_map(address_map &map); +}; + + +/************************************* + * + * Tilemap callbacks + * + *************************************/ + +TILE_GET_INFO_MEMBER(vindictr_state::get_alpha_tile_info) +{ + uint16_t const data = m_alpha_tilemap->basemem_read(tile_index); + int const code = data & 0x3ff; + int const color = ((data >> 10) & 0x0f) | ((data >> 9) & 0x20); + int const opaque = data & 0x8000; + tileinfo.set(1, code, color, opaque ? TILE_FORCE_LAYER0 : 0); +} + + +TILE_GET_INFO_MEMBER(vindictr_state::get_playfield_tile_info) +{ + uint16_t const data = m_playfield_tilemap->basemem_read(tile_index); + int const code = (m_playfield_tile_bank * 0x1000) + (data & 0xfff); + int const color = 0x10 + 2 * ((data >> 12) & 7); + tileinfo.set(0, code, color, (data >> 15) & 1); +} + + + +/************************************* + * + * Video system start + * + *************************************/ + +const atari_motion_objects_config vindictr_state::s_mob_config = +{ + 0, // index to which gfx system + 1, // number of motion object banks + 1, // are the entries linked? + 0, // are the entries split? + 0, // render in reverse order? + 0, // render in swapped X/Y order? + 0, // does the neighbor bit affect the next object? + 8, // pixels per SLIP entry (0 for no-slip) + 0, // pixel offset for SLIPs + 0, // maximum number of links to visit/scanline (0=all) + + 0x100, // base palette entry + 0x100, // maximum number of colors + 0, // transparent pen index + + {{ 0,0,0,0x03ff }}, // mask for the link + {{ 0x7fff,0,0,0 }}, // mask for the code index + {{ 0,0x000f,0,0 }}, // mask for the color + {{ 0,0xff80,0,0 }}, // mask for the X position + {{ 0,0,0xff80,0 }}, // mask for the Y position + {{ 0,0,0x0038,0 }}, // mask for the width, in tiles + {{ 0,0,0x0007,0 }}, // mask for the height, in tiles + {{ 0,0,0x0040,0 }}, // mask for the horizontal flip + {{ 0 }}, // mask for the vertical flip + {{ 0,0x0070,0,0 }}, // mask for the priority + {{ 0 }}, // mask for the neighbor + {{ 0 }}, // mask for absolute coordinates + + {{ 0 }}, // mask for the special value + 0 // resulting value to indicate "special" +}; + +void vindictr_state::video_start() +{ + // save states + save_item(NAME(m_playfield_tile_bank)); + save_item(NAME(m_playfield_xscroll)); + save_item(NAME(m_playfield_yscroll)); +} + + + +/************************************* + * + * Palette RAM control + * + *************************************/ + +void vindictr_state::paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + static const int ztable[16] = + { 0x0, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11 }; + + // first blend the data + COMBINE_DATA(&m_paletteram[offset]); + data = m_paletteram[offset]; + + // now generate colors at all 16 intensities + for (int c = 0; c < 8; c++) + { + int const i = ztable[((data >> 12) + (c * 2)) & 15]; + int const r = ((data >> 8) & 15) * i; + int const g = ((data >> 4) & 15) * i; + int const b = ((data >> 0) & 15) * i; + + m_palette->set_pen_color(offset + c * 2048, rgb_t(r, g, b)); + } +} + + + +/************************************* + * + * Periodic scanline updater + * + *************************************/ + +TIMER_DEVICE_CALLBACK_MEMBER(vindictr_state::scanline_update) +{ + int const scanline = param; + + // keep in range + int offset = ((scanline - 8) / 8) * 64 + 42; + if (offset < 0) + offset += 0x7c0; + else if (offset >= 0x7c0) + return; + + // update the current parameters + for (int x = 42; x < 64; x++) + { + uint16_t const data = m_alpha_tilemap->basemem_read(offset++); + + switch ((data >> 9) & 7) + { + case 2: // /PFB + if (m_playfield_tile_bank != (data & 7)) + { + m_screen->update_partial(scanline - 1); + m_playfield_tile_bank = data & 7; + m_playfield_tilemap->mark_all_dirty(); + } + break; + + case 3: // /PFHSLD + if (m_playfield_xscroll != (data & 0x1ff)) + { + m_screen->update_partial(scanline - 1); + m_playfield_tilemap->set_scrollx(0, data); + m_playfield_xscroll = data & 0x1ff; + } + break; + + case 4: // /MOHS + if (m_mob->xscroll() != (data & 0x1ff)) + { + m_screen->update_partial(scanline - 1); + m_mob->set_xscroll(data & 0x1ff); + } + break; + + case 5: // /PFSPC + break; + + case 6: // /VIRQ + scanline_interrupt(); + break; + + case 7: // /PFVS + { + // a new vscroll latches the offset into a counter; we must adjust for this + int offset = scanline; + const rectangle &visible_area = m_screen->visible_area(); + if (offset > visible_area.bottom()) + offset -= visible_area.bottom() + 1; + + if (m_playfield_yscroll != ((data - offset) & 0x1ff)) + { + m_screen->update_partial(scanline - 1); + m_playfield_tilemap->set_scrolly(0, data - offset); + m_mob->set_yscroll((data - offset) & 0x1ff); + } + break; + } + } + } +} + + + +/************************************* + * + * Main refresh + * + *************************************/ +uint32_t vindictr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + // start drawing + m_mob->draw_async(cliprect); + + // draw the playfield + m_playfield_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + // draw and merge the MO + bitmap_ind16 &mobitmap = m_mob->bitmap(); + for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next()) + for (int y = rect->top(); y <= rect->bottom(); y++) + { + uint16_t const *const mo = &mobitmap.pix(y); + uint16_t *const pf = &bitmap.pix(y); + for (int x = rect->left(); x <= rect->right(); x++) + if (mo[x] != 0xffff) + { + /* partially verified via schematics (there are a lot of PALs involved!): + + SHADE = PAL(MPR1-0, LB7-0, PFX6-5, PFX3-2, PF/M) + + if (SHADE) + CRA |= 0x100 + + MOG3-1 = ~MAT3-1 if MAT6==1 and MSD3==1 + */ + int const mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT; + + // upper bit of MO priority signals special rendering and doesn't draw anything + if (mopriority & 4) + continue; + + // MO pen 1 doesn't draw, but it sets the SHADE flag and bumps the palette offset + if ((mo[x] & 0x0f) == 1) + { + if ((mo[x] & 0xf0) != 0) + pf[x] |= 0x100; + } + else + pf[x] = mo[x] & atari_motion_objects_device::DATA_MASK; + + // don't erase yet -- we need to make another pass later + } + } + + // add the alpha on top + m_alpha_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + // now go back and process the upper bit of MO priority + for (const sparse_dirty_rect *rect = m_mob->first_dirty_rect(cliprect); rect != nullptr; rect = rect->next()) + for (int y = rect->top(); y <= rect->bottom(); y++) + { + uint16_t const *const mo = &mobitmap.pix(y); + uint16_t *const pf = &bitmap.pix(y); + for (int x = rect->left(); x <= rect->right(); x++) + if (mo[x] != 0xffff) + { + int const mopriority = mo[x] >> atari_motion_objects_device::PRIORITY_SHIFT; + + // upper bit of MO priority might mean palette kludges + if (mopriority & 4) + { + // if bit 2 is set, start setting high palette bits + if (mo[x] & 2) + m_mob->apply_stain(bitmap, pf, mo, x, y); + + // if the upper bit of pen data is set, we adjust the final intensity + if (mo[x] & 8) + pf[x] |= (~mo[x] & 0xe0) << 6; + } + } + } + return 0; +} /************************************* @@ -47,11 +374,6 @@ void vindictr_state::scanline_int_ack_w(uint16_t data) } -void vindictr_state::machine_reset() -{ -} - - /************************************* * @@ -61,7 +383,7 @@ void vindictr_state::machine_reset() uint16_t vindictr_state::port1_r() { - int result = ioport("260010")->read(); + int result = m_260010->read(); result ^= 0x0010; return result; } @@ -79,7 +401,7 @@ void vindictr_state::main_map(address_map &map) map.unmap_value_high(); map.global_mask(0x3fffff); map(0x000000, 0x05ffff).rom(); - map(0x0e0000, 0x0e0fff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff); + map(0x0e0000, 0x0e03ff).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff); map(0x1f0000, 0x1fffff).w("eeprom", FUNC(eeprom_parallel_28xx_device::unlock_write16)); map(0x260000, 0x26000f).portr("260000"); map(0x260010, 0x26001f).r(FUNC(vindictr_state::port1_r)); @@ -90,7 +412,7 @@ void vindictr_state::main_map(address_map &map) map(0x360010, 0x360011).nopw(); map(0x360020, 0x360021).w(m_jsa, FUNC(atari_jsa_i_device::sound_reset_w)); map(0x360031, 0x360031).w(m_jsa, FUNC(atari_jsa_i_device::main_command_w)); - map(0x3e0000, 0x3e0fff).ram().w(FUNC(vindictr_state::vindictr_paletteram_w)).share("paletteram"); + map(0x3e0000, 0x3e0fff).ram().w(FUNC(vindictr_state::paletteram_w)).share(m_paletteram); map(0x3f0000, 0x3f1fff).mirror(0x8000).ram().w(m_playfield_tilemap, FUNC(tilemap_device::write16)).share("playfield"); map(0x3f2000, 0x3f3fff).mirror(0x8000).ram().share("mob"); map(0x3f4000, 0x3f4f7f).mirror(0x8000).ram().w(m_alpha_tilemap, FUNC(tilemap_device::write16)).share("alpha"); @@ -174,8 +496,8 @@ static const gfx_layout pfmolayout = static GFXDECODE_START( gfx_vindictr ) - GFXDECODE_ENTRY( "gfx1", 0, pfmolayout, 256, 32 ) /* sprites & playfield */ - GFXDECODE_ENTRY( "gfx2", 0, anlayout, 0, 64 ) /* characters 8x8 */ + GFXDECODE_ENTRY( "sprites_pf", 0, pfmolayout, 256, 32 ) + GFXDECODE_ENTRY( "chars", 0, anlayout, 0, 64 ) GFXDECODE_END @@ -188,8 +510,8 @@ GFXDECODE_END void vindictr_state::vindictr(machine_config &config) { - /* basic machine hardware */ - M68010(config, m_maincpu, 14.318181_MHz_XTAL/2); + // basic machine hardware + M68010(config, m_maincpu, 14.318181_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, &vindictr_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(vindictr_state::scanline_update), m_screen, 0, 8); @@ -198,25 +520,25 @@ void vindictr_state::vindictr(machine_config &config) WATCHDOG_TIMER(config, "watchdog"); - /* video hardware */ + // video hardware GFXDECODE(config, m_gfxdecode, m_palette, gfx_vindictr); PALETTE(config, m_palette).set_entries(2048*8); - TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_COLS, 64,64).set_info_callback(FUNC(vindictr_state::get_playfield_tile_info)); - TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,32, 0).set_info_callback(FUNC(vindictr_state::get_alpha_tile_info)); + TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 8, 8, TILEMAP_SCAN_COLS, 64, 64).set_info_callback(FUNC(vindictr_state::get_playfield_tile_info)); + TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8, 8, TILEMAP_SCAN_ROWS, 64, 32, 0).set_info_callback(FUNC(vindictr_state::get_alpha_tile_info)); ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, vindictr_state::s_mob_config); m_mob->set_gfxdecode(m_gfxdecode); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK); - /* note: these parameters are from published specs, not derived */ - /* the board uses a SYNGEN chip to generate video signals */ - m_screen->set_raw(14.318181_MHz_XTAL/2, 456, 0, 336, 262, 0, 240); - m_screen->set_screen_update(FUNC(vindictr_state::screen_update_vindictr)); + // note: these parameters are from published specs, not derived + // the board uses a SYNGEN chip to generate video signals + m_screen->set_raw(14.318181_MHz_XTAL / 2, 456, 0, 336, 262, 0, 240); + m_screen->set_screen_update(FUNC(vindictr_state::screen_update)); m_screen->set_palette(m_palette); - /* sound hardware */ + // sound hardware SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); @@ -237,7 +559,7 @@ void vindictr_state::vindictr(machine_config &config) *************************************/ ROM_START( vindictr ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-5117.d1", 0x000000, 0x010000, CRC(2e5135e4) SHA1(804b3ba201088ac2c35cfcbd530acbd73548ea8c) ) ROM_LOAD16_BYTE( "136059-5118.d3", 0x000001, 0x010000, CRC(e357fa79) SHA1(220a10287f4bf9d981fd412c8dd0a9c106eaf342) ) ROM_LOAD16_BYTE( "136059-5119.f1", 0x020000, 0x010000, CRC(0deb7330) SHA1(e9fb311e96bcf57f2136fff87a973a5a3b5208b3) ) @@ -245,10 +567,10 @@ ROM_START( vindictr ) ROM_LOAD16_BYTE( "136059-5121.k1", 0x040000, 0x010000, CRC(96b150c5) SHA1(405c848f7990c981fefd355ca635bfb0ac24eb26) ) ROM_LOAD16_BYTE( "136059-5122.k3", 0x040001, 0x010000, CRC(6415d312) SHA1(0115e32c1c42421cb3d978cc8642f7f88d492043) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -262,7 +584,7 @@ ROM_START( vindictr ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1123.16n", 0x000000, 0x004000, CRC(f99b631a) SHA1(7a2430b6810c77b0f717d6e9d71823eadbcf6013) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -274,7 +596,7 @@ ROM_END ROM_START( vindictre ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-5717.d1", 0x000000, 0x010000, CRC(af5ba4a8) SHA1(fdb6e7f0707af94b39368cc39ae45c53209ce32e) ) ROM_LOAD16_BYTE( "136059-5718.d3", 0x000001, 0x010000, CRC(c87b0581) SHA1(f33c72e83e8c811d3405deb470573327c7b68ea6) ) ROM_LOAD16_BYTE( "136059-5719.f1", 0x020000, 0x010000, CRC(1e5f94e1) SHA1(bf14e4d3c26507ad3a78ad28b6b54e4ea0939ceb) ) @@ -282,10 +604,10 @@ ROM_START( vindictre ) ROM_LOAD16_BYTE( "136059-5721.k1", 0x040000, 0x010000, CRC(96b150c5) SHA1(405c848f7990c981fefd355ca635bfb0ac24eb26) ) ROM_LOAD16_BYTE( "136059-5722.k3", 0x040001, 0x010000, CRC(6415d312) SHA1(0115e32c1c42421cb3d978cc8642f7f88d492043) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -299,7 +621,7 @@ ROM_START( vindictre ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1123.16n", 0x000000, 0x004000, CRC(f99b631a) SHA1(7a2430b6810c77b0f717d6e9d71823eadbcf6013) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -311,7 +633,7 @@ ROM_END ROM_START( vindictrg ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-1217.d1", 0x000000, 0x010000, CRC(0a589e9a) SHA1(6770212b57599cd9bcdeb126aec30d9815608005) ) ROM_LOAD16_BYTE( "136059-1218.d3", 0x000001, 0x010000, CRC(e8b7959a) SHA1(b63747934b188f44a5e59a54f52d15b33f9d676b) ) ROM_LOAD16_BYTE( "136059-1219.f1", 0x020000, 0x010000, CRC(2534fcbc) SHA1(d8a2121de88efabf99a153fd477c7bf2fddc88c9) ) @@ -319,10 +641,10 @@ ROM_START( vindictrg ) ROM_LOAD16_BYTE( "136059-1221.k1", 0x040000, 0x010000, CRC(ee1b1014) SHA1(ddfe01cdec4654a42c9e49660e3532e5c865a9b7) ) ROM_LOAD16_BYTE( "136059-1222.k3", 0x040001, 0x010000, CRC(517b33f0) SHA1(f6430862bb00e11a68e964c89adcad1f05bc021b) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -336,7 +658,7 @@ ROM_START( vindictrg ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1223.16n", 0x000000, 0x004000, CRC(d27975bb) SHA1(a8ab8bdbd9fbcbcf73e8621b2a4447d25bf612b8) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -348,7 +670,7 @@ ROM_END ROM_START( vindictre4 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-1117.d1", 0x000000, 0x010000, CRC(2e5135e4) SHA1(804b3ba201088ac2c35cfcbd530acbd73548ea8c) ) ROM_LOAD16_BYTE( "136059-1118.d3", 0x000001, 0x010000, CRC(e357fa79) SHA1(220a10287f4bf9d981fd412c8dd0a9c106eaf342) ) ROM_LOAD16_BYTE( "136059-4719.f1", 0x020000, 0x010000, CRC(3b27ab80) SHA1(330a6fe0e0265cce40c913aa5c3607429afe510b) ) @@ -356,10 +678,10 @@ ROM_START( vindictre4 ) ROM_LOAD16_BYTE( "136059-4121.k1", 0x040000, 0x010000, CRC(9a0444ee) SHA1(211be931a8b6ca42dd140baf3e165ce23f75431f) ) ROM_LOAD16_BYTE( "136059-4122.k3", 0x040001, 0x010000, CRC(d5022d78) SHA1(eeb6876ee6994f5736114a786c5c4ba97f26ef01) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -373,7 +695,7 @@ ROM_START( vindictre4 ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1123.16n", 0x000000, 0x004000, CRC(f99b631a) SHA1(7a2430b6810c77b0f717d6e9d71823eadbcf6013) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -385,7 +707,7 @@ ROM_END ROM_START( vindictr4 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-1117.d1", 0x000000, 0x010000, CRC(2e5135e4) SHA1(804b3ba201088ac2c35cfcbd530acbd73548ea8c) ) ROM_LOAD16_BYTE( "136059-1118.d3", 0x000001, 0x010000, CRC(e357fa79) SHA1(220a10287f4bf9d981fd412c8dd0a9c106eaf342) ) ROM_LOAD16_BYTE( "136059-4119.f1", 0x020000, 0x010000, CRC(44c77ee0) SHA1(f47307126a4960d59d19d1783497971f76ee00a5) ) @@ -393,10 +715,10 @@ ROM_START( vindictr4 ) ROM_LOAD16_BYTE( "136059-4121.k1", 0x040000, 0x010000, CRC(9a0444ee) SHA1(211be931a8b6ca42dd140baf3e165ce23f75431f) ) ROM_LOAD16_BYTE( "136059-4122.k3", 0x040001, 0x010000, CRC(d5022d78) SHA1(eeb6876ee6994f5736114a786c5c4ba97f26ef01) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -410,7 +732,7 @@ ROM_START( vindictr4 ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1123.16n", 0x000000, 0x004000, CRC(f99b631a) SHA1(7a2430b6810c77b0f717d6e9d71823eadbcf6013) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -422,7 +744,7 @@ ROM_END ROM_START( vindictre3 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-3117.d1", 0x000000, 0x010000, CRC(af5ba4a8) SHA1(fdb6e7f0707af94b39368cc39ae45c53209ce32e) ) ROM_LOAD16_BYTE( "136059-3118.d3", 0x000001, 0x010000, CRC(c87b0581) SHA1(f33c72e83e8c811d3405deb470573327c7b68ea6) ) ROM_LOAD16_BYTE( "136059-3119.f1", 0x020000, 0x010000, CRC(f0516142) SHA1(16f23a9a8939cead728108fc23fccebf2529d553) ) @@ -430,10 +752,10 @@ ROM_START( vindictre3 ) ROM_LOAD16_BYTE( "136059-2121.k1", 0x040000, 0x010000, CRC(9b6111e0) SHA1(427197b21a5db2a06751ab281fde7a2f63818db8) ) ROM_LOAD16_BYTE( "136059-2122.k3", 0x040001, 0x010000, CRC(8d029a28) SHA1(a166d2a767f70050397f0f12add44ad1f5bc9fde) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -447,7 +769,7 @@ ROM_START( vindictre3 ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1123.16n", 0x000000, 0x004000, CRC(f99b631a) SHA1(7a2430b6810c77b0f717d6e9d71823eadbcf6013) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -459,7 +781,7 @@ ROM_END ROM_START( vindictr2 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-1117.d1", 0x000000, 0x010000, CRC(2e5135e4) SHA1(804b3ba201088ac2c35cfcbd530acbd73548ea8c) ) ROM_LOAD16_BYTE( "136059-1118.d3", 0x000001, 0x010000, CRC(e357fa79) SHA1(220a10287f4bf9d981fd412c8dd0a9c106eaf342) ) ROM_LOAD16_BYTE( "136059-2119.f1", 0x020000, 0x010000, CRC(7f8c044e) SHA1(56cd047ff12ff2968bf403b38b86fdceb9c2b83d) ) @@ -467,10 +789,10 @@ ROM_START( vindictr2 ) ROM_LOAD16_BYTE( "136059-2121.k1", 0x040000, 0x010000, CRC(9b6111e0) SHA1(427197b21a5db2a06751ab281fde7a2f63818db8) ) ROM_LOAD16_BYTE( "136059-2122.k3", 0x040001, 0x010000, CRC(8d029a28) SHA1(a166d2a767f70050397f0f12add44ad1f5bc9fde) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -484,7 +806,7 @@ ROM_START( vindictr2 ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1123.16n", 0x000000, 0x004000, CRC(f99b631a) SHA1(7a2430b6810c77b0f717d6e9d71823eadbcf6013) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -496,7 +818,7 @@ ROM_END ROM_START( vindictr1 ) - ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ + ROM_REGION( 0x60000, "maincpu", 0 ) // 68000 code ROM_LOAD16_BYTE( "136059-1117.d1", 0x000000, 0x010000, CRC(2e5135e4) SHA1(804b3ba201088ac2c35cfcbd530acbd73548ea8c) ) ROM_LOAD16_BYTE( "136059-1118.d3", 0x000001, 0x010000, CRC(e357fa79) SHA1(220a10287f4bf9d981fd412c8dd0a9c106eaf342) ) ROM_LOAD16_BYTE( "136059-1119.f1", 0x020000, 0x010000, CRC(48938c95) SHA1(061771b074135b945621d781fbde7ec1260f31a1) ) @@ -504,10 +826,10 @@ ROM_START( vindictr1 ) ROM_LOAD16_BYTE( "136059-1121.k1", 0x040000, 0x010000, CRC(9b6111e0) SHA1(427197b21a5db2a06751ab281fde7a2f63818db8) ) ROM_LOAD16_BYTE( "136059-1122.k3", 0x040001, 0x010000, CRC(a94773f1) SHA1(2be841ab755d4ce319f3d562e9990918923384ee) ) - ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */ + ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code ROM_LOAD( "136059-1124.2k", 0x00000, 0x10000, CRC(d2212c0a) SHA1(df11fe76d74abc0cea23f18264cef4b0f33b1ffd) ) - ROM_REGION( 0x100000, "gfx1", ROMREGION_INVERT ) + ROM_REGION( 0x100000, "sprites_pf", ROMREGION_INVERT ) ROM_LOAD( "136059-1104.12p", 0x000000, 0x020000, CRC(062f8e52) SHA1(0968b8c822d8fee1cf7ddcf9c3b1bf059e446417) ) ROM_LOAD( "136059-1116.19p", 0x020000, 0x010000, CRC(0e4366fa) SHA1(1891f6b818f7b0e447e8a83ad0c12aade0b776ee) ) ROM_RELOAD( 0x030000, 0x010000 ) @@ -521,7 +843,7 @@ ROM_START( vindictr1 ) ROM_LOAD( "136059-1113.2r", 0x0e0000, 0x010000, CRC(0a2aba63) SHA1(e4780c790278034f0332697d5f06e6ed6b57d273) ) ROM_RELOAD( 0x0f0000, 0x010000 ) - ROM_REGION( 0x04000, "gfx2", 0 ) + ROM_REGION( 0x04000, "chars", 0 ) ROM_LOAD( "136059-1123.16n", 0x000000, 0x004000, CRC(f99b631a) SHA1(7a2430b6810c77b0f717d6e9d71823eadbcf6013) ) ROM_REGION( 0x00800, "plds", 0 ) @@ -531,18 +853,7 @@ ROM_START( vindictr1 ) ROM_LOAD( "pal16r6a-136059-1153.n7", 0x0600, 0x0104, CRC(61076033) SHA1(c860835a8fa48e141f3d24732395ac35a4b908a4) ) ROM_END - - -/************************************* - * - * Driver initialization - * - *************************************/ - -void vindictr_state::init_vindictr() -{ -} - +} // anonymous namespace /************************************* @@ -551,11 +862,11 @@ void vindictr_state::init_vindictr() * *************************************/ -GAME( 1988, vindictr, 0, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (rev 5)", 0 ) -GAME( 1988, vindictre, vindictr, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (Europe, rev 5)", 0 ) -GAME( 1988, vindictrg, vindictr, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (German, rev 1)", 0 ) -GAME( 1988, vindictre4,vindictr, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (Europe, rev 4)", 0 ) -GAME( 1988, vindictr4, vindictr, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (rev 4)", 0 ) -GAME( 1988, vindictre3,vindictr, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (Europe, rev 3)", 0 ) -GAME( 1988, vindictr2, vindictr, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (rev 2)", 0 ) -GAME( 1988, vindictr1, vindictr, vindictr, vindictr, vindictr_state, init_vindictr, ROT0, "Atari Games", "Vindicators (rev 1)", 0 ) +GAME( 1988, vindictr, 0, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (rev 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, vindictre, vindictr, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (Europe, rev 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, vindictrg, vindictr, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (German, rev 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, vindictre4,vindictr, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (Europe, rev 4)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, vindictr4, vindictr, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (rev 4)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, vindictre3,vindictr, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (Europe, rev 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, vindictr2, vindictr, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (rev 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, vindictr1, vindictr, vindictr, vindictr, vindictr_state, empty_init, ROT0, "Atari Games", "Vindicators (rev 1)", MACHINE_SUPPORTS_SAVE ) |