summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/toypop.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/toypop.cpp')
-rw-r--r--src/mame/drivers/toypop.cpp559
1 files changed, 280 insertions, 279 deletions
diff --git a/src/mame/drivers/toypop.cpp b/src/mame/drivers/toypop.cpp
index 1b5d309a7ac..4f76815374f 100644
--- a/src/mame/drivers/toypop.cpp
+++ b/src/mame/drivers/toypop.cpp
@@ -1,18 +1,11 @@
-// license:???
-// copyright-holders:Edgardo E. Contini Salvan
+// license:BSD-3-Clause
+// copyright-holders:Angelo Salese
/****************************************
Libble Rabble (c) 1983 Namco
Toypop (c) 1986 Namco
-driver by Edgardo E. Contini Salvan (pag2806@iperbole.bologna.it)
-
-6809 main CPU,
-6809 sound and
-68000 to create the background image.
-
-Libble Rabble and Toypop run on the same board, but the memory map is subtly
-different.
+Namco "Universal System 16" Hardware
Notes:
------
@@ -24,235 +17,274 @@ Notes:
9xU 2xR 9xD 2xL
(c) 1983 NAMCO LTD. will appear on the screen.
-
-TODO:
-- I haven't found any Easter egg in Toy Pop. Maybe they had stopped inserting
- them by that time.
-
****************************************/
#include "emu.h"
#include "cpu/m6809/m6809.h"
#include "cpu/m68000/m68000.h"
-#include "includes/toypop.h"
-
-
-READ16_MEMBER(toypop_state::toypop_m68000_sharedram_r)
-{
- return m_m68000_sharedram[offset];
-}
+#include "machine/namcoio.h"
+#include "sound/namco.h"
-WRITE16_MEMBER(toypop_state::toypop_m68000_sharedram_w)
-{
- if (ACCESSING_BITS_0_7)
- {
- m_m68000_sharedram[offset] = data & 0xff;
- }
-}
+#define MASTER_CLOCK XTAL_6_144MHz
-READ8_MEMBER(toypop_state::toypop_main_interrupt_enable_r)
+class namcos16_state : public driver_device
{
- m_main_irq_mask = 1;
- return 0;
-}
+public:
+ namcos16_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_master_cpu(*this,"maincpu"),
+ m_slave_cpu(*this, "slave"),
+ m_sound_cpu(*this, "audiocpu"),
+ m_namco15xx(*this, "namco"),
+ m_namco58xx(*this, "58xx"),
+ m_namco56xx_1(*this, "56xx_1"),
+ m_namco56xx_2(*this, "56xx_2"),
+ m_palette(*this, "palette"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_slave_sharedram(*this, "slave_sharedram"),
+ m_bgvram(*this, "bgvram"),
+ m_fgvram(*this, "fgvram"),
+ m_fgattr(*this, "fgattr")
+ { }
+
+ required_device<cpu_device> m_master_cpu;
+ required_device<cpu_device> m_slave_cpu;
+ required_device<cpu_device> m_sound_cpu;
+
+ required_device<namco_15xx_device> m_namco15xx;
+ required_device<namco58xx_device> m_namco58xx;
+ required_device<namco56xx_device> m_namco56xx_1;
+ required_device<namco56xx_device> m_namco56xx_2;
+ required_device<palette_device> m_palette;
+ required_device<gfxdecode_device> m_gfxdecode;
+
+ required_shared_ptr<UINT8> m_slave_sharedram;
+ required_shared_ptr<UINT16> m_bgvram;
+ required_shared_ptr<UINT8> m_fgvram;
+ required_shared_ptr<UINT8> m_fgattr;
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ INTERRUPT_GEN_MEMBER(master_vblank_irq);
+ INTERRUPT_GEN_MEMBER(slave_vblank_irq);
+
+ DECLARE_READ8_MEMBER(irq_enable_r);
+ DECLARE_WRITE8_MEMBER(irq_disable_w);
+ DECLARE_PALETTE_INIT(toypop);
+ DECLARE_READ8_MEMBER(dipA_l);
+ DECLARE_READ8_MEMBER(dipA_h);
+ DECLARE_READ8_MEMBER(dipB_l);
+ DECLARE_READ8_MEMBER(dipB_h);
+ //DECLARE_WRITE8_MEMBER(out_coin0);
+ //DECLARE_WRITE8_MEMBER(out_coin1);
+ DECLARE_WRITE8_MEMBER(flip);
+ DECLARE_WRITE8_MEMBER(slave_halt_ctrl_w);
+ DECLARE_READ8_MEMBER(slave_shared_r);
+ DECLARE_WRITE8_MEMBER(slave_shared_w);
+ DECLARE_WRITE16_MEMBER(slave_irq_enable_w);
+ DECLARE_WRITE8_MEMBER(sound_halt_ctrl_w);
+protected:
+ // driver_device overrides
+// virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+// virtual void video_start() override;
+private:
+ bool m_master_irq_enable;
+ bool m_slave_irq_enable;
+
+ void legacy_bg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
+ void legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect);
-WRITE8_MEMBER(toypop_state::toypop_main_interrupt_enable_w)
-{
- m_main_irq_mask = 1;
-}
+};
-WRITE8_MEMBER(toypop_state::toypop_main_interrupt_disable_w)
+PALETTE_INIT_MEMBER(namcos16_state, toypop)
{
- m_main_irq_mask = 0;
-// m_maincpu->set_input_line(0, CLEAR_LINE);
-}
+ const UINT8 *color_prom = memregion("proms")->base();
-WRITE8_MEMBER(toypop_state::toypop_sound_interrupt_enable_acknowledge_w)
-{
- m_sound_irq_mask = 1;
-// m_audiocpu->set_input_line(0, CLEAR_LINE);
-}
+ for (int i = 0;i < 256;i++)
+ {
+ int bit0,bit1,bit2,bit3,r,g,b;
+
+ // red component
+ bit0 = (color_prom[i] >> 0) & 0x01;
+ bit1 = (color_prom[i] >> 1) & 0x01;
+ bit2 = (color_prom[i] >> 2) & 0x01;
+ bit3 = (color_prom[i] >> 3) & 0x01;
+ r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
+ // green component
+ bit0 = (color_prom[i+0x100] >> 0) & 0x01;
+ bit1 = (color_prom[i+0x100] >> 1) & 0x01;
+ bit2 = (color_prom[i+0x100] >> 2) & 0x01;
+ bit3 = (color_prom[i+0x100] >> 3) & 0x01;
+ g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
+ // blue component
+ bit0 = (color_prom[i+0x200] >> 0) & 0x01;
+ bit1 = (color_prom[i+0x200] >> 1) & 0x01;
+ bit2 = (color_prom[i+0x200] >> 2) & 0x01;
+ bit3 = (color_prom[i+0x200] >> 3) & 0x01;
+ b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
+
+ palette.set_indirect_color(i, rgb_t(r,g,b));
+ }
-WRITE8_MEMBER(toypop_state::toypop_sound_interrupt_disable_w)
-{
- m_sound_irq_mask = 0;
+ for (int i = 0;i < 256;i++)
+ {
+ UINT8 entry;
+
+ // characters
+ palette.set_pen_indirect(i + 0*256, (color_prom[i + 0x300] & 0x0f) | 0x70);
+ palette.set_pen_indirect(i + 1*256, (color_prom[i + 0x300] & 0x0f) | 0xf0);
+ // sprites
+ entry = color_prom[i + 0x500];
+ palette.set_pen_indirect(i + 2*256, entry);
+ }
+ for (int i = 0;i < 16;i++)
+ {
+ // background
+ palette.set_pen_indirect(i + 3*256 + 0*16, 0x60 + i);
+ palette.set_pen_indirect(i + 3*256 + 1*16, 0xe0 + i);
+ }
}
-void toypop_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+void namcos16_state::legacy_bg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- switch (id)
+ int x, y;
+ const UINT16 pal_base = 0x300;
+ const UINT32 src_base = 0x200/2;
+ const UINT16 src_pitch = 288 / 2;
+
+ for (y = cliprect.min_y; y <= cliprect.max_y; ++y)
{
- case TIMER_NAMCOIO_RUN:
- namcoio_run(ptr, param);
- break;
- default:
- assert_always(FALSE, "Unknown id in toypop_state::device_timer");
+ UINT16 *src = &m_bgvram[y * src_pitch + cliprect.min_x + src_base];
+ UINT16 *dst = &bitmap.pix16(y, cliprect.min_x);
+
+ for (x = cliprect.min_x; x <= cliprect.max_x; x += 2)
+ {
+ UINT32 srcpix = *src++;
+ *dst++ = m_palette->pen(((srcpix >> 8) & 0xf) + pal_base);
+ *dst++ = m_palette->pen((srcpix & 0xf) + pal_base);
+ }
}
}
-TIMER_CALLBACK_MEMBER(toypop_state::namcoio_run)
+void namcos16_state::legacy_fg_draw(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- switch (param)
+ gfx_element *gfx_0 = m_gfxdecode->gfx(0);
+ int count;
+
+ for (count=0;count<32*32;count++)
{
- case 0:
- m_namco58xx->customio_run();
- break;
- case 1:
- m_namco56xx_1->customio_run();
- break;
- case 2:
- m_namco56xx_2->customio_run();
- break;
+ int x;// = (count % 32);
+ int y; //= count / 32;
+
+ if(count < 64)
+ {
+ x = 34 + (count / 32);
+ y = (count % 32) - 2;
+ }
+ else if(count >= 32*30)
+ {
+ x = (count / 32) - 30;
+ y = (count % 32) - 2;
+ }
+ else
+ {
+ x = 2 + (count % 32);
+ y = (count / 32) - 2;
+ }
+
+ UINT16 tile = m_fgvram[count];
+ UINT8 color = (m_fgattr[count] & 0x3f) + 0x40;
+
+ gfx_0->transpen(bitmap,cliprect,tile,color,0,0,x*8,y*8,0);
}
}
-INTERRUPT_GEN_MEMBER(toypop_state::toypop_main_vblank_irq)
+UINT32 namcos16_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
{
- if(m_main_irq_mask)
- device.execute().set_input_line(0, HOLD_LINE);
-
- if (!m_namco58xx->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_NAMCOIO_RUN);
-
- if (!m_namco56xx_1->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_NAMCOIO_RUN, 1);
-
- if (!m_namco56xx_2->read_reset_line()) /* give the cpu a tiny bit of time to write the command before processing it */
- timer_set(attotime::from_usec(50), TIMER_NAMCOIO_RUN, 2);
-
+ legacy_bg_draw(bitmap,cliprect);
+ legacy_fg_draw(bitmap,cliprect);
+ return 0;
}
-INTERRUPT_GEN_MEMBER(toypop_state::toypop_sound_timer_irq)
+READ8_MEMBER(namcos16_state::irq_enable_r)
{
- if(m_sound_irq_mask)
- device.execute().set_input_line(0, HOLD_LINE);
+ m_master_irq_enable = true;
+ return 0;
}
-WRITE8_MEMBER(toypop_state::toypop_sound_clear_w)
+WRITE8_MEMBER(namcos16_state::irq_disable_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ m_master_irq_enable = false;
}
-WRITE8_MEMBER(toypop_state::toypop_sound_assert_w)
+WRITE8_MEMBER(namcos16_state::slave_halt_ctrl_w)
{
- m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ m_slave_cpu->set_input_line(INPUT_LINE_RESET,offset & 0x800 ? ASSERT_LINE : CLEAR_LINE);
}
-WRITE8_MEMBER(toypop_state::toypop_m68000_clear_w)
+WRITE8_MEMBER(namcos16_state::sound_halt_ctrl_w)
{
- m_subcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ m_sound_cpu->set_input_line(INPUT_LINE_RESET,offset & 0x800 ? ASSERT_LINE : CLEAR_LINE);
}
-WRITE8_MEMBER(toypop_state::toypop_m68000_assert_w)
+READ8_MEMBER(namcos16_state::slave_shared_r)
{
- m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ return m_slave_sharedram[offset];
}
-void toypop_state::machine_reset()
+WRITE8_MEMBER(namcos16_state::slave_shared_w)
{
- m_main_irq_mask = 0;
- m_maincpu->set_input_line(0, CLEAR_LINE);
-
- m_sound_irq_mask = 0;
- m_audiocpu->set_input_line(0, CLEAR_LINE);
-
- m_interrupt_enable_68k = 0;
+ m_slave_sharedram[offset] = data;
}
-INTERRUPT_GEN_MEMBER(toypop_state::toypop_m68000_interrupt)
+WRITE16_MEMBER(namcos16_state::slave_irq_enable_w)
{
- if (m_interrupt_enable_68k)
- device.execute().set_input_line(6, HOLD_LINE);
+ m_slave_irq_enable = (offset & 0x40000) ? false : true;
}
-WRITE16_MEMBER(toypop_state::toypop_m68000_interrupt_enable_w)
-{
- m_interrupt_enable_68k = 1;
-}
+READ8_MEMBER(namcos16_state::dipA_l){ return ioport("DSW1")->read(); } // dips A
+READ8_MEMBER(namcos16_state::dipA_h){ return ioport("DSW1")->read() >> 4; } // dips A
+READ8_MEMBER(namcos16_state::dipB_l){ return ioport("DSW2")->read(); } // dips B
+READ8_MEMBER(namcos16_state::dipB_h){ return ioport("DSW2")->read() >> 4; } // dips B
-WRITE16_MEMBER(toypop_state::toypop_m68000_interrupt_disable_w)
+WRITE8_MEMBER(namcos16_state::flip)
{
- m_interrupt_enable_68k = 0;
+ flip_screen_set(data & 1);
}
-
-
-/*************************************
- *
- * Main CPU memory handlers
- *
- *************************************/
-
-static ADDRESS_MAP_START( liblrabl_map, AS_PROGRAM, 8, toypop_state )
- AM_RANGE(0x0000, 0x07ff) AM_RAM_WRITE(toypop_videoram_w) AM_SHARE("videoram") /* video RAM */
- AM_RANGE(0x0800, 0x1fff) AM_RAM AM_SHARE("spriteram") /* general RAM, area 1 */
- AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("m68k_shared") /* shared RAM with the 68000 CPU */
- AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with sound CPU */
- AM_RANGE(0x6800, 0x680f) AM_DEVREADWRITE("58xx", namco58xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6810, 0x681f) AM_DEVREADWRITE("56xx_1", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6820, 0x682f) AM_DEVREADWRITE("56xx_2", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x7000, 0x7000) AM_WRITE(toypop_main_interrupt_enable_w) /* enable interrupt */
- AM_RANGE(0x7800, 0x7800) AM_READ(watchdog_reset_r) AM_WRITE(toypop_main_interrupt_disable_w) /* disable interrupt */
- AM_RANGE(0x8000, 0x8000) AM_WRITE(toypop_m68000_clear_w) /* reset 68000 */
- AM_RANGE(0x8800, 0x8800) AM_WRITE(toypop_m68000_assert_w) /* reset 68000 */
- AM_RANGE(0x9000, 0x9000) AM_WRITE(toypop_sound_clear_w) /* sound CPU reset */
- AM_RANGE(0x9800, 0x9800) AM_WRITE(toypop_sound_assert_w) /* sound CPU reset */
- AM_RANGE(0xa000, 0xa001) AM_WRITE(toypop_palettebank_w) /* background image palette */
- AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM code */
+static ADDRESS_MAP_START( master_map, AS_PROGRAM, 8, namcos16_state )
+ AM_RANGE(0x0000, 0x03ff) AM_RAM AM_SHARE("fgvram")
+ AM_RANGE(0x0400, 0x07ff) AM_RAM AM_SHARE("fgattr")
+ AM_RANGE(0x0800, 0x1fff) AM_RAM
+ AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("slave_sharedram")
+ // TODO: 0x6xxx-0x7xxx seems to be programmable somehow (PAL?)
+ AM_RANGE(0x6000, 0x600f) AM_DEVREADWRITE("58xx", namco58xx_device, read, write)
+ AM_RANGE(0x6010, 0x601f) AM_DEVREADWRITE("56xx_1", namco56xx_device, read, write)
+ AM_RANGE(0x6020, 0x602f) AM_DEVREADWRITE("56xx_2", namco56xx_device, read, write)
+ AM_RANGE(0x6800, 0x6bff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w)
+ AM_RANGE(0x7000, 0x7000) AM_READWRITE(irq_enable_r,irq_disable_w)
+
+ AM_RANGE(0x8000, 0x8fff) AM_WRITE(slave_halt_ctrl_w)
+ AM_RANGE(0x9000, 0x9fff) AM_WRITE(sound_halt_ctrl_w)
+ // 0xa000 palette bank
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("master_rom",0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( toypop_map, AS_PROGRAM, 8, toypop_state )
- AM_RANGE(0x0000, 0x07ff) AM_RAM_WRITE(toypop_videoram_w) AM_SHARE("videoram") /* video RAM */
- AM_RANGE(0x0800, 0x1fff) AM_RAM AM_SHARE("spriteram") /* general RAM, area 1 */
- AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("m68k_shared") /* shared RAM with the 68000 CPU */
- AM_RANGE(0x6000, 0x600f) AM_DEVREADWRITE("58xx", namco58xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6010, 0x601f) AM_DEVREADWRITE("56xx_1", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6020, 0x602f) AM_DEVREADWRITE("56xx_2", namco56xx_device, read, write) /* custom I/O */
- AM_RANGE(0x6800, 0x6bff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with sound CPU */
- AM_RANGE(0x7000, 0x7000) AM_READWRITE(toypop_main_interrupt_enable_r, toypop_main_interrupt_disable_w) /* disable interrupt */
- AM_RANGE(0x8000, 0x8000) AM_WRITE(toypop_m68000_clear_w) /* reset 68000 */
- AM_RANGE(0x8800, 0x8800) AM_WRITE(toypop_m68000_assert_w) /* reset 68000 */
- AM_RANGE(0x9000, 0x9000) AM_WRITE(toypop_sound_clear_w) /* sound CPU reset */
- AM_RANGE(0x9800, 0x9800) AM_WRITE(toypop_sound_assert_w) /* sound CPU reset */
- AM_RANGE(0xa000, 0xa001) AM_WRITE(toypop_palettebank_w) /* background image palette */
- AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM code */
+static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 16, namcos16_state )
+ AM_RANGE(0x000000, 0x007fff) AM_ROM AM_REGION("slave_rom", 0)
+ AM_RANGE(0x080000, 0x0bffff) AM_RAM
+ AM_RANGE(0x100000, 0x100fff) AM_READWRITE8(slave_shared_r,slave_shared_w,0x00ff)
+ AM_RANGE(0x190000, 0x1dffff) AM_RAM AM_SHARE("bgvram")
+ AM_RANGE(0x300000, 0x3fffff) AM_WRITE(slave_irq_enable_w)
ADDRESS_MAP_END
-
-/*************************************
- *
- * Sound CPU memory handlers
- *
- *************************************/
-
-static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, toypop_state )
- AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w) /* shared RAM with the main CPU + sound registers */
- AM_RANGE(0x2000, 0x2000) AM_WRITE(toypop_sound_interrupt_disable_w) /* ??? toypop doesn't write here */
- AM_RANGE(0x4000, 0x4000) AM_WRITE(toypop_sound_interrupt_enable_acknowledge_w)
- AM_RANGE(0x6000, 0x6000) AM_WRITE(watchdog_reset_w)
- AM_RANGE(0xe000, 0xffff) AM_ROM
-ADDRESS_MAP_END
-
-
-
-/*************************************
- *
- * 68k CPU memory handlers
- *
- *************************************/
-
-static ADDRESS_MAP_START( m68k_map, AS_PROGRAM, 16, toypop_state )
- AM_RANGE(0x000000, 0x007fff) AM_ROM /* ROM code */
- AM_RANGE(0x080000, 0x0bffff) AM_RAM /* RAM */
- AM_RANGE(0x100000, 0x100fff) AM_READWRITE(toypop_m68000_sharedram_r, toypop_m68000_sharedram_w) /* shared RAM with the main CPU */
- AM_RANGE(0x180000, 0x187fff) AM_READWRITE(toypop_merged_background_r, toypop_merged_background_w) /* RAM that has to be merged with the background image */
- AM_RANGE(0x18fffc, 0x18ffff) AM_WRITE(toypop_flipscreen_w) /* flip mode */
- AM_RANGE(0x190000, 0x1dffff) AM_RAM AM_SHARE("bg_image") /* RAM containing the background image */
- AM_RANGE(0x300000, 0x300001) AM_WRITE(toypop_m68000_interrupt_enable_w) /* interrupt enable */
- AM_RANGE(0x380000, 0x380001) AM_WRITE(toypop_m68000_interrupt_disable_w)/* interrupt disable */
+static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, namcos16_state )
+ AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("namco", namco_15xx_device, sharedram_r, sharedram_w)
+ AM_RANGE(0xe000, 0xffff) AM_ROM AM_REGION("sound_rom", 0)
ADDRESS_MAP_END
-
static INPUT_PORTS_START( liblrabl )
/* The inputs are not memory mapped, they are handled by three I/O chips. */
PORT_START("P1_RIGHT") /* 58XX #0 pins 22-29 */
@@ -445,7 +477,6 @@ static INPUT_PORTS_START( toypop )
INPUT_PORTS_END
-
static const gfx_layout charlayout =
{
8,8,
@@ -475,170 +506,140 @@ static GFXDECODE_START( toypop )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 128*4, 64 )
GFXDECODE_END
-/***************************************************************************
-
- Custom I/O initialization
-
-***************************************************************************/
-
-READ8_MEMBER(toypop_state::dipA_l){ return ioport("DSW1")->read(); } // dips A
-READ8_MEMBER(toypop_state::dipA_h){ return ioport("DSW1")->read() >> 4; } // dips A
-READ8_MEMBER(toypop_state::dipB_l){ return ioport("DSW2")->read(); } // dips B
-READ8_MEMBER(toypop_state::dipB_h){ return ioport("DSW2")->read() >> 4; } // dips B
-
-WRITE8_MEMBER(toypop_state::out_coin0)
+void namcos16_state::machine_reset()
{
- machine().bookkeeping().coin_lockout_global_w(data & 4);
- machine().bookkeeping().coin_counter_w(0, ~data & 8);
+ m_master_irq_enable = false;
+ m_slave_irq_enable = false;
+ m_slave_cpu->set_input_line(INPUT_LINE_RESET,ASSERT_LINE);
+ m_sound_cpu->set_input_line(INPUT_LINE_RESET,ASSERT_LINE);
}
-WRITE8_MEMBER(toypop_state::out_coin1)
+INTERRUPT_GEN_MEMBER(namcos16_state::master_vblank_irq)
{
- machine().bookkeeping().coin_counter_w(1, ~data & 1);
+ if(m_master_irq_enable == true)
+ device.execute().set_input_line(M6809_IRQ_LINE,HOLD_LINE);
}
-WRITE8_MEMBER(toypop_state::flip)
+INTERRUPT_GEN_MEMBER(namcos16_state::slave_vblank_irq)
{
- flip_screen_set(data & 1);
+ if(m_slave_irq_enable == true)
+ device.execute().set_input_line(6,HOLD_LINE);
}
-static MACHINE_CONFIG_START( liblrabl, toypop_state )
+static MACHINE_CONFIG_START( liblrabl, namcos16_state )
+ MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/4)
+ MCFG_CPU_PROGRAM_MAP(master_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos16_state, master_vblank_irq)
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6809, 1536000) /* 1.536 MHz (measured on Libble Rabble board) */
- MCFG_CPU_PROGRAM_MAP(liblrabl_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", toypop_state, toypop_main_vblank_irq)
+ MCFG_CPU_ADD("slave", M68000, MASTER_CLOCK)
+ MCFG_CPU_PROGRAM_MAP(slave_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos16_state, slave_vblank_irq)
- MCFG_CPU_ADD("audiocpu", M6809, 1536000)
+ MCFG_CPU_ADD("audiocpu", M6809, MASTER_CLOCK/4)
MCFG_CPU_PROGRAM_MAP(sound_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", toypop_state, toypop_sound_timer_irq)
+ MCFG_CPU_PERIODIC_INT_DRIVER(namcos16_state, irq0_line_hold, 60)
+
+
- MCFG_CPU_ADD("sub", M68000, 6144000) /* 6.144 MHz (measured on Libble Rabble board) */
- MCFG_CPU_PROGRAM_MAP(m68k_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", toypop_state, toypop_m68000_interrupt)
-
- MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
- /* synchronization of the CPUs */
-
- MCFG_DEVICE_ADD("58xx", NAMCO58XX, 0)
+ MCFG_DEVICE_ADD("58xx", NAMCO58XX, 0)
MCFG_NAMCO58XX_IN_0_CB(IOPORT("COINS"))
MCFG_NAMCO58XX_IN_1_CB(IOPORT("P1_RIGHT"))
MCFG_NAMCO58XX_IN_2_CB(IOPORT("P2_RIGHT"))
MCFG_NAMCO58XX_IN_3_CB(IOPORT("BUTTONS"))
MCFG_DEVICE_ADD("56xx_1", NAMCO56XX, 0)
- MCFG_NAMCO56XX_IN_0_CB(READ8(toypop_state, dipA_h))
- MCFG_NAMCO56XX_IN_1_CB(READ8(toypop_state, dipB_l))
- MCFG_NAMCO56XX_IN_2_CB(READ8(toypop_state, dipB_h))
- MCFG_NAMCO56XX_IN_3_CB(READ8(toypop_state, dipA_l))
- MCFG_NAMCO56XX_OUT_0_CB(WRITE8(toypop_state, flip))
+ MCFG_NAMCO56XX_IN_0_CB(READ8(namcos16_state, dipA_h))
+ MCFG_NAMCO56XX_IN_1_CB(READ8(namcos16_state, dipB_l))
+ MCFG_NAMCO56XX_IN_2_CB(READ8(namcos16_state, dipB_h))
+ MCFG_NAMCO56XX_IN_3_CB(READ8(namcos16_state, dipA_l))
+ MCFG_NAMCO56XX_OUT_0_CB(WRITE8(namcos16_state, flip))
MCFG_DEVICE_ADD("56xx_2", NAMCO56XX, 0)
MCFG_NAMCO56XX_IN_1_CB(IOPORT("P1_LEFT"))
MCFG_NAMCO56XX_IN_2_CB(IOPORT("P2_LEFT"))
MCFG_NAMCO56XX_IN_3_CB(IOPORT("SERVICE"))
- /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60.606060)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_SIZE(36*8, 28*8)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(toypop_state, screen_update_toypop)
+ MCFG_SCREEN_SIZE(36*8, 32*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 32*8-1)
+ MCFG_SCREEN_UPDATE_DRIVER(namcos16_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", toypop)
MCFG_PALETTE_ADD("palette", 128*4+64*4+16*2)
MCFG_PALETTE_INDIRECT_ENTRIES(256)
- MCFG_PALETTE_INIT_OWNER(toypop_state, toypop)
+ MCFG_PALETTE_INIT_OWNER(namcos16_state, toypop)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
-
MCFG_SOUND_ADD("namco", NAMCO_15XX, 24000)
MCFG_NAMCO_AUDIO_VOICES(8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( toypop, liblrabl )
-
- /* basic machine hardware */
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_PROGRAM_MAP(toypop_map)
-
- MCFG_DEVICE_MODIFY("58xx")
- MCFG_NAMCO58XX_OUT_0_CB(WRITE8(toypop_state, out_coin0))
- MCFG_NAMCO58XX_OUT_1_CB(WRITE8(toypop_state, out_coin1))
MACHINE_CONFIG_END
-
-/*************************************
- *
- * ROM definitions
- *
- *************************************/
-
ROM_START( liblrabl )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for the first CPU */
- ROM_LOAD( "5b.rom", 0x8000, 0x4000, CRC(da7a93c2) SHA1(fe4a02cdab66722eb7b8cf58825f899b1949a6a2) )
- ROM_LOAD( "5c.rom", 0xc000, 0x4000, CRC(6cae25dc) SHA1(de74317a7d5de1865d096c377923a764be5e6879) )
+ ROM_REGION( 0x8000, "master_rom", 0 )
+ ROM_LOAD( "5b.rom", 0x0000, 0x4000, CRC(da7a93c2) SHA1(fe4a02cdab66722eb7b8cf58825f899b1949a6a2) )
+ ROM_LOAD( "5c.rom", 0x4000, 0x4000, CRC(6cae25dc) SHA1(de74317a7d5de1865d096c377923a764be5e6879) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
- ROM_LOAD( "2c.rom", 0xe000, 0x2000, CRC(7c09e50a) SHA1(5f004d60bbb7355e008a9cda137b28bc2192b8ef) )
+ ROM_REGION( 0x2000, "sound_rom", 0 )
+ ROM_LOAD( "2c.rom", 0x0000, 0x2000, CRC(7c09e50a) SHA1(5f004d60bbb7355e008a9cda137b28bc2192b8ef) )
- ROM_REGION( 0x8000, "sub", 0 ) /* 32k for the third CPU */
- ROM_LOAD16_BYTE( "8c.rom", 0x0000, 0x4000, CRC(a00cd959) SHA1(cc5621103c31cfbc65941615cab391db0f74e6ce) )
- ROM_LOAD16_BYTE("10c.rom", 0x0001, 0x4000, CRC(09ce209b) SHA1(2ed46d6592f8227bac8ab54963d9a300706ade47) )
+ ROM_REGION( 0x8000, "slave_rom", 0 )
+ ROM_LOAD16_BYTE("8c.rom", 0x0001, 0x4000, CRC(a00cd959) SHA1(cc5621103c31cfbc65941615cab391db0f74e6ce) )
+ ROM_LOAD16_BYTE("10c.rom", 0x0000, 0x4000, CRC(09ce209b) SHA1(2ed46d6592f8227bac8ab54963d9a300706ade47) )
- /* temporary space for graphics (disposed after conversion) */
ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "5p.rom", 0x0000, 0x2000, CRC(3b4937f0) SHA1(06d9de576f1c2262c34aeb91054e68c9298af688) ) /* characters */
+ ROM_LOAD( "5p.rom", 0x0000, 0x2000, CRC(3b4937f0) SHA1(06d9de576f1c2262c34aeb91054e68c9298af688) )
ROM_REGION( 0x4000, "gfx2", 0 )
- ROM_LOAD( "9t.rom", 0x0000, 0x4000, CRC(a88e24ca) SHA1(eada133579f19de09255084dcdc386311606a335) ) /* sprites */
+ ROM_LOAD( "9t.rom", 0x0000, 0x4000, CRC(a88e24ca) SHA1(eada133579f19de09255084dcdc386311606a335) )
- ROM_REGION( 0x0600, "proms", 0 ) /* color proms */
- ROM_LOAD( "lr1-3.1r", 0x0000, 0x0100, CRC(f3ec0d07) SHA1(b0aad1fb6df79f202889600f486853995352f9c2) ) // palette: red component
- ROM_LOAD( "lr1-2.1s", 0x0100, 0x0100, CRC(2ae4f702) SHA1(838fdca9e91fea4f64a59880ac47c48973bb8fbf) ) // palette: green component
- ROM_LOAD( "lr1-1.1t", 0x0200, 0x0100, CRC(7601f208) SHA1(572d070ca387b780030ed5de38a8970b7cc14349) ) // palette: blue component
- ROM_LOAD( "lr1-5.5l", 0x0300, 0x0100, CRC(940f5397) SHA1(825a7bd78a8a08d30bad2e4890ae6e9ad88b36b8) ) /* characters */
- ROM_LOAD( "lr1-6.2p", 0x0400, 0x0200, CRC(a6b7f850) SHA1(7cfde16dfd5c4d5b876b4fbe4f924f1385932a93) ) /* sprites */
+ ROM_REGION( 0x0600, "proms", 0 )
+ ROM_LOAD( "lr1-3.1r", 0x0000, 0x0100, CRC(f3ec0d07) SHA1(b0aad1fb6df79f202889600f486853995352f9c2) )
+ ROM_LOAD( "lr1-2.1s", 0x0100, 0x0100, CRC(2ae4f702) SHA1(838fdca9e91fea4f64a59880ac47c48973bb8fbf) )
+ ROM_LOAD( "lr1-1.1t", 0x0200, 0x0100, CRC(7601f208) SHA1(572d070ca387b780030ed5de38a8970b7cc14349) )
+ ROM_LOAD( "lr1-5.5l", 0x0300, 0x0100, CRC(940f5397) SHA1(825a7bd78a8a08d30bad2e4890ae6e9ad88b36b8) )
+ ROM_LOAD( "lr1-6.2p", 0x0400, 0x0200, CRC(a6b7f850) SHA1(7cfde16dfd5c4d5b876b4fbe4f924f1385932a93) )
- ROM_REGION( 0x0100, "namco", 0 ) /* sound prom */
+ ROM_REGION( 0x0100, "namco", 0 )
ROM_LOAD( "lr1-4.3d", 0x0000, 0x0100, CRC(16a9166a) SHA1(847cbaf7c88616576c410177e066ae1d792ac0ba) )
ROM_END
ROM_START( toypop )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for the first CPU */
- ROM_LOAD( "tp1-2.5b", 0x8000, 0x4000, CRC(87469620) SHA1(2ee257486c9c044386ac7d0cd4a90583eaeb3e97) )
- ROM_LOAD( "tp1-1.5c", 0xc000, 0x4000, CRC(dee2fd6e) SHA1(b2c12008d6d3e7544ba3c12a52a6abf9181842c8) )
+ ROM_REGION( 0x8000, "master_rom", 0 )
+ ROM_LOAD( "tp1-2.5b", 0x0000, 0x4000, CRC(87469620) SHA1(2ee257486c9c044386ac7d0cd4a90583eaeb3e97) )
+ ROM_LOAD( "tp1-1.5c", 0x4000, 0x4000, CRC(dee2fd6e) SHA1(b2c12008d6d3e7544ba3c12a52a6abf9181842c8) )
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the second CPU */
- ROM_LOAD( "tp1-3.2c", 0xe000, 0x2000, CRC(5f3bf6e2) SHA1(d1b3335661b9b23cb10001416c515b77b5e783e9) )
+ ROM_REGION( 0x2000, "sound_rom", 0 )
+ ROM_LOAD( "tp1-3.2c", 0x0000, 0x2000, CRC(5f3bf6e2) SHA1(d1b3335661b9b23cb10001416c515b77b5e783e9) )
- ROM_REGION( 0x8000, "sub", 0 ) /* 32k for the third CPU */
- ROM_LOAD16_BYTE( "tp1-4.8c", 0x0000, 0x4000, CRC(76997db3) SHA1(5023a2f20a5f2c9baff130f6832583493c71f883) )
- ROM_LOAD16_BYTE("tp1-5.10c", 0x0001, 0x4000, CRC(37de8786) SHA1(710365e34c05d01815844c414518f93234b6160b) )
+ ROM_REGION( 0x8000, "slave_rom", 0 )
+ ROM_LOAD16_BYTE("tp1-4.8c", 0x0001, 0x4000, CRC(76997db3) SHA1(5023a2f20a5f2c9baff130f6832583493c71f883) )
+ ROM_LOAD16_BYTE("tp1-5.10c", 0x0000, 0x4000, CRC(37de8786) SHA1(710365e34c05d01815844c414518f93234b6160b) )
- /* temporary space for graphics (disposed after conversion) */
ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "tp1-7.5p", 0x0000, 0x2000, CRC(95076f9e) SHA1(1e3d32b21f6d46591ec3921aba51f672d64a9023) ) /* characters */
+ ROM_LOAD( "tp1-7.5p", 0x0000, 0x2000, CRC(95076f9e) SHA1(1e3d32b21f6d46591ec3921aba51f672d64a9023) )
ROM_REGION( 0x4000, "gfx2", 0 )
- ROM_LOAD( "tp1-6.9t", 0x0000, 0x4000, CRC(481ffeaf) SHA1(c51735ad3a1dbb46ad414408b54554e9223b2219) ) /* sprites */
+ ROM_LOAD( "tp1-6.9t", 0x0000, 0x4000, CRC(481ffeaf) SHA1(c51735ad3a1dbb46ad414408b54554e9223b2219) )
- ROM_REGION( 0x0600, "proms", 0 ) /* color proms */
- ROM_LOAD( "tp1-3.1r", 0x0000, 0x0100, CRC(cfce2fa5) SHA1(b42aa0f34d885389d2650bf7a0531b95703b8a28) ) // palette: red component
- ROM_LOAD( "tp1-2.1s", 0x0100, 0x0100, CRC(aeaf039d) SHA1(574560526100d38635aecd71eb73499c4f57d586) ) // palette: green component
- ROM_LOAD( "tp1-1.1t", 0x0200, 0x0100, CRC(08e7cde3) SHA1(5261aca6834d635d17f8afaa8e35848930030ba4) ) // palette: blue component
- ROM_LOAD( "tp1-4.5l", 0x0300, 0x0100, CRC(74138973) SHA1(2e21dbb1b19dd089da52e70fcb0ca91336e004e6) ) /* characters */
- ROM_LOAD( "tp1-5.2p", 0x0400, 0x0200, CRC(4d77fa5a) SHA1(2438910314b23ecafb553230244f3931861ad2da) ) /* sprites */
+ ROM_REGION( 0x0600, "proms", 0 )
+ ROM_LOAD( "tp1-3.1r", 0x0000, 0x0100, CRC(cfce2fa5) SHA1(b42aa0f34d885389d2650bf7a0531b95703b8a28) )
+ ROM_LOAD( "tp1-2.1s", 0x0100, 0x0100, CRC(aeaf039d) SHA1(574560526100d38635aecd71eb73499c4f57d586) )
+ ROM_LOAD( "tp1-1.1t", 0x0200, 0x0100, CRC(08e7cde3) SHA1(5261aca6834d635d17f8afaa8e35848930030ba4) )
+ ROM_LOAD( "tp1-4.5l", 0x0300, 0x0100, CRC(74138973) SHA1(2e21dbb1b19dd089da52e70fcb0ca91336e004e6) )
+ ROM_LOAD( "tp1-5.2p", 0x0400, 0x0200, CRC(4d77fa5a) SHA1(2438910314b23ecafb553230244f3931861ad2da) )
- ROM_REGION( 0x0100, "namco", 0 ) /* sound prom */
+ ROM_REGION( 0x0100, "namco", 0 )
ROM_LOAD( "tp1-6.3d", 0x0000, 0x0100, CRC(16a9166a) SHA1(847cbaf7c88616576c410177e066ae1d792ac0ba) )
ROM_END
-// YEAR, NAME, PARENT,MACHINE, INPUT, INIT,MONITOR,COMPANY,FULLNAME,FLAGS
-GAME( 1983, liblrabl, 0, liblrabl, liblrabl, driver_device, 0, ROT0, "Namco", "Libble Rabble", 0 )
-GAME( 1986, toypop, 0, toypop, toypop, driver_device, 0, ROT0, "Namco", "Toypop", 0 )
+GAME( 1983, liblrabl, 0, liblrabl, liblrabl, driver_device, 0, ROT0, "Namco", "Libble Rabble", MACHINE_IS_SKELETON )
+GAME( 1986, toypop, 0, toypop, toypop, driver_device, 0, ROT0, "Namco", "Toypop", MACHINE_IS_SKELETON )