diff options
Diffstat (limited to 'src/mame/drivers/toypop.cpp')
-rw-r--r-- | src/mame/drivers/toypop.cpp | 559 |
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 ) |