From be7aac56aff1de56e1fea039f0df0605165ea6e4 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 7 Feb 2015 09:32:43 +0100 Subject: darkmist.c, mustache.c, panicr.c: added save state support, small cleanups (nw) t5182_device: moved internal ROM in the device, instead of having it in the games' romsets. General cleanups to bring the device closer to modern MAME (nw) --- src/mame/audio/t5182.c | 121 +++++++++++++++++++++++++++++-------------- src/mame/audio/t5182.h | 26 +++++----- src/mame/drivers/darkmist.c | 27 ++++------ src/mame/drivers/mustache.c | 26 ++++------ src/mame/drivers/panicr.c | 120 +++++++++++++++++++++--------------------- src/mame/includes/darkmist.h | 32 +++++++----- src/mame/includes/mustache.h | 29 ++++++----- src/mame/video/darkmist.c | 26 +++++----- src/mame/video/mustache.c | 27 +++++----- 9 files changed, 234 insertions(+), 200 deletions(-) diff --git a/src/mame/audio/t5182.c b/src/mame/audio/t5182.c index 27d7c7b93fa..cb06d03b139 100644 --- a/src/mame/audio/t5182.c +++ b/src/mame/audio/t5182.c @@ -152,23 +152,15 @@ rom. const device_type T5182 = &device_creator; t5182_device::t5182_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, T5182, "T5182 MCU", tag, owner, clock, "toshiba_t5182", __FILE__), - m_t5182_sharedram(NULL), + : device_t(mconfig, T5182, "T5182 MCU", tag, owner, clock, "t5182", __FILE__), + m_ourcpu(*this, "t5182_z80"), + m_sharedram(*this, "sharedram"), m_irqstate(0), m_semaphore_main(0), m_semaphore_snd(0) { } -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void t5182_device::device_config_complete() -{ -} //------------------------------------------------- // device_start - device-specific startup @@ -176,24 +168,21 @@ void t5182_device::device_config_complete() void t5182_device::device_start() { - m_t5182_sharedram = reinterpret_cast(machine().root_device().memshare("t5182_sharedram")->ptr()); - - save_pointer(NAME(m_t5182_sharedram), sizeof(UINT8)); + m_setirq_cb = timer_alloc(SETIRQ_CB); + save_item(NAME(m_irqstate)); save_item(NAME(m_semaphore_main)); save_item(NAME(m_semaphore_snd)); - - m_ourcpu = machine().device("t5182_z80"); } READ8_MEMBER(t5182_device::sharedram_r) { - return m_t5182_sharedram[offset]; + return m_sharedram[offset]; } WRITE8_MEMBER(t5182_device::sharedram_w) { - m_t5182_sharedram[offset] = data; + m_sharedram[offset] = data; } TIMER_CALLBACK_MEMBER( t5182_device::setirq_callback ) @@ -230,29 +219,39 @@ TIMER_CALLBACK_MEMBER( t5182_device::setirq_callback ) m_ourcpu->set_input_line(0,ASSERT_LINE); } - +void t5182_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + switch (id) + { + case SETIRQ_CB: + setirq_callback(ptr, param); + break; + default: + assert_always(FALSE, "Unknown id in t5182_device::device_timer"); + } +} WRITE8_MEMBER( t5182_device::sound_irq_w ) { - space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), CPU_ASSERT); + synchronize(SETIRQ_CB, CPU_ASSERT); } WRITE8_MEMBER( t5182_device::ym2151_irq_ack_w ) { - space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_ACK); + synchronize(SETIRQ_CB, YM2151_ACK); } WRITE8_MEMBER( t5182_device::cpu_irq_ack_w ) { - space.machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), CPU_CLEAR); + synchronize(SETIRQ_CB, CPU_CLEAR); } WRITE_LINE_MEMBER(t5182_device::ym2151_irq_handler) { if (state) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_ASSERT); + synchronize(SETIRQ_CB, YM2151_ASSERT); else - machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_CLEAR); + synchronize(SETIRQ_CB, YM2151_CLEAR); } READ8_MEMBER(t5182_device::sharedram_semaphore_snd_r) @@ -285,17 +284,37 @@ READ8_MEMBER(t5182_device::sharedram_semaphore_main_r) return m_semaphore_main | (m_irqstate & 2); } +// ROM definition for the QS1000 internal program ROM +ROM_START( t5182 ) + ROM_REGION( 0x2000, "cpu", 0 ) + ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) +ROM_END + //------------------------------------------------- -// MACHINE_CONFIG_FRAGMENT( t5182 ) +// rom_region - return a pointer to the device's +// internal ROM region //------------------------------------------------- +const rom_entry *t5182_device::device_rom_region() const +{ + return ROM_NAME( t5182 ); +} -MACHINE_CONFIG_FRAGMENT( t5182 ) - MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK) - MCFG_CPU_PROGRAM_MAP(t5182_map) - MCFG_CPU_IO_MAP(t5182_io) +INPUT_PORTS_START(t5182) + PORT_START("T5182_COIN") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) +INPUT_PORTS_END -MACHINE_CONFIG_END +//------------------------------------------------- +// input_ports - return a pointer to the implicit +// input ports description for this device +//------------------------------------------------- +ioport_constructor t5182_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(t5182); +} + // 4000-407F RAM shared with main CPU // 4000 output queue length @@ -315,10 +334,10 @@ MACHINE_CONFIG_END // A0XX // rest unused ADDRESS_MAP_START( t5182_map, AS_PROGRAM, 8, t5182_device ) - AM_RANGE(0x0000, 0x1fff) AM_ROM // internal ROM + AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("cpu", 0) // internal ROM AM_RANGE(0x2000, 0x27ff) AM_RAM AM_MIRROR(0x1800) // internal RAM - AM_RANGE(0x4000, 0x40ff) AM_RAM AM_MIRROR(0x3F00) AM_SHARE("t5182_sharedram") // 2016 with four 74ls245s, one each for main and t5182 address and data. pins 23, 22, 20, 19, 18 are all tied low so only 256 bytes are usable - AM_RANGE(0x8000, 0xffff) AM_ROM // external ROM + AM_RANGE(0x4000, 0x40ff) AM_RAM AM_MIRROR(0x3F00) AM_SHARE("sharedram") // 2016 with four 74ls245s, one each for main and t5182 address and data. pins 23, 22, 20, 19, 18 are all tied low so only 256 bytes are usable + AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(":t5182_z80", 0) // external ROM ADDRESS_MAP_END @@ -334,11 +353,33 @@ ADDRESS_MAP_END // 50 W test mode status flags (bit 0 = ROM test fail, bit 1 = RAM test fail, bit 2 = YM2151 IRQ not received) ADDRESS_MAP_START( t5182_io, AS_IO, 8, t5182_device ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) - AM_RANGE(0x10, 0x10) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_snd_acquire_w) - AM_RANGE(0x11, 0x11) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_snd_release_w) - AM_RANGE(0x12, 0x12) AM_DEVWRITE("t5182", t5182_device, ym2151_irq_ack_w) - AM_RANGE(0x13, 0x13) AM_DEVWRITE("t5182", t5182_device, cpu_irq_ack_w) - AM_RANGE(0x20, 0x20) AM_DEVREAD("t5182", t5182_device, sharedram_semaphore_main_r) - AM_RANGE(0x30, 0x30) AM_READ_PORT(T5182COINPORT) + AM_RANGE(0x00, 0x01) AM_DEVREADWRITE(":ymsnd", ym2151_device, read, write) + AM_RANGE(0x10, 0x10) AM_WRITE(sharedram_semaphore_snd_acquire_w) + AM_RANGE(0x11, 0x11) AM_WRITE(sharedram_semaphore_snd_release_w) + AM_RANGE(0x12, 0x12) AM_WRITE(ym2151_irq_ack_w) + AM_RANGE(0x13, 0x13) AM_WRITE(cpu_irq_ack_w) + AM_RANGE(0x20, 0x20) AM_READ(sharedram_semaphore_main_r) + AM_RANGE(0x30, 0x30) AM_READ_PORT("T5182_COIN") ADDRESS_MAP_END + + +//------------------------------------------------- +// MACHINE_CONFIG_FRAGMENT( t5182 ) +//------------------------------------------------- + +MACHINE_CONFIG_FRAGMENT( t5182 ) + MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK) + MCFG_CPU_PROGRAM_MAP(t5182_map) + MCFG_CPU_IO_MAP(t5182_io) + +MACHINE_CONFIG_END + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor t5182_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( t5182 ); +} diff --git a/src/mame/audio/t5182.h b/src/mame/audio/t5182.h index 21ee3e05074..2a4b046403d 100644 --- a/src/mame/audio/t5182.h +++ b/src/mame/audio/t5182.h @@ -1,8 +1,6 @@ #include "sound/2151intf.h" #include "cpu/z80/z80.h" -#define T5182COINPORT "T5182_COIN" - class t5182_device : public device_t { @@ -20,6 +18,11 @@ public: CPU_CLEAR }; + enum + { + SETIRQ_CB + }; + DECLARE_WRITE8_MEMBER(sound_irq_w ); DECLARE_READ8_MEMBER(sharedram_semaphore_snd_r); DECLARE_WRITE8_MEMBER(sharedram_semaphore_main_acquire_w); @@ -35,26 +38,21 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + virtual const rom_entry *device_rom_region() const; + virtual ioport_constructor device_input_ports() const; + virtual machine_config_constructor device_mconfig_additions() const; private: // internal state - cpu_device *m_ourcpu; - UINT8 *m_t5182_sharedram; + required_device m_ourcpu; + required_shared_ptr m_sharedram; int m_irqstate; int m_semaphore_main; int m_semaphore_snd; - + emu_timer *m_setirq_cb; TIMER_CALLBACK_MEMBER( setirq_callback ); }; extern const device_type T5182; - -ADDRESS_MAP_EXTERN( t5182_map, 8 ); -ADDRESS_MAP_EXTERN( t5182_io, 8 ); - -MACHINE_CONFIG_EXTERN( t5182 ); - -#define MCFG_T5182_ADD(_tag) \ - MCFG_DEVICE_ADD(_tag, T5182, 0) diff --git a/src/mame/drivers/darkmist.c b/src/mame/drivers/darkmist.c index cfcbb3a1fc7..834c5434f33 100644 --- a/src/mame/drivers/darkmist.c +++ b/src/mame/drivers/darkmist.c @@ -28,7 +28,7 @@ TODO: #include "includes/darkmist.h" -WRITE8_MEMBER(darkmist_state::darkmist_hw_w) +WRITE8_MEMBER(darkmist_state::hw_w) { m_hw=data; membank("bank1")->set_base(&memregion("maincpu")->base()[0x010000+((data&0x80)?0x4000:0)]); @@ -40,7 +40,7 @@ static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, darkmist_state ) AM_RANGE(0xc801, 0xc801) AM_READ_PORT("P1") AM_RANGE(0xc802, 0xc802) AM_READ_PORT("P2") AM_RANGE(0xc803, 0xc803) AM_READ_PORT("START") - AM_RANGE(0xc804, 0xc804) AM_WRITE(darkmist_hw_w) + AM_RANGE(0xc804, 0xc804) AM_WRITE(hw_w) AM_RANGE(0xc805, 0xc805) AM_WRITEONLY AM_SHARE("spritebank") AM_RANGE(0xc806, 0xc806) AM_READ_PORT("DSW1") AM_RANGE(0xc807, 0xc807) AM_READ_PORT("DSW2") @@ -173,10 +173,6 @@ static INPUT_PORTS_START( darkmist ) PORT_DIPSETTING( 0x80, DEF_STR( No ) ) PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_START(T5182COINPORT) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) - INPUT_PORTS_END static const gfx_layout charlayout = @@ -213,7 +209,7 @@ static GFXDECODE_START( darkmist ) GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0, 16*4 ) GFXDECODE_END -TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::darkmist_scanline) +TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::scanline) { int scanline = param; @@ -230,10 +226,10 @@ static MACHINE_CONFIG_START( darkmist, darkmist_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80,4000000) /* ? MHz */ MCFG_CPU_PROGRAM_MAP(memmap) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkmist_state, darkmist_scanline, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", darkmist_state, scanline, "screen", 0, 1) - MCFG_T5182_ADD("t5182") - MCFG_FRAGMENT_ADD(t5182) + MCFG_DEVICE_ADD("t5182", T5182, 0) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -241,7 +237,7 @@ static MACHINE_CONFIG_START( darkmist, darkmist_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) - MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update_darkmist) + MCFG_SCREEN_UPDATE_DRIVER(darkmist_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", darkmist) @@ -266,9 +262,8 @@ ROM_START( darkmist ) ROM_LOAD( "dm_16.rom", 0x10000, 0x08000, CRC(094579d9) SHA1(2449bc9ba38396912ee9b72dd870ea9fcff95776) ) - ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ - ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) - ROM_LOAD( "dm_17.rom", 0x8000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) ) + ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ + ROM_LOAD( "dm_17.rom", 0x0000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) ) ROM_REGION( 0x4000, "gfx1", 0 ) ROM_LOAD( "dm_13.rom", 0x00000, 0x02000, CRC(38bb38d9) SHA1(d751990166dd3d503c5de7667679b96210061cd1) ) @@ -395,7 +390,7 @@ void darkmist_state::decrypt_snd() int i; UINT8 *ROM = memregion("t5182_z80")->base(); - for(i=0x8000;i<0x10000;i++) + for(i=0x0000;i<0x2000;i++) ROM[i] = BITSWAP8(ROM[i], 7,1,2,3,4,5,6,0); } @@ -473,4 +468,4 @@ DRIVER_INIT_MEMBER(darkmist_state,darkmist) } } -GAME( 1986, darkmist, 0, darkmist, darkmist, darkmist_state, darkmist, ROT270, "Taito Corporation", "The Lost Castle In Darkmist", GAME_IMPERFECT_GRAPHICS|GAME_NO_COCKTAIL ) +GAME( 1986, darkmist, 0, darkmist, darkmist, darkmist_state, darkmist, ROT270, "Taito Corporation", "The Lost Castle In Darkmist", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/mustache.c b/src/mame/drivers/mustache.c index 5b25748231c..d05861653c3 100644 --- a/src/mame/drivers/mustache.c +++ b/src/mame/drivers/mustache.c @@ -43,7 +43,7 @@ YM2151: static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, mustache_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(mustache_videoram_w) AM_SHARE("videoram") + AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w) AM_RANGE(0xd001, 0xd001) AM_DEVREAD("t5182", t5182_device, sharedram_semaphore_snd_r) AM_RANGE(0xd002, 0xd002) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_main_acquire_w) @@ -54,8 +54,8 @@ static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, mustache_state ) AM_RANGE(0xd802, 0xd802) AM_READ_PORT("START") AM_RANGE(0xd803, 0xd803) AM_READ_PORT("DSWA") AM_RANGE(0xd804, 0xd804) AM_READ_PORT("DSWB") - AM_RANGE(0xd806, 0xd806) AM_WRITE(mustache_scroll_w) - AM_RANGE(0xd807, 0xd807) AM_WRITE(mustache_video_control_w) + AM_RANGE(0xd806, 0xd806) AM_WRITE(scroll_w) + AM_RANGE(0xd807, 0xd807) AM_WRITE(video_control_w) AM_RANGE(0xe800, 0xefff) AM_WRITEONLY AM_SHARE("spriteram") AM_RANGE(0xf000, 0xffff) AM_RAM ADDRESS_MAP_END @@ -123,9 +123,6 @@ static INPUT_PORTS_START( mustache ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // There is an 8th dipswitch here, which controls screen flip, but the operator sheet implies it does it via hardware, i.e. not readable by cpu. May need further investigation. - PORT_START(T5182COINPORT) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) INPUT_PORTS_END @@ -155,7 +152,7 @@ static GFXDECODE_START( mustache ) GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x80, 8 ) GFXDECODE_END -TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::mustache_scanline) +TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::scanline) { int scanline = param; @@ -173,10 +170,10 @@ static MACHINE_CONFIG_START( mustache, mustache_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) MCFG_CPU_PROGRAM_MAP(memmap) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mustache_state, mustache_scanline, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", mustache_state, scanline, "screen", 0, 1) + + MCFG_DEVICE_ADD("t5182", T5182, 0) - MCFG_T5182_ADD("t5182") - MCFG_FRAGMENT_ADD(t5182) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -184,7 +181,7 @@ static MACHINE_CONFIG_START( mustache, mustache_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0, 31*8-1) - MCFG_SCREEN_UPDATE_DRIVER(mustache_state, screen_update_mustache) + MCFG_SCREEN_UPDATE_DRIVER(mustache_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", mustache) @@ -207,9 +204,8 @@ ROM_START( mustache ) ROM_LOAD( "mustache.h18", 0x0000, 0x8000, CRC(123bd9b8) SHA1(33a7cba5c3a54b0b1a15dd1e24d298b6f7274321) ) ROM_LOAD( "mustache.h16", 0x8000, 0x4000, CRC(62552beb) SHA1(ee10991d7de0596608fa1db48805781cbfbbdb9f) ) - ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ - ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) - ROM_LOAD( "mustache.e5", 0x8000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) ) + ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ + ROM_LOAD( "mustache.e5", 0x0000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) ) ROM_REGION( 0x0c000, "gfx1",0) /* BG tiles */ ROM_LOAD( "mustache.a13", 0x0000, 0x4000, CRC(9baee4a7) SHA1(31bcec838789462e67e54ebe7256db9fc4e51b69) ) @@ -278,4 +274,4 @@ DRIVER_INIT_MEMBER(mustache_state,mustache) } -GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", 0 ) +GAME( 1987, mustache, 0, mustache, mustache, mustache_state, mustache, ROT90, "Seibu Kaihatsu (March license)", "Mustache Boy", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/panicr.c b/src/mame/drivers/panicr.c index 8b9216e8233..196ca627634 100644 --- a/src/mame/drivers/panicr.c +++ b/src/mame/drivers/panicr.c @@ -69,58 +69,58 @@ class panicr_state : public driver_device public: panicr_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_mainram(*this, "mainram"), - m_spriteram(*this, "spriteram"), - m_textram(*this, "textram"), - m_spritebank(*this, "spritebank"), m_maincpu(*this, "maincpu"), m_t5182(*this, "t5182"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } - - required_shared_ptr m_mainram; - required_shared_ptr m_spriteram; - required_shared_ptr m_textram; - required_shared_ptr m_spritebank; + m_palette(*this, "palette"), + m_mainram(*this, "mainram"), + m_spriteram(*this, "spriteram"), + m_textram(*this, "textram"), + m_spritebank(*this, "spritebank") { } required_device m_maincpu; required_device m_t5182; required_device m_gfxdecode; required_device m_screen; required_device m_palette; + + required_shared_ptr m_mainram; + required_shared_ptr m_spriteram; + required_shared_ptr m_textram; + required_shared_ptr m_spritebank; tilemap_t *m_bgtilemap; tilemap_t *m_infotilemap_2; - tilemap_t *m_txttilemap; + int m_scrollx; + bitmap_ind16 *m_temprender; + bitmap_ind16 *m_tempbitmap_1; + rectangle m_tempbitmap_clip; - DECLARE_READ8_MEMBER(panicr_collision_r); - DECLARE_WRITE8_MEMBER(panicr_scrollx_lo_w); - DECLARE_WRITE8_MEMBER(panicr_scrollx_hi_w); - DECLARE_WRITE8_MEMBER(panicr_output_w); + DECLARE_READ8_MEMBER(collision_r); + DECLARE_WRITE8_MEMBER(scrollx_lo_w); + DECLARE_WRITE8_MEMBER(scrollx_hi_w); + DECLARE_WRITE8_MEMBER(output_w); DECLARE_READ8_MEMBER(t5182shared_r); DECLARE_WRITE8_MEMBER(t5182shared_w); - DECLARE_DRIVER_INIT(panicr); TILE_GET_INFO_MEMBER(get_bgtile_info); TILE_GET_INFO_MEMBER(get_infotile_info); TILE_GET_INFO_MEMBER(get_infotile_info_2); TILE_GET_INFO_MEMBER(get_infotile_info_3); TILE_GET_INFO_MEMBER(get_infotile_info_4); - TILE_GET_INFO_MEMBER(get_txttile_info); + + DECLARE_DRIVER_INIT(panicr); virtual void video_start(); DECLARE_PALETTE_INIT(panicr); - UINT32 screen_update_panicr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(panicr_scanline); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ); - - bitmap_ind16 *m_temprender; - - bitmap_ind16 *m_tempbitmap_1; - rectangle m_tempbitmap_clip; + + TIMER_DEVICE_CALLBACK_MEMBER(scanline); }; @@ -243,11 +243,12 @@ void panicr_state::video_start() m_txttilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(panicr_state::get_txttile_info),this),TILEMAP_SCAN_ROWS,8,8,32,32 ); m_txttilemap->configure_groups(*m_gfxdecode->gfx(0), 0); + + save_item(NAME(m_scrollx)); } void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ) { - UINT8 *spriteram = m_spriteram; int offs,flipx,flipy,x,y,color,sprite; @@ -256,24 +257,24 @@ void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ) for (offs = m_spriteram.bytes() - 16; offs>=0; offs-=16) { flipx = 0; - flipy = spriteram[offs+1] & 0x80; - y = spriteram[offs+2]; - x = spriteram[offs+3]; - if (spriteram[offs+1] & 0x40) x -= 0x100; + flipy = m_spriteram[offs+1] & 0x80; + y = m_spriteram[offs+2]; + x = m_spriteram[offs+3]; + if (m_spriteram[offs+1] & 0x40) x -= 0x100; - if (spriteram[offs+1] & 0x20) + if (m_spriteram[offs+1] & 0x20) { // often set } - if (spriteram[offs+1] & 0x10) + if (m_spriteram[offs+1] & 0x10) { - popmessage("(spriteram[offs+1] & 0x10) %02x\n", (spriteram[offs+1] & 0x10)); + popmessage("(spriteram[offs+1] & 0x10) %02x\n", (m_spriteram[offs+1] & 0x10)); } - color = spriteram[offs+1] & 0x0f; - sprite = spriteram[offs+0] | (*m_spritebank << 8); + color = m_spriteram[offs+1] & 0x0f; + sprite = m_spriteram[offs+0] | (*m_spritebank << 8); m_gfxdecode->gfx(2)->transmask(bitmap,cliprect, sprite, @@ -282,7 +283,7 @@ void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect ) } } -UINT32 panicr_state::screen_update_panicr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 panicr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bgtilemap->set_scrollx(0, m_scrollx); m_bgtilemap->draw(screen, *m_temprender, m_tempbitmap_clip, 0,0); @@ -341,7 +342,7 @@ UINT32 panicr_state::screen_update_panicr(screen_device &screen, bitmap_ind16 &b ***************************************************************************/ -READ8_MEMBER(panicr_state::panicr_collision_r) +READ8_MEMBER(panicr_state::collision_r) { // re-render the collision data here // collisions are based on 2 bits from the tile data, relative to a page of tiles @@ -384,25 +385,25 @@ READ8_MEMBER(panicr_state::panicr_collision_r) } -WRITE8_MEMBER(panicr_state::panicr_scrollx_lo_w) +WRITE8_MEMBER(panicr_state::scrollx_lo_w) { - logerror("panicr_scrollx_lo_w %02x\n", data); + logerror("scrollx_lo_w %02x\n", data); m_scrollx = (m_scrollx & 0xff00) | (data << 1 & 0xfe) | (data >> 7 & 0x01); } -WRITE8_MEMBER(panicr_state::panicr_scrollx_hi_w) +WRITE8_MEMBER(panicr_state::scrollx_hi_w) { - logerror("panicr_scrollx_hi_w %02x\n", data); + logerror("scrollx_hi_w %02x\n", data); m_scrollx = (m_scrollx & 0xff) | ((data &0xf0) << 4) | ((data & 0x0f) << 12); } -WRITE8_MEMBER(panicr_state::panicr_output_w) +WRITE8_MEMBER(panicr_state::output_w) { // d6, d7: play counter? (it only triggers on 1st coin) coin_counter_w(machine(), 0, (data & 0x40) ? 1 : 0); coin_counter_w(machine(), 1, (data & 0x80) ? 1 : 0); - logerror("panicr_output_w %02x\n", data); + logerror("output_w %02x\n", data); // other bits: ? } @@ -426,7 +427,7 @@ static ADDRESS_MAP_START( panicr_map, AS_PROGRAM, 8, panicr_state ) AM_RANGE(0x00000, 0x01fff) AM_RAM AM_SHARE("mainram") AM_RANGE(0x02000, 0x03cff) AM_RAM AM_SHARE("spriteram") // how big is sprite ram, some places definitely have sprites at 3000+ AM_RANGE(0x03d00, 0x03fff) AM_RAM - AM_RANGE(0x08000, 0x0bfff) AM_READ(panicr_collision_r) + AM_RANGE(0x08000, 0x0bfff) AM_READ(collision_r) AM_RANGE(0x0c000, 0x0cfff) AM_RAM AM_SHARE("textram") AM_RANGE(0x0d000, 0x0d000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w) AM_RANGE(0x0d002, 0x0d002) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_main_acquire_w) @@ -438,9 +439,9 @@ static ADDRESS_MAP_START( panicr_map, AS_PROGRAM, 8, panicr_state ) AM_RANGE(0x0d404, 0x0d404) AM_READ_PORT("START") AM_RANGE(0x0d406, 0x0d406) AM_READ_PORT("DSW1") AM_RANGE(0x0d407, 0x0d407) AM_READ_PORT("DSW2") - AM_RANGE(0x0d802, 0x0d802) AM_WRITE(panicr_scrollx_hi_w) - AM_RANGE(0x0d804, 0x0d804) AM_WRITE(panicr_scrollx_lo_w) - AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(panicr_output_w) + AM_RANGE(0x0d802, 0x0d802) AM_WRITE(scrollx_hi_w) + AM_RANGE(0x0d804, 0x0d804) AM_WRITE(scrollx_lo_w) + AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(output_w) AM_RANGE(0x0d80c, 0x0d80c) AM_WRITEONLY AM_SHARE("spritebank") AM_RANGE(0x0d818, 0x0d818) AM_WRITENOP // watchdog? AM_RANGE(0xf0000, 0xfffff) AM_ROM @@ -519,9 +520,6 @@ static INPUT_PORTS_START( panicr ) PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) - PORT_START(T5182COINPORT) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(2) INPUT_PORTS_END @@ -594,7 +592,7 @@ static GFXDECODE_START( panicr ) GFXDECODE_END -TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::panicr_scanline) +TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::scanline) { int scanline = param; @@ -608,10 +606,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::panicr_scanline) static MACHINE_CONFIG_START( panicr, panicr_state ) MCFG_CPU_ADD("maincpu", V20,MASTER_CLOCK/2) /* Sony 8623h9 CXQ70116D-8 (V20 compatible) */ MCFG_CPU_PROGRAM_MAP(panicr_map) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", panicr_state, panicr_scanline, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", panicr_state, scanline, "screen", 0, 1) - MCFG_T5182_ADD("t5182") - MCFG_FRAGMENT_ADD(t5182) + MCFG_DEVICE_ADD("t5182", T5182, 0) + MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -619,7 +617,7 @@ static MACHINE_CONFIG_START( panicr, panicr_state ) MCFG_SCREEN_SIZE(32*8, 32*8) // MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(panicr_state, screen_update_panicr) + MCFG_SCREEN_UPDATE_DRIVER(panicr_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", panicr) @@ -643,9 +641,8 @@ ROM_START( panicr ) ROM_LOAD16_BYTE("2.19m", 0x0f0000, 0x08000, CRC(3d48b0b5) SHA1(a6e8b38971a8964af463c16f32bb7dbd301dd314) ) ROM_LOAD16_BYTE("1.19n", 0x0f0001, 0x08000, CRC(674131b9) SHA1(63499cd5ad39e79e70f3ba7060680f0aa133f095) ) - ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ - ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) - ROM_LOAD( "22d.bin", 0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) + ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ + ROM_LOAD( "22d.bin", 0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) ROM_REGION( 0x04000, "gfx1", 0 ) ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) ) @@ -682,9 +679,8 @@ ROM_START( panicrg ) /* Distributed by TV-Tuning Videospiele GMBH */ ROM_LOAD16_BYTE("2g.19m", 0x0f0000, 0x08000, CRC(cf759403) SHA1(1a0911c943ecc752e46873c9a5da981745f7562d) ) ROM_LOAD16_BYTE("1g.19n", 0x0f0001, 0x08000, CRC(06877f9b) SHA1(8b92209d6422ff2b1f3cb66bd39a3ff84e399eec) ) - ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ - ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) - ROM_LOAD( "22d.bin", 0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) + ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */ + ROM_LOAD( "22d.bin", 0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) ) ROM_REGION( 0x04000, "gfx1", 0 ) ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) ) @@ -832,5 +828,5 @@ DRIVER_INIT_MEMBER(panicr_state,panicr) } -GAME( 1986, panicr, 0, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1986, panicrg, panicr, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1986, panicr, 0, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Taito license)", "Panic Road (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1986, panicrg, panicr, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/darkmist.h b/src/mame/includes/darkmist.h index 6424f21b4bb..91a5cf0a8c1 100644 --- a/src/mame/includes/darkmist.h +++ b/src/mame/includes/darkmist.h @@ -5,15 +5,20 @@ class darkmist_state : public driver_device public: darkmist_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_t5182(*this, "t5182"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), m_spritebank(*this, "spritebank"), m_scroll(*this, "scroll"), m_videoram(*this, "videoram"), m_workram(*this, "workram"), - m_spriteram(*this, "spriteram"), - m_maincpu(*this, "maincpu"), - m_t5182(*this, "t5182"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_spriteram(*this, "spriteram") { } + + required_device m_maincpu; + required_device m_t5182; + required_device m_gfxdecode; + required_device m_palette; required_shared_ptr m_spritebank; required_shared_ptr m_scroll; @@ -21,25 +26,24 @@ public: required_shared_ptr m_workram; required_shared_ptr m_spriteram; - required_device m_maincpu; - required_device m_t5182; - required_device m_gfxdecode; - required_device m_palette; - int m_hw; tilemap_t *m_bgtilemap; tilemap_t *m_fgtilemap; tilemap_t *m_txtilemap; - DECLARE_WRITE8_MEMBER(darkmist_hw_w); - DECLARE_DRIVER_INIT(darkmist); + DECLARE_WRITE8_MEMBER(hw_w); + TILE_GET_INFO_MEMBER(get_bgtile_info); TILE_GET_INFO_MEMBER(get_fgtile_info); TILE_GET_INFO_MEMBER(get_txttile_info); + + DECLARE_DRIVER_INIT(darkmist); virtual void video_start(); DECLARE_PALETTE_INIT(darkmist); - UINT32 screen_update_darkmist(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(darkmist_scanline); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void decrypt_gfx(); void decrypt_snd(); + + TIMER_DEVICE_CALLBACK_MEMBER(scanline); }; diff --git a/src/mame/includes/mustache.h b/src/mame/includes/mustache.h index 032ae100e28..f03205e72b4 100644 --- a/src/mame/includes/mustache.h +++ b/src/mame/includes/mustache.h @@ -5,16 +5,13 @@ class mustache_state : public driver_device public: mustache_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_spriteram(*this, "spriteram"), m_maincpu(*this, "maincpu"), m_cpu_decrypt(*this, "seibu_sound"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } - - required_shared_ptr m_videoram; - required_shared_ptr m_spriteram; + m_palette(*this, "palette"), + m_videoram(*this, "videoram"), + m_spriteram(*this, "spriteram") { } required_device m_maincpu; required_device m_cpu_decrypt; @@ -22,16 +19,24 @@ public: required_device m_screen; required_device m_palette; + required_shared_ptr m_videoram; + required_shared_ptr m_spriteram; + tilemap_t *m_bg_tilemap; int m_control_byte; - DECLARE_WRITE8_MEMBER(mustache_videoram_w); - DECLARE_WRITE8_MEMBER(mustache_video_control_w); - DECLARE_WRITE8_MEMBER(mustache_scroll_w); - DECLARE_DRIVER_INIT(mustache); + + DECLARE_WRITE8_MEMBER(videoram_w); + DECLARE_WRITE8_MEMBER(video_control_w); + DECLARE_WRITE8_MEMBER(scroll_w); + TILE_GET_INFO_MEMBER(get_bg_tile_info); + + DECLARE_DRIVER_INIT(mustache); virtual void video_start(); DECLARE_PALETTE_INIT(mustache); - UINT32 screen_update_mustache(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(mustache_scanline); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); + + TIMER_DEVICE_CALLBACK_MEMBER(scanline); }; diff --git a/src/mame/video/darkmist.c b/src/mame/video/darkmist.c index c9a0830f446..bd335d9bc03 100644 --- a/src/mame/video/darkmist.c +++ b/src/mame/video/darkmist.c @@ -48,11 +48,10 @@ TILE_GET_INFO_MEMBER(darkmist_state::get_fgtile_info) TILE_GET_INFO_MEMBER(darkmist_state::get_txttile_info) { - UINT8 *videoram = m_videoram; int code,attr,pal; - code=videoram[tile_index]; - attr=videoram[tile_index+0x400]; + code=m_videoram[tile_index]; + attr=m_videoram[tile_index+0x400]; pal=(attr>>1); code+=(attr&1)<<8; @@ -102,12 +101,13 @@ void darkmist_state::video_start() m_txtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(darkmist_state::get_txttile_info),this),TILEMAP_SCAN_ROWS,8,8,32,32 ); m_fgtilemap->set_transparent_pen(0); m_txtilemap->set_transparent_pen(0); + + save_item(NAME(m_hw)); } -UINT32 darkmist_state::screen_update_darkmist(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 darkmist_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - UINT8 *spriteram = m_spriteram; - + #define DM_GETSCROLL(n) (((m_scroll[(n)]<<1)&0xff) + ((m_scroll[(n)]&0x80)?1:0) +( ((m_scroll[(n)-1]<<4) | (m_scroll[(n)-1]<<12) )&0xff00)) m_bgtilemap->set_scrollx(0, DM_GETSCROLL(0x2)); @@ -139,17 +139,17 @@ UINT32 darkmist_state::screen_update_darkmist(screen_device &screen, bitmap_ind1 int i,fx,fy,tile,palette; for(i=0;i>1)&0xf; + palette=((m_spriteram[i+1])>>1)&0xf; - if(spriteram[i+1]&0x1) + if(m_spriteram[i+1]&0x1) palette=machine().rand()&15; palette+=32; @@ -160,7 +160,7 @@ UINT32 darkmist_state::screen_update_darkmist(screen_device &screen, bitmap_ind1 tile, palette, fx,fy, - spriteram[i+3],spriteram[i+2],0 ); + m_spriteram[i+3],m_spriteram[i+2],0 ); } } diff --git a/src/mame/video/mustache.c b/src/mame/video/mustache.c index 34bf0058512..ef900a60629 100644 --- a/src/mame/video/mustache.c +++ b/src/mame/video/mustache.c @@ -44,14 +44,13 @@ PALETTE_INIT_MEMBER(mustache_state, mustache) } } -WRITE8_MEMBER(mustache_state::mustache_videoram_w) +WRITE8_MEMBER(mustache_state::videoram_w) { - UINT8 *videoram = m_videoram; - videoram[offset] = data; + m_videoram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset / 2); } -WRITE8_MEMBER(mustache_state::mustache_video_control_w) +WRITE8_MEMBER(mustache_state::video_control_w) { if (flip_screen() != (data & 0x01)) { @@ -68,7 +67,7 @@ WRITE8_MEMBER(mustache_state::mustache_video_control_w) } } -WRITE8_MEMBER(mustache_state::mustache_scroll_w) +WRITE8_MEMBER(mustache_state::scroll_w) { m_bg_tilemap->set_scrollx(0, 0x100 - data); m_bg_tilemap->set_scrollx(1, 0x100 - data); @@ -78,9 +77,8 @@ WRITE8_MEMBER(mustache_state::mustache_scroll_w) TILE_GET_INFO_MEMBER(mustache_state::get_bg_tile_info) { - UINT8 *videoram = m_videoram; - int attr = videoram[2 * tile_index + 1]; - int code = videoram[2 * tile_index] + ((attr & 0x60) << 3) + ((m_control_byte & 0x08) << 7); + int attr = m_videoram[2 * tile_index + 1]; + int code = m_videoram[2 * tile_index] + ((attr & 0x60) << 3) + ((m_control_byte & 0x08) << 7); int color = attr & 0x0f; SET_TILE_INFO_MEMBER(0, code, color, ((attr & 0x10) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0) ); @@ -94,6 +92,8 @@ void mustache_state::video_start() 8, 8, 64, 32); m_bg_tilemap->set_scroll_rows(4); + + save_item(NAME(m_control_byte)); } void mustache_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ) @@ -101,15 +101,14 @@ void mustache_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec rectangle clip = cliprect; gfx_element *gfx = m_gfxdecode->gfx(1); const rectangle &visarea = m_screen->visible_area(); - UINT8 *spriteram = m_spriteram; int offs; for (offs = 0;offs < m_spriteram.bytes();offs += 4) { - int sy = 240-spriteram[offs]; - int sx = 240-spriteram[offs+3]; - int code = spriteram[offs+2]; - int attr = spriteram[offs+1]; + int sy = 240-m_spriteram[offs]; + int sx = 240-m_spriteram[offs+3]; + int code = m_spriteram[offs+2]; + int attr = m_spriteram[offs+1]; int color = (attr & 0xe0)>>5; if (sy == 240) continue; @@ -138,7 +137,7 @@ void mustache_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec } } -UINT32 mustache_state::screen_update_mustache(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 mustache_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); draw_sprites(bitmap, cliprect); -- cgit v1.2.3 From 1393600c365bfe72d03f4c876a085518ef530cdf Mon Sep 17 00:00:00 2001 From: Guru Date: Sat, 7 Feb 2015 16:58:53 +0800 Subject: t5182.c: fix copy/paste error in comment and clarify where the original chip came from (nw) --- src/mame/audio/t5182.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mame/audio/t5182.c b/src/mame/audio/t5182.c index cb06d03b139..d547674403c 100644 --- a/src/mame/audio/t5182.c +++ b/src/mame/audio/t5182.c @@ -2,7 +2,7 @@ Toshiba T5182 die map, by Jonathan Gevaryahu AKA Lord Nightmare, with assistance from Kevin Horton. -T5182 supplied by Tomasz 'Dox' Slanina +T5182 supplied by Tomasz 'Dox' Slanina which came from a Dark Mist PCB bought by Guru Die Diagram: |------------------------| @@ -284,7 +284,7 @@ READ8_MEMBER(t5182_device::sharedram_semaphore_main_r) return m_semaphore_main | (m_irqstate & 2); } -// ROM definition for the QS1000 internal program ROM +// ROM definition for the Toshiba T5182 Custom CPU internal program ROM ROM_START( t5182 ) ROM_REGION( 0x2000, "cpu", 0 ) ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) -- cgit v1.2.3 From 74e497511013d6e9406f6bb98ec6ffa35fb89947 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 7 Feb 2015 10:57:22 +0100 Subject: buggychl: enabled save state support, everything was already taken care for (nw) --- src/mame/drivers/buggychl.c | 4 ++-- src/mame/video/buggychl.c | 21 ++++++++------------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/mame/drivers/buggychl.c b/src/mame/drivers/buggychl.c index 32d7d5825c4..eb2dc97303b 100644 --- a/src/mame/drivers/buggychl.c +++ b/src/mame/drivers/buggychl.c @@ -482,5 +482,5 @@ ROM_START( buggychlt ) ROM_END -GAMEL( 1984, buggychl, 0, buggychl, buggychl, driver_device, 0, ROT270, "Taito Corporation", "Buggy Challenge", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS, layout_buggychl ) -GAMEL( 1984, buggychlt,buggychl, buggychl, buggychl, driver_device, 0, ROT270, "Taito Corporation (Tecfri license)", "Buggy Challenge (Tecfri)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS, layout_buggychl ) +GAMEL( 1984, buggychl, 0, buggychl, buggychl, driver_device, 0, ROT270, "Taito Corporation", "Buggy Challenge", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE, layout_buggychl ) +GAMEL( 1984, buggychlt,buggychl, buggychl, buggychl, driver_device, 0, ROT270, "Taito Corporation (Tecfri license)", "Buggy Challenge (Tecfri)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS| GAME_SUPPORTS_SAVE, layout_buggychl ) diff --git a/src/mame/video/buggychl.c b/src/mame/video/buggychl.c index 16a6a4ed07d..69c6eb36f56 100644 --- a/src/mame/video/buggychl.c +++ b/src/mame/video/buggychl.c @@ -4,10 +4,8 @@ PALETTE_INIT_MEMBER(buggychl_state, buggychl) { - int i; - /* arbitrary blue shading for the sky, estimation */ - for (i = 0; i < 128; i++) + for (int i = 0; i < 128; i++) palette.set_pen_color(i + 128, rgb_t(0, 240-i, 255)); } @@ -75,10 +73,8 @@ WRITE8_MEMBER(buggychl_state::buggychl_bg_scrollx_w) void buggychl_state::draw_sky( bitmap_ind16 &bitmap, const rectangle &cliprect ) { - int x, y; - - for (y = 0; y < 256; y++) - for (x = 0; x < 256; x++) + for (int y = 0; y < 256; y++) + for (int x = 0; x < 256; x++) bitmap.pix16(y, x) = 128 + x / 2; } @@ -156,7 +152,6 @@ void buggychl_state::draw_fg( bitmap_ind16 &bitmap, const rectangle &cliprect ) void buggychl_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) { - UINT8 *spriteram = m_spriteram; int offs; const UINT8 *gfx; @@ -169,14 +164,14 @@ void buggychl_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre const UINT8 *lookup; const UINT8 *zoomx_rom, *zoomy_rom; - sx = spriteram[offs + 3] - ((spriteram[offs + 2] & 0x80) << 1); - sy = 256 - 64 - spriteram[offs] + ((spriteram[offs + 1] & 0x80) << 1); - flipy = spriteram[offs + 1] & 0x40; - zoom = spriteram[offs + 1] & 0x3f; + sx = m_spriteram[offs + 3] - ((m_spriteram[offs + 2] & 0x80) << 1); + sy = 256 - 64 - m_spriteram[offs] + ((m_spriteram[offs + 1] & 0x80) << 1); + flipy = m_spriteram[offs + 1] & 0x40; + zoom = m_spriteram[offs + 1] & 0x3f; zoomy_rom = gfx + (zoom << 6); zoomx_rom = gfx + 0x2000 + (zoom << 3); - lookup = m_sprite_lookup + ((spriteram[offs + 2] & 0x7f) << 6); + lookup = m_sprite_lookup + ((m_spriteram[offs + 2] & 0x7f) << 6); for (y = 0; y < 64; y++) { -- cgit v1.2.3 From d35b80ca0610f329c41c22c047e47c618a973fb0 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Sat, 7 Feb 2015 11:24:10 +0100 Subject: huh? (nw) --- src/lib/formats/flex_dsk.c | 10 ++++++---- src/lib/formats/flex_dsk.h | 7 ++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/lib/formats/flex_dsk.c b/src/lib/formats/flex_dsk.c index 4f1a73bb0b9..975cf246ecf 100644 --- a/src/lib/formats/flex_dsk.c +++ b/src/lib/formats/flex_dsk.c @@ -7,7 +7,7 @@ #include "emu.h" #include "flex_dsk.h" -flex_format::flex_format() : wd177x_format(formats) +flex_format::flex_format() { } @@ -26,6 +26,11 @@ const char *flex_format::extensions() const return "dsk"; } +bool flex_format::supports_save() const +{ + return true; +} + int flex_format::identify(io_generic *io, UINT32 form_factor) { io_generic_read(io, &info, 256 * 2, sizeof(struct sysinfo_sector)); @@ -97,7 +102,4 @@ bool flex_format::load(io_generic *io, UINT32 form_factor, floppy_image *image) return true; } -// Empty since geometry is determined from the disk image itself -const flex_format::format flex_format::formats[] = { {} }; - const floppy_format_type FLOPPY_FLEX_FORMAT = &floppy_image_format_creator; diff --git a/src/lib/formats/flex_dsk.h b/src/lib/formats/flex_dsk.h index b8c8d66318a..9348fecd5db 100644 --- a/src/lib/formats/flex_dsk.h +++ b/src/lib/formats/flex_dsk.h @@ -7,9 +7,9 @@ #ifndef FLEX_DSK_H_ #define FLEX_DSK_H_ -#include "wd177x_dsk.h" +#include "flopimg.h" -class flex_format : public wd177x_format { +class flex_format : public floppy_image_format_t { public: flex_format(); @@ -18,6 +18,8 @@ public: virtual const char *extensions() const; virtual int identify(io_generic *io, UINT32 form_factor); virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image); + virtual bool supports_save() const; + private: struct sysinfo_sector { @@ -37,7 +39,6 @@ private: UINT8 last_sec; UINT8 unused2[216]; } info; - static const format formats[]; }; extern const floppy_format_type FLOPPY_FLEX_FORMAT; -- cgit v1.2.3 From b2a19b6a68bd17ef95fa2426379e982d85629167 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Sat, 7 Feb 2015 11:27:43 +0100 Subject: Kale, does that break c65? (nw) --- src/emu/cpu/m6502/m6502.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/emu/cpu/m6502/m6502.h b/src/emu/cpu/m6502/m6502.h index 9ca5e08fdda..f77a33f6ae8 100644 --- a/src/emu/cpu/m6502/m6502.h +++ b/src/emu/cpu/m6502/m6502.h @@ -220,8 +220,8 @@ protected: // inline helpers static inline bool page_changing(UINT16 base, int delta) { return ((base + delta) ^ base) & 0xff00; } - static inline UINT16 set_l(UINT16 base, UINT16 val) { return (base & 0xff00) | val; } - static inline UINT16 set_h(UINT16 base, UINT16 val) { return (base & 0x00ff) | (val << 8); } + static inline UINT16 set_l(UINT16 base, UINT8 val) { return (base & 0xff00) | val; } + static inline UINT16 set_h(UINT16 base, UINT8 val) { return (base & 0x00ff) | (val << 8); } inline void dec_SP() { SP = set_l(SP, SP-1); } inline void inc_SP() { SP = set_l(SP, SP+1); } -- cgit v1.2.3 From e8b4785baa26654c5c7a78611bc03d6c8ee68460 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 7 Feb 2015 12:20:07 +0100 Subject: added tomy tennis skeleton driver --- src/emu/cpu/ucom4/ucom4.c | 2 +- src/emu/cpu/ucom4/ucom4d.c | 2 +- src/mess/drivers/tmtennis.c | 101 +++++++++++++++++++++++++++++++++++++++++++ src/mess/layout/tmtennis.lay | 19 ++++++++ src/mess/mess.lst | 1 + src/mess/mess.mak | 2 + 6 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 src/mess/drivers/tmtennis.c create mode 100644 src/mess/layout/tmtennis.lay diff --git a/src/emu/cpu/ucom4/ucom4.c b/src/emu/cpu/ucom4/ucom4.c index 3796394b5ec..0734cac425f 100644 --- a/src/emu/cpu/ucom4/ucom4.c +++ b/src/emu/cpu/ucom4/ucom4.c @@ -142,7 +142,7 @@ void ucom4_cpu_device::device_start() state_add(UCOM4_ACC, "ACC", m_acc).formatstr("%01X"); state_add(STATE_GENPC, "curpc", m_pc).formatstr("%04X").noshow(); -// state_add(STATE_GENFLAGS, "GENFLAGS", m_flags).formatstr("%4s").noshow(); + state_add(STATE_GENFLAGS, "GENFLAGS", m_carry_f).formatstr("%4s").noshow(); // dummy m_icountptr = &m_icount; } diff --git a/src/emu/cpu/ucom4/ucom4d.c b/src/emu/cpu/ucom4/ucom4d.c index 0663cfe4690..bfbdd7da43a 100644 --- a/src/emu/cpu/ucom4/ucom4d.c +++ b/src/emu/cpu/ucom4/ucom4d.c @@ -13,7 +13,7 @@ CPU_DISASSEMBLE(ucom4) { - int pos = 0; + int pos = 1;//0; // UINT8 op = oprom[pos++]; // UINT8 instr = ucom4_mnemonic[op]; diff --git a/src/mess/drivers/tmtennis.c b/src/mess/drivers/tmtennis.c new file mode 100644 index 00000000000..7e4a2fed938 --- /dev/null +++ b/src/mess/drivers/tmtennis.c @@ -0,0 +1,101 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/*************************************************************************** + + Tomy Tennis (manufactured in Japan) + * board labeled TOMY TN-04 TENNIS + * NEC uCOM-44 MCU, labeled D552C 048 + * VFD display NEC FIP11AM15T (FIP=fluorescent indicator panel) + + +***************************************************************************/ + +#include "emu.h" +#include "cpu/ucom4/ucom4.h" +#include "sound/speaker.h" + +#include "tmtennis.lh" + +// master clock is from an LC circuit oscillating by default at 360kHz, +// the difficulty switch puts a capacitor across it to slow it down to 260kHz +#define MASTER_CLOCK_PRO1 (260000) +#define MASTER_CLOCK_PRO2 (360000) + + +class tmtennis_state : public driver_device +{ +public: + tmtennis_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_speaker(*this, "speaker") + { } + + required_device m_maincpu; + required_device m_speaker; + + virtual void machine_start(); +}; + + + +/*************************************************************************** + + I/O + +***************************************************************************/ + + + +/*************************************************************************** + + Inputs + +***************************************************************************/ + +static INPUT_PORTS_START( tmtennis ) +INPUT_PORTS_END + + + +/*************************************************************************** + + Machine Config + +***************************************************************************/ + +void tmtennis_state::machine_start() +{ +} + + +static MACHINE_CONFIG_START( tmtennis, tmtennis_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", NEC_D552, MASTER_CLOCK_PRO2) + + MCFG_DEFAULT_LAYOUT(layout_tmtennis) + + /* no video! */ + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + + + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +ROM_START( tmtennis ) + ROM_REGION( 0x0400, "maincpu", 0 ) + ROM_LOAD( "d552c-048", 0x0000, 0x0400, CRC(78702003) SHA1(4d427d4dbeed901770c682338867f58c7b54eee3) ) +ROM_END + + +CONS( 1980, tmtennis, 0, 0, tmtennis, tmtennis, driver_device, 0, "Tomy", "Tomytronic Tennis", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) diff --git a/src/mess/layout/tmtennis.lay b/src/mess/layout/tmtennis.lay new file mode 100644 index 00000000000..53a7103aec7 --- /dev/null +++ b/src/mess/layout/tmtennis.lay @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/mess/mess.lst b/src/mess/mess.lst index ded9c5d7240..8bc6a22f593 100644 --- a/src/mess/mess.lst +++ b/src/mess/mess.lst @@ -2609,3 +2609,4 @@ bitgrphb unk3403 elecdet wildfire +tmtennis diff --git a/src/mess/mess.mak b/src/mess/mess.mak index 219ecccc47e..20f76a52dca 100644 --- a/src/mess/mess.mak +++ b/src/mess/mess.mak @@ -1788,6 +1788,7 @@ $(MESSOBJ)/tiki.a: \ $(MESS_DRIVERS)/tiki100.o \ $(MESSOBJ)/tomy.a: \ + $(MESS_DRIVERS)/tmtennis.o \ $(MESS_DRIVERS)/tutor.o \ $(MESSOBJ)/toshiba.a: \ @@ -2208,6 +2209,7 @@ $(MESS_DRIVERS)/tispeak.o: $(MESS_LAYOUT)/lantutor.lh \ $(MESS_DRIVERS)/tk80.o: $(MESS_LAYOUT)/tk80.lh $(MESS_DRIVERS)/tm990189.o: $(MESS_LAYOUT)/tm990189.lh \ $(MESS_LAYOUT)/tm990189v.lh +$(MESS_DRIVERS)/tmtennis.o: $(MESS_LAYOUT)/tmtennis.lh $(MESS_DRIVERS)/unixpc.o: $(MESS_LAYOUT)/unixpc.lh $(MESS_DRIVERS)/ut88.o: $(MESS_LAYOUT)/ut88mini.lh $(MESS_DRIVERS)/vboy.o: $(MESS_LAYOUT)/vboy.lh -- cgit v1.2.3