summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/atari/toobin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/atari/toobin.cpp')
-rw-r--r--src/mame/atari/toobin.cpp383
1 files changed, 349 insertions, 34 deletions
diff --git a/src/mame/atari/toobin.cpp b/src/mame/atari/toobin.cpp
index 8bc4a1cd919..b5cf87c3f8e 100644
--- a/src/mame/atari/toobin.cpp
+++ b/src/mame/atari/toobin.cpp
@@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
+
/***************************************************************************
Atari Toobin' hardware
@@ -23,19 +24,329 @@
#include "emu.h"
-#include "toobin.h"
+
+#include "atarijsa.h"
+#include "atarimo.h"
#include "cpu/m68000/m68010.h"
#include "machine/eeprompar.h"
#include "machine/watchdog.h"
+
+#include "emupal.h"
+#include "screen.h"
#include "speaker.h"
+#include "tilemap.h"
+
+
+namespace {
+
+class toobin_state : public driver_device
+{
+public:
+ toobin_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_jsa(*this, "jsa"),
+ m_playfield_tilemap(*this, "playfield"),
+ m_alpha_tilemap(*this, "alpha"),
+ m_mob(*this, "mob"),
+ m_palette(*this, "palette"),
+ m_paletteram(*this, "paletteram"),
+ m_interrupt_scan(*this, "interrupt_scan"),
+ m_xscroll(*this, "xscroll"),
+ m_yscroll(*this, "yscroll")
+ { }
+
+ void toobin(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ 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<atari_jsa_i_device> m_jsa;
+ required_device<tilemap_device> m_playfield_tilemap;
+ required_device<tilemap_device> m_alpha_tilemap;
+ required_device<atari_motion_objects_device> m_mob;
+ required_device<palette_device> m_palette;
+
+ required_shared_ptr<uint16_t> m_paletteram;
+ required_shared_ptr<uint16_t> m_interrupt_scan;
+ required_shared_ptr<uint16_t> m_xscroll;
+ required_shared_ptr<uint16_t> m_yscroll;
+
+ double m_brightness = 0;
+ bitmap_ind16 m_pfbitmap;
+
+ emu_timer *m_scanline_interrupt_timer = nullptr;
+
+ TIMER_CALLBACK_MEMBER(scanline_interrupt);
+ void scanline_int_ack_w(uint16_t data);
+
+ void interrupt_scan_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void intensity_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void xscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void yscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void slip_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+
+ TILE_GET_INFO_MEMBER(get_alpha_tile_info);
+ TILE_GET_INFO_MEMBER(get_playfield_tile_info);
+
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ void main_map(address_map &map);
+
+ static const atari_motion_objects_config s_mob_config;
+};
+
+
+/*************************************
+ *
+ * Tilemap callbacks
+ *
+ *************************************/
+
+TILE_GET_INFO_MEMBER(toobin_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 >> 12) & 0x0f;
+ tileinfo.set(2, code, color, (data >> 10) & 1);
+}
+
+
+TILE_GET_INFO_MEMBER(toobin_state::get_playfield_tile_info)
+{
+ uint32_t const data = m_playfield_tilemap->basemem_read(tile_index);
+ int const code = data & 0x3fff;
+ int const color = (data >> 16) & 0x0f;
+ tileinfo.set(0, code, color, TILE_FLIPYX(data >> 14));
+ tileinfo.category = (data >> 20) & 3;
+}
+
+
+
+/*************************************
+ *
+ * Video system start
+ *
+ *************************************/
+
+const atari_motion_objects_config toobin_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?
+ 1, // render in swapped X/Y order?
+ 0, // does the neighbor bit affect the next object?
+ 1024, // 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,0x00ff,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
+ {{ 0x7fc0,0,0,0 }}, // mask for the Y position
+ {{ 0x0007,0,0,0 }}, // mask for the width, in tiles
+ {{ 0x0038,0,0,0 }}, // mask for the height, in tiles
+ {{ 0,0x4000,0,0 }}, // mask for the horizontal flip
+ {{ 0,0x8000,0,0 }}, // mask for the vertical flip
+ {{ 0 }}, // mask for the priority
+ {{ 0 }}, // mask for the neighbor
+ {{ 0x8000,0,0,0 }}, // mask for absolute coordinates
+
+ {{ 0 }}, // mask for the special value
+ 0 // resulting value to indicate "special"
+};
+
+void toobin_state::video_start()
+{
+ // allocate a playfield bitmap for rendering
+ m_screen->register_screen_bitmap(m_pfbitmap);
+
+ save_item(NAME(m_brightness));
+}
+
+
+
+/*************************************
+ *
+ * Palette RAM write handler
+ *
+ *************************************/
+
+void toobin_state::paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ COMBINE_DATA(&m_paletteram[offset]);
+ uint16_t newword = m_paletteram[offset];
+
+ {
+ int red = (((newword >> 10) & 31) * 224) >> 5;
+ int green = (((newword >> 5) & 31) * 224) >> 5;
+ int blue = ((newword & 31) * 224) >> 5;
+
+ if (red) red += 38;
+ if (green) green += 38;
+ if (blue) blue += 38;
+
+ m_palette->set_pen_color(offset & 0x3ff, rgb_t(red, green, blue));
+ if (!(newword & 0x8000))
+ m_palette->set_pen_contrast(offset & 0x3ff, m_brightness);
+ else
+ m_palette->set_pen_contrast(offset & 0x3ff, 1.0);
+ }
+}
+
+
+void toobin_state::intensity_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ if (ACCESSING_BITS_0_7)
+ {
+ m_brightness = (double)(~data & 0x1f) / 31.0;
+
+ for (int i = 0; i < 0x400; i++)
+ if (!BIT(m_paletteram[i], 15))
+ m_palette->set_pen_contrast(i, m_brightness);
+ }
+}
+
+
+
+/*************************************
+ *
+ * X/Y scroll handlers
+ *
+ *************************************/
+
+void toobin_state::xscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ uint16_t const oldscroll = *m_xscroll;
+ uint16_t newscroll = oldscroll;
+ COMBINE_DATA(&newscroll);
+
+ // if anything has changed, force a partial update
+ if (newscroll != oldscroll)
+ m_screen->update_partial(m_screen->vpos());
+
+ // update the playfield scrolling - hscroll is clocked on the following scanline
+ m_playfield_tilemap->set_scrollx(0, newscroll >> 6);
+ m_mob->set_xscroll(newscroll >> 6);
+
+ // update the data
+ *m_xscroll = newscroll;
+}
+
+
+void toobin_state::yscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ uint16_t const oldscroll = *m_yscroll;
+ uint16_t newscroll = oldscroll;
+ COMBINE_DATA(&newscroll);
+
+ // if anything has changed, force a partial update
+ if (newscroll != oldscroll)
+ m_screen->update_partial(m_screen->vpos());
+
+ // if bit 4 is zero, the scroll value is clocked in right away
+ m_playfield_tilemap->set_scrolly(0, newscroll >> 6);
+ m_mob->set_yscroll((newscroll >> 6) & 0x1ff);
+
+ // update the data
+ *m_yscroll = newscroll;
+}
-static constexpr XTAL MASTER_CLOCK = 32_MHz_XTAL;
+
+
+/*************************************
+ *
+ * X/Y scroll handlers
+ *
+ *************************************/
+
+void toobin_state::slip_w(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ uint16_t const oldslip = m_mob->slipram(offset);
+ uint16_t newslip = oldslip;
+ COMBINE_DATA(&newslip);
+
+ // if the SLIP is changing, force a partial update first
+ if (oldslip != newslip)
+ m_screen->update_partial(m_screen->vpos());
+
+ // update the data
+ m_mob->slipram(offset) = newslip;
+}
/*************************************
*
+ * Main refresh
+ *
+ *************************************/
+
+uint32_t toobin_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ // start drawing
+ m_mob->draw_async(cliprect);
+
+ // draw the playfield
+ bitmap_ind8 &priority_bitmap = screen.priority();
+ priority_bitmap.fill(0, cliprect);
+ m_playfield_tilemap->draw(screen, m_pfbitmap, cliprect, 0, 0);
+ m_playfield_tilemap->draw(screen, m_pfbitmap, cliprect, 1, 1);
+ m_playfield_tilemap->draw(screen, m_pfbitmap, cliprect, 2, 2);
+ m_playfield_tilemap->draw(screen, m_pfbitmap, cliprect, 3, 3);
+
+ // draw and merge the MO
+ bitmap_ind16 &mobitmap = m_mob->bitmap();
+ pen_t const *const palette = m_palette->pens();
+ for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
+ {
+ uint32_t *const dest = &bitmap.pix(y);
+ uint16_t const *const mo = &mobitmap.pix(y);
+ uint16_t const *const pf = &m_pfbitmap.pix(y);
+ uint8_t const *const pri = &priority_bitmap.pix(y);
+ for (int x = cliprect.left(); x <= cliprect.right(); x++)
+ {
+ uint16_t pix = pf[x];
+ if (mo[x] != 0xffff)
+ {
+ /* not verified: logic is all controlled in a PAL
+
+ factors: LBPRI1-0, LBPIX3, ANPIX1-0, PFPIX3, PFPRI1-0,
+ (~LBPIX3 & ~LBPIX2 & ~LBPIX1 & ~LBPIX0)
+ */
+
+ // only draw if not high priority PF
+ if (!pri[x] || !(pix & 8))
+ pix = mo[x];
+ }
+ dest[x] = palette[pix];
+ }
+ }
+
+ // add the alpha on top
+ m_alpha_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ return 0;
+}
+
+
+/*************************************
+ *
* Initialization & interrupts
*
*************************************/
@@ -61,11 +372,11 @@ void toobin_state::machine_start()
void toobin_state::interrupt_scan_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
- int oldword = m_interrupt_scan[offset];
+ int const oldword = m_interrupt_scan[offset];
int newword = oldword;
COMBINE_DATA(&newword);
- /* if something changed, update the word in memory */
+ // if something changed, update the word in memory
if (oldword != newword)
{
m_interrupt_scan[offset] = newword;
@@ -86,7 +397,7 @@ void toobin_state::scanline_int_ack_w(uint16_t data)
*
*************************************/
-/* full address map decoded from schematics */
+// full address map decoded from schematics
void toobin_state::main_map(address_map &map)
{
map.global_mask(0xc7ffff);
@@ -94,22 +405,22 @@ void toobin_state::main_map(address_map &map)
map(0xc00000, 0xc07fff).ram().w(m_playfield_tilemap, FUNC(tilemap_device::write16)).share("playfield");
map(0xc08000, 0xc097ff).mirror(0x046000).ram().w(m_alpha_tilemap, FUNC(tilemap_device::write16)).share("alpha");
map(0xc09800, 0xc09fff).mirror(0x046000).ram().share("mob");
- map(0xc10000, 0xc107ff).mirror(0x047800).ram().w(FUNC(toobin_state::paletteram_w)).share("paletteram");
- map(0x826000, 0x826001).mirror(0x4500fe).nopr(); /* who knows? read at controls time */
+ map(0xc10000, 0xc107ff).mirror(0x047800).ram().w(FUNC(toobin_state::paletteram_w)).share(m_paletteram);
+ map(0x826000, 0x826001).mirror(0x4500fe).nopr(); // who knows? read at controls time
map(0x828000, 0x828001).mirror(0x4500fe).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
map(0x828101, 0x828101).mirror(0x4500fe).w(m_jsa, FUNC(atari_jsa_i_device::main_command_w));
map(0x828300, 0x828301).mirror(0x45003e).w(FUNC(toobin_state::intensity_w));
- map(0x828340, 0x828341).mirror(0x45003e).w(FUNC(toobin_state::interrupt_scan_w)).share("interrupt_scan");
+ map(0x828340, 0x828341).mirror(0x45003e).w(FUNC(toobin_state::interrupt_scan_w)).share(m_interrupt_scan);
map(0x828380, 0x828381).mirror(0x45003e).ram().w(FUNC(toobin_state::slip_w)).share("mob:slip");
map(0x8283c0, 0x8283c1).mirror(0x45003e).w(FUNC(toobin_state::scanline_int_ack_w));
map(0x828400, 0x828401).mirror(0x4500fe).w(m_jsa, FUNC(atari_jsa_i_device::sound_reset_w));
map(0x828500, 0x828501).mirror(0x4500fe).w("eeprom", FUNC(eeprom_parallel_28xx_device::unlock_write16));
- map(0x828600, 0x828601).mirror(0x4500fe).w(FUNC(toobin_state::xscroll_w)).share("xscroll");
- map(0x828700, 0x828701).mirror(0x4500fe).w(FUNC(toobin_state::yscroll_w)).share("yscroll");
+ map(0x828600, 0x828601).mirror(0x4500fe).w(FUNC(toobin_state::xscroll_w)).share(m_xscroll);
+ map(0x828700, 0x828701).mirror(0x4500fe).w(FUNC(toobin_state::yscroll_w)).share(m_yscroll);
map(0x828800, 0x828801).mirror(0x4507fe).portr("FF8800");
map(0x829000, 0x829001).mirror(0x4507fe).portr("FF9000");
map(0x829801, 0x829801).mirror(0x4507fe).r(m_jsa, FUNC(atari_jsa_i_device::main_response_r));
- map(0x82a000, 0x82afff).mirror(0x451000).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff);
+ map(0x82a000, 0x82a3ff).mirror(0x451c00).rw("eeprom", FUNC(eeprom_parallel_28xx_device::read), FUNC(eeprom_parallel_28xx_device::write)).umask16(0x00ff);
map(0x82c000, 0x82ffff).mirror(0x450000).ram();
}
@@ -205,31 +516,33 @@ GFXDECODE_END
void toobin_state::toobin(machine_config &config)
{
- /* basic machine hardware */
- m68010_device &maincpu(M68010(config, m_maincpu, MASTER_CLOCK/4));
+ static constexpr XTAL MASTER_CLOCK = 32_MHz_XTAL;
+
+ // basic machine hardware
+ m68010_device &maincpu(M68010(config, m_maincpu, MASTER_CLOCK / 4));
maincpu.set_addrmap(AS_PROGRAM, &toobin_state::main_map);
- maincpu.disable_interrupt_mixer();
+ maincpu.set_interrupt_mixer(false);
EEPROM_2804(config, "eeprom").lock_after_write(true);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
- /* video hardware */
- TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 4, 8,8, TILEMAP_SCAN_ROWS, 128,64).set_info_callback(FUNC(toobin_state::get_playfield_tile_info));
- TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8,8, TILEMAP_SCAN_ROWS, 64,48, 0).set_info_callback(FUNC(toobin_state::get_alpha_tile_info));
+ // video hardware
+ TILEMAP(config, m_playfield_tilemap, m_gfxdecode, 4, 8, 8, TILEMAP_SCAN_ROWS, 128, 64).set_info_callback(FUNC(toobin_state::get_playfield_tile_info));
+ TILEMAP(config, m_alpha_tilemap, m_gfxdecode, 2, 8, 8, TILEMAP_SCAN_ROWS, 64, 48, 0).set_info_callback(FUNC(toobin_state::get_alpha_tile_info));
ATARI_MOTION_OBJECTS(config, m_mob, 0, m_screen, toobin_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);
- m_screen->set_raw(MASTER_CLOCK/2, 640, 0, 512, 416, 0, 384);
+ m_screen->set_raw(MASTER_CLOCK / 2, 640, 0, 512, 416, 0, 384);
m_screen->set_screen_update(FUNC(toobin_state::screen_update));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_toobin);
PALETTE(config, m_palette).set_entries(1024);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
@@ -250,7 +563,7 @@ void toobin_state::toobin(machine_config &config)
*************************************/
ROM_START( toobin )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 8*64k for 68000 code */
+ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "3133-1j.061", 0x000000, 0x010000, CRC(79a92d02) SHA1(72eebb96a3963f94558bb204e0afe08f2b4c1864) )
ROM_LOAD16_BYTE( "3137-1f.061", 0x000001, 0x010000, CRC(e389ef60) SHA1(24861fe5eb49de852987993a905fefe4dd43b204) )
ROM_LOAD16_BYTE( "3134-2j.061", 0x020000, 0x010000, CRC(3dbe9a48) SHA1(37fe2534fed5708a63995e53ea0cb1d2d23fc1b9) )
@@ -260,7 +573,7 @@ ROM_START( toobin )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
@@ -305,7 +618,7 @@ ROM_END
ROM_START( toobine )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 8*64k for 68000 code */
+ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "3733-1j.061", 0x000000, 0x010000, CRC(286c7fad) SHA1(1f06168327bdc356f1bc4cf9a951f914932c491a) )
ROM_LOAD16_BYTE( "3737-1f.061", 0x000001, 0x010000, CRC(965c161d) SHA1(30d959a945cb7dc7f00ad4ca9db027a377024030) )
ROM_LOAD16_BYTE( "3134-2j.061", 0x020000, 0x010000, CRC(3dbe9a48) SHA1(37fe2534fed5708a63995e53ea0cb1d2d23fc1b9) )
@@ -315,7 +628,7 @@ ROM_START( toobine )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
@@ -360,7 +673,7 @@ ROM_END
ROM_START( toobing )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 8*64k for 68000 code */
+ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "3233-1j.061", 0x000000, 0x010000, CRC(b04eb760) SHA1(760525b4f72fad47cfc457e14db70ade30a9ddac) )
ROM_LOAD16_BYTE( "3237-1f.061", 0x000001, 0x010000, CRC(4e41a470) SHA1(3a4c9b0d93cf4cff80978c0568bb9ef9eeb878dd) )
ROM_LOAD16_BYTE( "3234-2j.061", 0x020000, 0x010000, CRC(8c60f1b4) SHA1(0ff3f4fede83410d73027b6e7445e83044e4b21e) )
@@ -370,7 +683,7 @@ ROM_START( toobing )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
@@ -415,7 +728,7 @@ ROM_END
ROM_START( toobin2e )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 8*64k for 68000 code */
+ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "2733-1j.061", 0x000000, 0x010000, CRC(a6334cf7) SHA1(39e540619c24af65bda44160a5bdaebf3600b64b) )
ROM_LOAD16_BYTE( "2737-1f.061", 0x000001, 0x010000, CRC(9a52dd20) SHA1(a370ae3e4c7af55ea61b57a203a900f2be3ce6b9) )
ROM_LOAD16_BYTE( "2134-2j.061", 0x020000, 0x010000, CRC(2b8164c8) SHA1(aeeaff9df9fda23b295b59efadf52160f084d256) )
@@ -425,7 +738,7 @@ ROM_START( toobin2e )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
@@ -470,7 +783,7 @@ ROM_END
ROM_START( toobin2 )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 8*64k for 68000 code */
+ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "2133-1j.061", 0x000000, 0x010000, CRC(2c3382e4) SHA1(39919e9b5b586b630e0581adabfe25d83b2bfaef) )
ROM_LOAD16_BYTE( "2137-1f.061", 0x000001, 0x010000, CRC(891c74b1) SHA1(2f39d0e4934ccf48bb5fc0737f34fc5a65cfd903) )
ROM_LOAD16_BYTE( "2134-2j.061", 0x020000, 0x010000, CRC(2b8164c8) SHA1(aeeaff9df9fda23b295b59efadf52160f084d256) )
@@ -480,7 +793,7 @@ ROM_START( toobin2 )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
@@ -525,7 +838,7 @@ ROM_END
ROM_START( toobin1 )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* 8*64k for 68000 code */
+ ROM_REGION( 0x80000, "maincpu", 0 ) // 68000 code
ROM_LOAD16_BYTE( "1133-1j.061", 0x000000, 0x010000, CRC(caeb5d1b) SHA1(8036871a04b5206fd383ac0fd9a9d3218128088b) )
ROM_LOAD16_BYTE( "1137-1f.061", 0x000001, 0x010000, CRC(9713d9d3) SHA1(55791150312de201bdd330bfd4cbb132cb3959e4) )
ROM_LOAD16_BYTE( "1134-2j.061", 0x020000, 0x010000, CRC(119f5d7b) SHA1(edd0b1ab29bb9c15c3b80037635c3b6d5fb434dc) )
@@ -535,7 +848,7 @@ ROM_START( toobin1 )
ROM_LOAD16_BYTE( "1136-5j.061", 0x060000, 0x010000, CRC(5ae3eeac) SHA1(583b6c3f61e8ad4d98449205fedecf3e21ee993c) )
ROM_LOAD16_BYTE( "1140-5f.061", 0x060001, 0x010000, CRC(dacbbd94) SHA1(0e3a93f439ff9f3dd57ee13604be02e9c74c8eec) )
- ROM_REGION( 0x10000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x10000, "jsa:cpu", 0 ) // 6502 code
ROM_LOAD( "1141-2k.061", 0x00000, 0x10000, CRC(c0dcce1a) SHA1(285c13f08020cf5827eca2afcc2fa8a3a0a073e0) )
ROM_REGION( 0x080000, "gfx1", 0 )
@@ -578,6 +891,8 @@ ROM_START( toobin1 )
ROM_LOAD( "1142-20h.061", 0x000000, 0x004000, CRC(a6ab551f) SHA1(6a11e16f3965416c81737efcb81e751484ba5ace) )
ROM_END
+} // anonymous namespace
+
/*************************************
*
@@ -585,9 +900,9 @@ ROM_END
*
*************************************/
-GAME( 1988, toobin, 0, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (rev 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, toobin, 0, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (rev 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, toobine, toobin, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (Europe, rev 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, toobing, toobin, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (German, rev 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, toobin2, toobin, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (rev 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, toobin2, toobin, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (rev 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, toobin2e, toobin, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (Europe, rev 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, toobin1, toobin, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (rev 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, toobin1, toobin, toobin, toobin, toobin_state, empty_init, ROT270, "Atari Games", "Toobin' (rev 1)", MACHINE_SUPPORTS_SAVE )