summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/atari/blstroid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/atari/blstroid.cpp')
-rw-r--r--src/mame/atari/blstroid.cpp300
1 files changed, 245 insertions, 55 deletions
diff --git a/src/mame/atari/blstroid.cpp b/src/mame/atari/blstroid.cpp
index 49f3a0efe74..010dc3c2363 100644
--- a/src/mame/atari/blstroid.cpp
+++ b/src/mame/atari/blstroid.cpp
@@ -1,5 +1,6 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders: Aaron Giles
+
/***************************************************************************
Atari Blasteroids hardware
@@ -20,18 +21,218 @@
#include "emu.h"
-#include "blstroid.h"
+
+#include "atarigen.h"
+#include "atarijsa.h"
+#include "atarimo.h"
#include "cpu/m68000/m68000.h"
#include "machine/eeprompar.h"
+#include "machine/timer.h"
#include "machine/watchdog.h"
+
#include "emupal.h"
#include "speaker.h"
+#include "tilemap.h"
+
+
+namespace {
+
+class blstroid_state : public atarigen_state
+{
+public:
+ blstroid_state(const machine_config &mconfig, device_type type, const char *tag) :
+ atarigen_state(mconfig, type, tag),
+ m_playfield_tilemap(*this, "playfield"),
+ m_jsa(*this, "jsa"),
+ m_mob(*this, "mob"),
+ m_priorityram(*this, "priorityram")
+ { }
+
+ void blstroid(machine_config &config);
+
+protected:
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
+private:
+ TIMER_CALLBACK_MEMBER(irq_off);
+ TIMER_CALLBACK_MEMBER(irq_on);
+ TIMER_DEVICE_CALLBACK_MEMBER(scanline_update);
+ void scanline_int_ack_w(uint16_t data = 0);
+ void video_int_ack_w(uint16_t data = 0);
+ void halt_until_hblank_0_w(uint16_t data = 0);
+ TILE_GET_INFO_MEMBER(get_playfield_tile_info);
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void main_map(address_map &map);
+
+ required_device<tilemap_device> m_playfield_tilemap;
+ required_device<atari_jsa_i_device> m_jsa;
+ required_device<atari_motion_objects_device> m_mob;
+ required_shared_ptr<uint16_t> m_priorityram;
+
+ emu_timer *m_irq_off_timer = nullptr;
+ emu_timer *m_irq_on_timer = nullptr;
+
+ static const atari_motion_objects_config s_mob_config;
+
+ bool m_scanline_int_state = false;
+};
+
+
+/*************************************
+ *
+ * Tilemap callbacks
+ *
+ *************************************/
+
+TILE_GET_INFO_MEMBER(blstroid_state::get_playfield_tile_info)
+{
+ uint16_t const data = m_playfield_tilemap->basemem_read(tile_index);
+ int const code = data & 0x1fff;
+ int const color = (data >> 13) & 0x07;
+ tileinfo.set(0, code, color, 0);
+}
/*************************************
*
+ * Video system start
+ *
+ *************************************/
+
+const atari_motion_objects_config blstroid_state::s_mob_config =
+{
+ 1, // 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?
+ 0, // pixels per SLIP entry (0 for no-slip)
+ 0, // pixel offset for SLIPs
+ 0, // maximum number of links to visit/scanline (0=all)
+
+ 0x000, // base palette entry
+ 0x100, // maximum number of colors
+ 0, // transparent pen index
+
+ {{ 0,0,0x0ff8,0 }}, // mask for the link
+ {{ 0,0x3fff,0,0 }}, // mask for the code index
+ {{ 0,0,0,0x000f }}, // mask for the color
+ {{ 0,0,0,0xffc0 }}, // mask for the X position
+ {{ 0xff80,0,0,0 }}, // mask for the Y position
+ {{ 0 }}, // mask for the width, in tiles
+ {{ 0x000f,0,0,0 }}, // mask for the height, in tiles
+ {{ 0,0x8000,0,0 }}, // mask for the horizontal flip
+ {{ 0,0x4000,0,0 }}, // mask for the vertical flip
+ {{ 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 blstroid_state::video_start()
+{
+ m_irq_off_timer = timer_alloc(FUNC(blstroid_state::irq_off), this);
+ m_irq_on_timer = timer_alloc(FUNC(blstroid_state::irq_on), this);
+
+ m_scanline_int_state = false;
+
+ save_item(NAME(m_scanline_int_state));
+}
+
+
+
+/*************************************
+ *
+ * Periodic scanline updater
+ *
+ *************************************/
+
+TIMER_CALLBACK_MEMBER(blstroid_state::irq_off)
+{
+ m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
+}
+
+TIMER_CALLBACK_MEMBER(blstroid_state::irq_on)
+{
+ m_maincpu->set_input_line(M68K_IRQ_1, ASSERT_LINE);
+}
+
+
+TIMER_DEVICE_CALLBACK_MEMBER(blstroid_state::scanline_update)
+{
+ int const scanline = param;
+ int const offset = (scanline / 8) * 64 + 40;
+
+ // check for interrupts
+ if (offset < 0x800)
+ if (m_playfield_tilemap->basemem_read(offset) & 0x8000)
+ {
+ // FIXME: - the only thing this IRQ does it tweak the starting MO link
+ // unfortunately, it does it too early for the given MOs!
+ // perhaps it is not actually hooked up on the real PCB...
+ return;
+
+ // set a timer to turn the interrupt on at HBLANK of the 7th scanline
+ // and another to turn it off one scanline later
+ int const width = m_screen->width();
+ int const vpos = m_screen->vpos();
+ attotime const period_on = m_screen->time_until_pos(vpos + 7, width * 0.9);
+ attotime const period_off = m_screen->time_until_pos(vpos + 8, width * 0.9);
+
+ m_irq_on_timer->adjust(period_on);
+ m_irq_off_timer->adjust(period_off);
+ }
+}
+
+
+
+/*************************************
+ *
+ * Main refresh
+ *
+ *************************************/
+
+uint32_t blstroid_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)
+ {
+ /* verified via schematics
+
+ priority address = HPPPMMMM
+ */
+ int const priaddr = ((pf[x] & 8) << 4) | (pf[x] & 0x70) | ((mo[x] & 0xf0) >> 4);
+ if (m_priorityram[priaddr] & 1)
+ pf[x] = mo[x];
+ }
+ }
+ return 0;
+}
+
+
+/*************************************
+ *
* Initialization & interrupts
*
*************************************/
@@ -67,7 +268,7 @@ void blstroid_state::machine_reset()
*
*************************************/
-/* full map verified from schematics */
+// full map verified from schematics
void blstroid_state::main_map(address_map &map)
{
map.unmap_value_high();
@@ -77,7 +278,7 @@ void blstroid_state::main_map(address_map &map)
map(0x800200, 0x800201).mirror(0x0381fe).w(FUNC(blstroid_state::scanline_int_ack_w));
map(0x800400, 0x800401).mirror(0x0381fe).w(FUNC(blstroid_state::video_int_ack_w));
map(0x800600, 0x800601).mirror(0x0381fe).w("eeprom", FUNC(eeprom_parallel_28xx_device::unlock_write16));
- map(0x800800, 0x8009ff).mirror(0x038000).writeonly().share("priorityram");
+ map(0x800800, 0x8009ff).mirror(0x038000).writeonly().share(m_priorityram);
map(0x800a01, 0x800a01).mirror(0x0381fe).w(m_jsa, FUNC(atari_jsa_i_device::main_command_w));
map(0x800c00, 0x800c01).mirror(0x0381fe).w(m_jsa, FUNC(atari_jsa_i_device::sound_reset_w));
map(0x800e00, 0x800e01).mirror(0x0381fe).w(FUNC(blstroid_state::halt_until_hblank_0_w));
@@ -102,15 +303,15 @@ void blstroid_state::main_map(address_map &map)
*************************************/
static INPUT_PORTS_START( blstroid )
- PORT_START("DIAL0") /* ff9800 */
+ PORT_START("DIAL0") // ff9800
PORT_BIT( 0x00ff, 0, IPT_DIAL ) PORT_SENSITIVITY(60) PORT_KEYDELTA(10) PORT_PLAYER(1)
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("DIAL1") /* ff9804 */
+ PORT_START("DIAL1") // ff9804
PORT_BIT( 0x00ff, 0, IPT_DIAL ) PORT_SENSITIVITY(60) PORT_KEYDELTA(10) PORT_PLAYER(2)
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("IN0") /* ff9c00 */
+ PORT_START("IN0") // ff9c00
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
@@ -121,7 +322,7 @@ static INPUT_PORTS_START( blstroid )
PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("IN1") /* ff9c02 */
+ PORT_START("IN1") // ff9c02
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
@@ -167,8 +368,8 @@ static const gfx_layout molayout =
static GFXDECODE_START( gfx_blstroid )
- GFXDECODE_ENTRY( "gfx1", 0, pflayout, 256, 16 )
- GFXDECODE_ENTRY( "gfx2", 0, molayout, 0, 16 )
+ GFXDECODE_ENTRY( "tiles", 0, pflayout, 256, 16 )
+ GFXDECODE_ENTRY( "sprites", 0, molayout, 0, 16 )
GFXDECODE_END
@@ -181,8 +382,8 @@ GFXDECODE_END
void blstroid_state::blstroid(machine_config &config)
{
- /* basic machine hardware */
- M68000(config, m_maincpu, 14.318181_MHz_XTAL/2);
+ // basic machine hardware
+ M68000(config, m_maincpu, 14.318181_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &blstroid_state::main_map);
EEPROM_2804(config, "eeprom").lock_after_write(true);
@@ -191,26 +392,26 @@ void blstroid_state::blstroid(machine_config &config)
WATCHDOG_TIMER(config, "watchdog");
- /* video hardware */
+ // video hardware
GFXDECODE(config, "gfxdecode", "palette", gfx_blstroid);
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 512);
- TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 16,8, TILEMAP_SCAN_ROWS, 64,64).set_info_callback(FUNC(blstroid_state::get_playfield_tile_info));
+ TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 2, 16, 8, TILEMAP_SCAN_ROWS, 64, 32).set_info_callback(FUNC(blstroid_state::get_playfield_tile_info));
ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, blstroid_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 an SOS-2 chip to generate video signals */
+ // note: these parameters are from published specs, not derived
+ // the board uses an SOS-2 chip to generate video signals
m_screen->set_raw(14.318181_MHz_XTAL, 456*2, 0, 320*2, 262, 0, 240);
- m_screen->set_screen_update(FUNC(blstroid_state::screen_update_blstroid));
+ m_screen->set_screen_update(FUNC(blstroid_state::screen_update));
m_screen->set_palette("palette");
m_screen->screen_vblank().set_inputline(m_maincpu, M68K_IRQ_2, ASSERT_LINE);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@@ -232,22 +433,22 @@ void blstroid_state::blstroid(machine_config &config)
*************************************/
ROM_START( blstroid )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* 4*64k for 68000 code */
+ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "136057-4123.6c", 0x000000, 0x010000, CRC(d14badc4) SHA1(ccba30e1eb6b3351cbc7ea18951debb7f7aa4520) )
ROM_LOAD16_BYTE( "136057-4121.6b", 0x000001, 0x010000, CRC(ae3e93e8) SHA1(66ccff68e9b0f7e97abf126f977775e29ce4eee5) )
ROM_LOAD16_BYTE( "136057-4124.4c", 0x020000, 0x010000, CRC(fd2365df) SHA1(63ed3f9a92fed985f9ddb93687f11a24c8309f56) )
ROM_LOAD16_BYTE( "136057-4122.4b", 0x020001, 0x010000, CRC(c364706e) SHA1(e03cd60d139000607d83240b0b48865eafb1188b) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_REGION( 0x040000, "gfx1", 0 )
+ ROM_REGION( 0x040000, "tiles", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
ROM_LOAD( "136057-1102.1m", 0x010000, 0x010000, CRC(f84f0b97) SHA1(00cb5f1e0f92742683ee71854085b1e4db4bd6bb) )
ROM_LOAD( "136057-1103.3l", 0x020000, 0x010000, CRC(ae5274f0) SHA1(87070e6e51d557c1b10ef32ac0ed670856d5aaf1) )
ROM_LOAD( "136057-1104.3m", 0x030000, 0x010000, CRC(4bb72060) SHA1(94cd1a6900f47a5178cec041fa6dc9cfee1f9c3f) )
- ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "136057-1105.5m", 0x000000, 0x010000, CRC(50e0823f) SHA1(f638becad83307ed43d138d452199e4c6725512f) )
ROM_LOAD( "136057-1107.67m", 0x010000, 0x010000, CRC(729de7a9) SHA1(526b08e6d54cd0b991c4207c23119d2940a34009) )
ROM_LOAD( "136057-1109.8m", 0x020000, 0x010000, CRC(090e42ab) SHA1(903aa99e6e39407319f6e90102b24604884ee047) )
@@ -268,22 +469,22 @@ ROM_END
ROM_START( blstroid3 )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* 4*64k for 68000 code */
+ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "136057-3123.6c", 0x000000, 0x010000, CRC(8fb050f5) SHA1(4944ffb0843262afe41fc6b876ab6858dcefc95f) )
ROM_LOAD16_BYTE( "136057-3121.6b", 0x000001, 0x010000, CRC(21fae262) SHA1(2516a75d76bcfdea5ab41a4898d47ed166bd1996) )
ROM_LOAD16_BYTE( "136057-3124.4c", 0x020000, 0x010000, CRC(a9140c31) SHA1(02518bf998c0c74dff66f3192dcb1f91b1812cf8) )
ROM_LOAD16_BYTE( "136057-3122.4b", 0x020001, 0x010000, CRC(137fbb17) SHA1(3dda03ecdb2dc9a9cd78aeaa502497662496a26d) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_REGION( 0x040000, "gfx1", 0 )
+ ROM_REGION( 0x040000, "tiles", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
ROM_LOAD( "136057-1102.1m", 0x010000, 0x010000, CRC(f84f0b97) SHA1(00cb5f1e0f92742683ee71854085b1e4db4bd6bb) )
ROM_LOAD( "136057-1103.3l", 0x020000, 0x010000, CRC(ae5274f0) SHA1(87070e6e51d557c1b10ef32ac0ed670856d5aaf1) )
ROM_LOAD( "136057-1104.3m", 0x030000, 0x010000, CRC(4bb72060) SHA1(94cd1a6900f47a5178cec041fa6dc9cfee1f9c3f) )
- ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "136057-1105.5m", 0x000000, 0x010000, CRC(50e0823f) SHA1(f638becad83307ed43d138d452199e4c6725512f) )
ROM_LOAD( "136057-1107.67m", 0x010000, 0x010000, CRC(729de7a9) SHA1(526b08e6d54cd0b991c4207c23119d2940a34009) )
ROM_LOAD( "136057-1109.8m", 0x020000, 0x010000, CRC(090e42ab) SHA1(903aa99e6e39407319f6e90102b24604884ee047) )
@@ -304,22 +505,22 @@ ROM_END
ROM_START( blstroid2 )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* 4*64k for 68000 code */
+ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "136057-2123.6c", 0x000000, 0x010000, CRC(5a092513) SHA1(11396125842ea3a43d61b4ce266bb8053fdefd73) )
ROM_LOAD16_BYTE( "136057-2121.6b", 0x000001, 0x010000, CRC(486aac51) SHA1(5e7fe7eb225d1c2701c21658ba2bad14ef7b64b1) )
ROM_LOAD16_BYTE( "136057-2124.4c", 0x020000, 0x010000, CRC(d0fa38fe) SHA1(8aeae50dff6bcd14ac5faf10f15724b7f7430f5c) )
ROM_LOAD16_BYTE( "136057-2122.4b", 0x020001, 0x010000, CRC(744bf921) SHA1(bb9118bfc04745df2eb78e1d1e70f7fc2e0509d4) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_REGION( 0x040000, "gfx1", 0 )
+ ROM_REGION( 0x040000, "tiles", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
ROM_LOAD( "136057-1102.1m", 0x010000, 0x010000, CRC(f84f0b97) SHA1(00cb5f1e0f92742683ee71854085b1e4db4bd6bb) )
ROM_LOAD( "136057-1103.3l", 0x020000, 0x010000, CRC(ae5274f0) SHA1(87070e6e51d557c1b10ef32ac0ed670856d5aaf1) )
ROM_LOAD( "136057-1104.3m", 0x030000, 0x010000, CRC(4bb72060) SHA1(94cd1a6900f47a5178cec041fa6dc9cfee1f9c3f) )
- ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "136057-1105.5m", 0x000000, 0x010000, CRC(50e0823f) SHA1(f638becad83307ed43d138d452199e4c6725512f) )
ROM_LOAD( "136057-1107.67m", 0x010000, 0x010000, CRC(729de7a9) SHA1(526b08e6d54cd0b991c4207c23119d2940a34009) )
ROM_LOAD( "136057-1109.8m", 0x020000, 0x010000, CRC(090e42ab) SHA1(903aa99e6e39407319f6e90102b24604884ee047) )
@@ -340,22 +541,22 @@ ROM_END
ROM_START( blstroidg )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* 4*64k for 68000 code */
+ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "136057-2223.6c", 0x000000, 0x010000, CRC(cc82108b) SHA1(487a80cac2a196e9b17c64c5d0b884d1ed8da401) )
ROM_LOAD16_BYTE( "136057-2221.6b", 0x000001, 0x010000, CRC(84822e68) SHA1(763edc9b3605e583506ca1d9befab66411fc720a) )
ROM_LOAD16_BYTE( "136057-2224.4c", 0x020000, 0x010000, CRC(849249d4) SHA1(61d6eaff7df54f0353639e192eb6074a80916e29) )
ROM_LOAD16_BYTE( "136057-2222.4b", 0x020001, 0x010000, CRC(bdeaba0d) SHA1(f479514b5d9543f9e12aa1ac48e20bf054cb18d0) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_REGION( 0x040000, "gfx1", 0 )
+ ROM_REGION( 0x040000, "tiles", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
ROM_LOAD( "136057-1102.1m", 0x010000, 0x010000, CRC(f84f0b97) SHA1(00cb5f1e0f92742683ee71854085b1e4db4bd6bb) )
ROM_LOAD( "136057-1103.3l", 0x020000, 0x010000, CRC(ae5274f0) SHA1(87070e6e51d557c1b10ef32ac0ed670856d5aaf1) )
ROM_LOAD( "136057-1104.3m", 0x030000, 0x010000, CRC(4bb72060) SHA1(94cd1a6900f47a5178cec041fa6dc9cfee1f9c3f) )
- ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "136057-1105.5m", 0x000000, 0x010000, CRC(50e0823f) SHA1(f638becad83307ed43d138d452199e4c6725512f) )
ROM_LOAD( "136057-1107.67m", 0x010000, 0x010000, CRC(729de7a9) SHA1(526b08e6d54cd0b991c4207c23119d2940a34009) )
ROM_LOAD( "136057-1109.8m", 0x020000, 0x010000, CRC(090e42ab) SHA1(903aa99e6e39407319f6e90102b24604884ee047) )
@@ -376,22 +577,22 @@ ROM_END
ROM_START( blstroidh )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* 4*64k for 68000 code */
+ ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "eheadh0.c6", 0x00000, 0x10000, CRC(061f0898) SHA1(a277399aa8af665b1fb40c2bb4cf5d36d333db8d) )
ROM_LOAD16_BYTE( "eheadl0.b6", 0x00001, 0x10000, CRC(ae8df7cb) SHA1(9eaf377bbfa09e2d3ae77764dbf09ff79b65b34f) )
ROM_LOAD16_BYTE( "eheadh1.c5", 0x20000, 0x10000, CRC(0b7a3cb6) SHA1(7dc585ff536055e85b0849aa075f2fdab34a8e1c) )
ROM_LOAD16_BYTE( "eheadl1.b5", 0x20001, 0x10000, CRC(43971694) SHA1(a39a8da244645bb56081fd71609a33d8b7d78478) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "136057-1135.2k", 0x00000, 0x10000, CRC(baa8b5fe) SHA1(4af1f9bec3ffa856016a89bc20041d572305ba3a) )
- ROM_REGION( 0x040000, "gfx1", 0 )
+ ROM_REGION( 0x040000, "tiles", 0 )
ROM_LOAD( "136057-1101.1l", 0x000000, 0x010000, CRC(3c2daa5b) SHA1(2710a05e95afd8452104c4f4a9250a3b7d728a42) )
ROM_LOAD( "136057-1102.1m", 0x010000, 0x010000, CRC(f84f0b97) SHA1(00cb5f1e0f92742683ee71854085b1e4db4bd6bb) )
ROM_LOAD( "136057-1103.3l", 0x020000, 0x010000, CRC(ae5274f0) SHA1(87070e6e51d557c1b10ef32ac0ed670856d5aaf1) )
ROM_LOAD( "136057-1104.3m", 0x030000, 0x010000, CRC(4bb72060) SHA1(94cd1a6900f47a5178cec041fa6dc9cfee1f9c3f) )
- ROM_REGION( 0x100000, "gfx2", 0 )
+ ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD( "136057-1105.5m", 0x000000, 0x010000, CRC(50e0823f) SHA1(f638becad83307ed43d138d452199e4c6725512f) )
ROM_LOAD( "136057-1107.67m", 0x010000, 0x010000, CRC(729de7a9) SHA1(526b08e6d54cd0b991c4207c23119d2940a34009) )
ROM_LOAD( "136057-1109.8m", 0x020000, 0x010000, CRC(090e42ab) SHA1(903aa99e6e39407319f6e90102b24604884ee047) )
@@ -410,18 +611,7 @@ ROM_START( blstroidh )
ROM_LOAD( "moh7.n16", 0x0f0000, 0x010000, CRC(a93cbbe7) SHA1(5583e2421ae25181039c6145319453fb73e7bbf5) )
ROM_END
-
-
-/*************************************
- *
- * Driver initialization
- *
- *************************************/
-
-void blstroid_state::init_blstroid()
-{
-}
-
+} // anonymous namespace
/*************************************
@@ -430,8 +620,8 @@ void blstroid_state::init_blstroid()
*
*************************************/
-GAME( 1987, blstroid, 0, blstroid, blstroid, blstroid_state, init_blstroid, ROT0, "Atari Games", "Blasteroids (rev 4)", 0 )
-GAME( 1987, blstroid3, blstroid, blstroid, blstroid, blstroid_state, init_blstroid, ROT0, "Atari Games", "Blasteroids (rev 3)", 0 )
-GAME( 1987, blstroid2, blstroid, blstroid, blstroid, blstroid_state, init_blstroid, ROT0, "Atari Games", "Blasteroids (rev 2)", 0 )
-GAME( 1987, blstroidg, blstroid, blstroid, blstroid, blstroid_state, init_blstroid, ROT0, "Atari Games", "Blasteroids (German, rev 2)", 0 )
-GAME( 1987, blstroidh, blstroid, blstroid, blstroid, blstroid_state, init_blstroid, ROT0, "Atari Games", "Blasteroids (with heads)", 0 )
+GAME( 1987, blstroid, 0, blstroid, blstroid, blstroid_state, empty_init, ROT0, "Atari Games", "Blasteroids (rev 4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, blstroid3, blstroid, blstroid, blstroid, blstroid_state, empty_init, ROT0, "Atari Games", "Blasteroids (rev 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, blstroid2, blstroid, blstroid, blstroid, blstroid_state, empty_init, ROT0, "Atari Games", "Blasteroids (rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, blstroidg, blstroid, blstroid, blstroid, blstroid_state, empty_init, ROT0, "Atari Games", "Blasteroids (German, rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, blstroidh, blstroid, blstroid, blstroid, blstroid_state, empty_init, ROT0, "Atari Games", "Blasteroids (with heads)", MACHINE_SUPPORTS_SAVE )