This commit is contained in:
Robbbert 2015-02-07 23:50:27 +11:00
commit 68af4f9b5f
20 changed files with 385 additions and 230 deletions

View File

@ -220,8 +220,8 @@ protected:
// inline helpers // inline helpers
static inline bool page_changing(UINT16 base, int delta) { return ((base + delta) ^ base) & 0xff00; } 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_l(UINT16 base, UINT8 val) { return (base & 0xff00) | val; }
static inline UINT16 set_h(UINT16 base, UINT16 val) { return (base & 0x00ff) | (val << 8); } 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 dec_SP() { SP = set_l(SP, SP-1); }
inline void inc_SP() { SP = set_l(SP, SP+1); } inline void inc_SP() { SP = set_l(SP, SP+1); }

View File

@ -142,7 +142,7 @@ void ucom4_cpu_device::device_start()
state_add(UCOM4_ACC, "ACC", m_acc).formatstr("%01X"); state_add(UCOM4_ACC, "ACC", m_acc).formatstr("%01X");
state_add(STATE_GENPC, "curpc", m_pc).formatstr("%04X").noshow(); 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; m_icountptr = &m_icount;
} }

View File

@ -13,7 +13,7 @@
CPU_DISASSEMBLE(ucom4) CPU_DISASSEMBLE(ucom4)
{ {
int pos = 0; int pos = 1;//0;
// UINT8 op = oprom[pos++]; // UINT8 op = oprom[pos++];
// UINT8 instr = ucom4_mnemonic[op]; // UINT8 instr = ucom4_mnemonic[op];

View File

@ -7,7 +7,7 @@
#include "emu.h" #include "emu.h"
#include "flex_dsk.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"; return "dsk";
} }
bool flex_format::supports_save() const
{
return true;
}
int flex_format::identify(io_generic *io, UINT32 form_factor) int flex_format::identify(io_generic *io, UINT32 form_factor)
{ {
io_generic_read(io, &info, 256 * 2, sizeof(struct sysinfo_sector)); 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; 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<flex_format>; const floppy_format_type FLOPPY_FLEX_FORMAT = &floppy_image_format_creator<flex_format>;

View File

@ -7,9 +7,9 @@
#ifndef FLEX_DSK_H_ #ifndef FLEX_DSK_H_
#define 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: public:
flex_format(); flex_format();
@ -18,6 +18,8 @@ public:
virtual const char *extensions() const; virtual const char *extensions() const;
virtual int identify(io_generic *io, UINT32 form_factor); virtual int identify(io_generic *io, UINT32 form_factor);
virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image); virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image);
virtual bool supports_save() const;
private: private:
struct sysinfo_sector struct sysinfo_sector
{ {
@ -37,7 +39,6 @@ private:
UINT8 last_sec; UINT8 last_sec;
UINT8 unused2[216]; UINT8 unused2[216];
} info; } info;
static const format formats[];
}; };
extern const floppy_format_type FLOPPY_FLEX_FORMAT; extern const floppy_format_type FLOPPY_FLEX_FORMAT;

View File

@ -2,7 +2,7 @@
Toshiba T5182 die map, by Jonathan Gevaryahu AKA Lord Nightmare, Toshiba T5182 die map, by Jonathan Gevaryahu AKA Lord Nightmare,
with assistance from Kevin Horton. 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: Die Diagram:
|------------------------| |------------------------|
@ -152,23 +152,15 @@ rom.
const device_type T5182 = &device_creator<t5182_device>; const device_type T5182 = &device_creator<t5182_device>;
t5182_device::t5182_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) 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__), : device_t(mconfig, T5182, "T5182 MCU", tag, owner, clock, "t5182", __FILE__),
m_t5182_sharedram(NULL), m_ourcpu(*this, "t5182_z80"),
m_sharedram(*this, "sharedram"),
m_irqstate(0), m_irqstate(0),
m_semaphore_main(0), m_semaphore_main(0),
m_semaphore_snd(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 // device_start - device-specific startup
@ -176,24 +168,21 @@ void t5182_device::device_config_complete()
void t5182_device::device_start() void t5182_device::device_start()
{ {
m_t5182_sharedram = reinterpret_cast<UINT8 *>(machine().root_device().memshare("t5182_sharedram")->ptr()); m_setirq_cb = timer_alloc(SETIRQ_CB);
save_pointer(NAME(m_t5182_sharedram), sizeof(UINT8));
save_item(NAME(m_irqstate)); save_item(NAME(m_irqstate));
save_item(NAME(m_semaphore_main)); save_item(NAME(m_semaphore_main));
save_item(NAME(m_semaphore_snd)); save_item(NAME(m_semaphore_snd));
m_ourcpu = machine().device<cpu_device>("t5182_z80");
} }
READ8_MEMBER(t5182_device::sharedram_r) READ8_MEMBER(t5182_device::sharedram_r)
{ {
return m_t5182_sharedram[offset]; return m_sharedram[offset];
} }
WRITE8_MEMBER(t5182_device::sharedram_w) WRITE8_MEMBER(t5182_device::sharedram_w)
{ {
m_t5182_sharedram[offset] = data; m_sharedram[offset] = data;
} }
TIMER_CALLBACK_MEMBER( t5182_device::setirq_callback ) 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); 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 ) 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 ) 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 ) 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) WRITE_LINE_MEMBER(t5182_device::ym2151_irq_handler)
{ {
if (state) if (state)
machine().scheduler().synchronize(timer_expired_delegate(FUNC(t5182_device::setirq_callback), this), YM2151_ASSERT); synchronize(SETIRQ_CB, YM2151_ASSERT);
else 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) 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); return m_semaphore_main | (m_irqstate & 2);
} }
// 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) )
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 );
}
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
//-------------------------------------------------
// input_ports - return a pointer to the implicit
// input ports description for this device
//------------------------------------------------- //-------------------------------------------------
MACHINE_CONFIG_FRAGMENT( t5182 ) ioport_constructor t5182_device::device_input_ports() const
MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK) {
MCFG_CPU_PROGRAM_MAP(t5182_map) return INPUT_PORTS_NAME(t5182);
MCFG_CPU_IO_MAP(t5182_io) }
MACHINE_CONFIG_END
// 4000-407F RAM shared with main CPU // 4000-407F RAM shared with main CPU
// 4000 output queue length // 4000 output queue length
@ -315,10 +334,10 @@ MACHINE_CONFIG_END
// A0XX // A0XX
// rest unused // rest unused
ADDRESS_MAP_START( t5182_map, AS_PROGRAM, 8, t5182_device ) 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(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(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 // external ROM AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(":t5182_z80", 0) // external ROM
ADDRESS_MAP_END 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) // 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_START( t5182_io, AS_IO, 8, t5182_device )
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) 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(0x10, 0x10) AM_WRITE(sharedram_semaphore_snd_acquire_w)
AM_RANGE(0x11, 0x11) AM_DEVWRITE("t5182", t5182_device, sharedram_semaphore_snd_release_w) AM_RANGE(0x11, 0x11) AM_WRITE(sharedram_semaphore_snd_release_w)
AM_RANGE(0x12, 0x12) AM_DEVWRITE("t5182", t5182_device, ym2151_irq_ack_w) AM_RANGE(0x12, 0x12) AM_WRITE(ym2151_irq_ack_w)
AM_RANGE(0x13, 0x13) AM_DEVWRITE("t5182", t5182_device, cpu_irq_ack_w) AM_RANGE(0x13, 0x13) AM_WRITE(cpu_irq_ack_w)
AM_RANGE(0x20, 0x20) AM_DEVREAD("t5182", t5182_device, sharedram_semaphore_main_r) AM_RANGE(0x20, 0x20) AM_READ(sharedram_semaphore_main_r)
AM_RANGE(0x30, 0x30) AM_READ_PORT(T5182COINPORT) AM_RANGE(0x30, 0x30) AM_READ_PORT("T5182_COIN")
ADDRESS_MAP_END 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 );
}

View File

@ -1,8 +1,6 @@
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#define T5182COINPORT "T5182_COIN"
class t5182_device : public device_t class t5182_device : public device_t
{ {
@ -20,6 +18,11 @@ public:
CPU_CLEAR CPU_CLEAR
}; };
enum
{
SETIRQ_CB
};
DECLARE_WRITE8_MEMBER(sound_irq_w ); DECLARE_WRITE8_MEMBER(sound_irq_w );
DECLARE_READ8_MEMBER(sharedram_semaphore_snd_r); DECLARE_READ8_MEMBER(sharedram_semaphore_snd_r);
DECLARE_WRITE8_MEMBER(sharedram_semaphore_main_acquire_w); DECLARE_WRITE8_MEMBER(sharedram_semaphore_main_acquire_w);
@ -35,26 +38,21 @@ public:
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete();
virtual void device_start(); 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: private:
// internal state // internal state
cpu_device *m_ourcpu; required_device<cpu_device> m_ourcpu;
UINT8 *m_t5182_sharedram; required_shared_ptr<UINT8> m_sharedram;
int m_irqstate; int m_irqstate;
int m_semaphore_main; int m_semaphore_main;
int m_semaphore_snd; int m_semaphore_snd;
emu_timer *m_setirq_cb;
TIMER_CALLBACK_MEMBER( setirq_callback ); TIMER_CALLBACK_MEMBER( setirq_callback );
}; };
extern const device_type T5182; 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)

View File

@ -482,5 +482,5 @@ ROM_START( buggychlt )
ROM_END 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, 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, 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 )

View File

@ -28,7 +28,7 @@ TODO:
#include "includes/darkmist.h" #include "includes/darkmist.h"
WRITE8_MEMBER(darkmist_state::darkmist_hw_w) WRITE8_MEMBER(darkmist_state::hw_w)
{ {
m_hw=data; m_hw=data;
membank("bank1")->set_base(&memregion("maincpu")->base()[0x010000+((data&0x80)?0x4000:0)]); 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(0xc801, 0xc801) AM_READ_PORT("P1")
AM_RANGE(0xc802, 0xc802) AM_READ_PORT("P2") AM_RANGE(0xc802, 0xc802) AM_READ_PORT("P2")
AM_RANGE(0xc803, 0xc803) AM_READ_PORT("START") 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(0xc805, 0xc805) AM_WRITEONLY AM_SHARE("spritebank")
AM_RANGE(0xc806, 0xc806) AM_READ_PORT("DSW1") AM_RANGE(0xc806, 0xc806) AM_READ_PORT("DSW1")
AM_RANGE(0xc807, 0xc807) AM_READ_PORT("DSW2") 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( 0x80, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) 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 INPUT_PORTS_END
static const gfx_layout charlayout = static const gfx_layout charlayout =
@ -213,7 +209,7 @@ static GFXDECODE_START( darkmist )
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0, 16*4 ) GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0, 16*4 )
GFXDECODE_END GFXDECODE_END
TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::darkmist_scanline) TIMER_DEVICE_CALLBACK_MEMBER(darkmist_state::scanline)
{ {
int scanline = param; int scanline = param;
@ -230,10 +226,10 @@ static MACHINE_CONFIG_START( darkmist, darkmist_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80,4000000) /* ? MHz */ MCFG_CPU_ADD("maincpu", Z80,4000000) /* ? MHz */
MCFG_CPU_PROGRAM_MAP(memmap) 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_DEVICE_ADD("t5182", T5182, 0)
MCFG_FRAGMENT_ADD(t5182)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) 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_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_SIZE(256, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-16-1) 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_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", darkmist) 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_LOAD( "dm_16.rom", 0x10000, 0x08000, CRC(094579d9) SHA1(2449bc9ba38396912ee9b72dd870ea9fcff95776) )
ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) ROM_LOAD( "dm_17.rom", 0x0000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) )
ROM_LOAD( "dm_17.rom", 0x8000, 0x8000, CRC(7723dcae) SHA1(a0c69e7a7b6fd74f7ed6b9c6419aed94aabcd4b0) )
ROM_REGION( 0x4000, "gfx1", 0 ) ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "dm_13.rom", 0x00000, 0x02000, CRC(38bb38d9) SHA1(d751990166dd3d503c5de7667679b96210061cd1) ) ROM_LOAD( "dm_13.rom", 0x00000, 0x02000, CRC(38bb38d9) SHA1(d751990166dd3d503c5de7667679b96210061cd1) )
@ -395,7 +390,7 @@ void darkmist_state::decrypt_snd()
int i; int i;
UINT8 *ROM = memregion("t5182_z80")->base(); 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); 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 )

View File

@ -43,7 +43,7 @@ YM2151:
static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, mustache_state ) static ADDRESS_MAP_START( memmap, AS_PROGRAM, 8, mustache_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) 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(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(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) 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(0xd802, 0xd802) AM_READ_PORT("START")
AM_RANGE(0xd803, 0xd803) AM_READ_PORT("DSWA") AM_RANGE(0xd803, 0xd803) AM_READ_PORT("DSWA")
AM_RANGE(0xd804, 0xd804) AM_READ_PORT("DSWB") AM_RANGE(0xd804, 0xd804) AM_READ_PORT("DSWB")
AM_RANGE(0xd806, 0xd806) AM_WRITE(mustache_scroll_w) AM_RANGE(0xd806, 0xd806) AM_WRITE(scroll_w)
AM_RANGE(0xd807, 0xd807) AM_WRITE(mustache_video_control_w) AM_RANGE(0xd807, 0xd807) AM_WRITE(video_control_w)
AM_RANGE(0xe800, 0xefff) AM_WRITEONLY AM_SHARE("spriteram") AM_RANGE(0xe800, 0xefff) AM_WRITEONLY AM_SHARE("spriteram")
AM_RANGE(0xf000, 0xffff) AM_RAM AM_RANGE(0xf000, 0xffff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -123,9 +123,6 @@ static INPUT_PORTS_START( mustache )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) 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. // 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 INPUT_PORTS_END
@ -155,7 +152,7 @@ static GFXDECODE_START( mustache )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x80, 8 ) GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x80, 8 )
GFXDECODE_END GFXDECODE_END
TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::mustache_scanline) TIMER_DEVICE_CALLBACK_MEMBER(mustache_state::scanline)
{ {
int scanline = param; int scanline = param;
@ -173,10 +170,10 @@ static MACHINE_CONFIG_START( mustache, mustache_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK)
MCFG_CPU_PROGRAM_MAP(memmap) 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 */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) 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_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0, 31*8-1) 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_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mustache) 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.h18", 0x0000, 0x8000, CRC(123bd9b8) SHA1(33a7cba5c3a54b0b1a15dd1e24d298b6f7274321) )
ROM_LOAD( "mustache.h16", 0x8000, 0x4000, CRC(62552beb) SHA1(ee10991d7de0596608fa1db48805781cbfbbdb9f) ) ROM_LOAD( "mustache.h16", 0x8000, 0x4000, CRC(62552beb) SHA1(ee10991d7de0596608fa1db48805781cbfbbdb9f) )
ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) ROM_LOAD( "mustache.e5", 0x0000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) )
ROM_LOAD( "mustache.e5", 0x8000, 0x8000, CRC(efbb1943) SHA1(3320e9eaeb776d09ed63f7dedc79e720674e6718) )
ROM_REGION( 0x0c000, "gfx1",0) /* BG tiles */ ROM_REGION( 0x0c000, "gfx1",0) /* BG tiles */
ROM_LOAD( "mustache.a13", 0x0000, 0x4000, CRC(9baee4a7) SHA1(31bcec838789462e67e54ebe7256db9fc4e51b69) ) 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 )

View File

@ -69,58 +69,58 @@ class panicr_state : public driver_device
public: public:
panicr_state(const machine_config &mconfig, device_type type, const char *tag) panicr_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, 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_maincpu(*this, "maincpu"),
m_t5182(*this, "t5182"), m_t5182(*this, "t5182"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"), m_screen(*this, "screen"),
m_palette(*this, "palette") { } m_palette(*this, "palette"),
m_mainram(*this, "mainram"),
required_shared_ptr<UINT8> m_mainram; m_spriteram(*this, "spriteram"),
required_shared_ptr<UINT8> m_spriteram; m_textram(*this, "textram"),
required_shared_ptr<UINT8> m_textram; m_spritebank(*this, "spritebank") { }
required_shared_ptr<UINT8> m_spritebank;
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<t5182_device> m_t5182; required_device<t5182_device> m_t5182;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen; required_device<screen_device> m_screen;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_mainram;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_textram;
required_shared_ptr<UINT8> m_spritebank;
tilemap_t *m_bgtilemap; tilemap_t *m_bgtilemap;
tilemap_t *m_infotilemap_2; tilemap_t *m_infotilemap_2;
tilemap_t *m_txttilemap; tilemap_t *m_txttilemap;
int m_scrollx;
DECLARE_READ8_MEMBER(panicr_collision_r); int m_scrollx;
DECLARE_WRITE8_MEMBER(panicr_scrollx_lo_w); bitmap_ind16 *m_temprender;
DECLARE_WRITE8_MEMBER(panicr_scrollx_hi_w); bitmap_ind16 *m_tempbitmap_1;
DECLARE_WRITE8_MEMBER(panicr_output_w); rectangle m_tempbitmap_clip;
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_READ8_MEMBER(t5182shared_r);
DECLARE_WRITE8_MEMBER(t5182shared_w); DECLARE_WRITE8_MEMBER(t5182shared_w);
DECLARE_DRIVER_INIT(panicr);
TILE_GET_INFO_MEMBER(get_bgtile_info); TILE_GET_INFO_MEMBER(get_bgtile_info);
TILE_GET_INFO_MEMBER(get_infotile_info); TILE_GET_INFO_MEMBER(get_infotile_info);
TILE_GET_INFO_MEMBER(get_infotile_info_2); TILE_GET_INFO_MEMBER(get_infotile_info_2);
TILE_GET_INFO_MEMBER(get_infotile_info_3); TILE_GET_INFO_MEMBER(get_infotile_info_3);
TILE_GET_INFO_MEMBER(get_infotile_info_4); TILE_GET_INFO_MEMBER(get_infotile_info_4);
TILE_GET_INFO_MEMBER(get_txttile_info); TILE_GET_INFO_MEMBER(get_txttile_info);
DECLARE_DRIVER_INIT(panicr);
virtual void video_start(); virtual void video_start();
DECLARE_PALETTE_INIT(panicr); 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 ); void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect );
bitmap_ind16 *m_temprender; TIMER_DEVICE_CALLBACK_MEMBER(scanline);
bitmap_ind16 *m_tempbitmap_1;
rectangle m_tempbitmap_clip;
}; };
@ -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 = &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); 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 ) void panicr_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect )
{ {
UINT8 *spriteram = m_spriteram;
int offs,flipx,flipy,x,y,color,sprite; 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) for (offs = m_spriteram.bytes() - 16; offs>=0; offs-=16)
{ {
flipx = 0; flipx = 0;
flipy = spriteram[offs+1] & 0x80; flipy = m_spriteram[offs+1] & 0x80;
y = spriteram[offs+2]; y = m_spriteram[offs+2];
x = spriteram[offs+3]; x = m_spriteram[offs+3];
if (spriteram[offs+1] & 0x40) x -= 0x100; if (m_spriteram[offs+1] & 0x40) x -= 0x100;
if (spriteram[offs+1] & 0x20) if (m_spriteram[offs+1] & 0x20)
{ {
// often set // 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; color = m_spriteram[offs+1] & 0x0f;
sprite = spriteram[offs+0] | (*m_spritebank << 8); sprite = m_spriteram[offs+0] | (*m_spritebank << 8);
m_gfxdecode->gfx(2)->transmask(bitmap,cliprect, m_gfxdecode->gfx(2)->transmask(bitmap,cliprect,
sprite, 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->set_scrollx(0, m_scrollx);
m_bgtilemap->draw(screen, *m_temprender, m_tempbitmap_clip, 0,0); 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 // re-render the collision data here
// collisions are based on 2 bits from the tile data, relative to a page of tiles // 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); 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); 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) // d6, d7: play counter? (it only triggers on 1st coin)
coin_counter_w(machine(), 0, (data & 0x40) ? 1 : 0); coin_counter_w(machine(), 0, (data & 0x40) ? 1 : 0);
coin_counter_w(machine(), 1, (data & 0x80) ? 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: ? // 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(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(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(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(0x0c000, 0x0cfff) AM_RAM AM_SHARE("textram")
AM_RANGE(0x0d000, 0x0d000) AM_DEVWRITE("t5182", t5182_device, sound_irq_w) 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) 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(0x0d404, 0x0d404) AM_READ_PORT("START")
AM_RANGE(0x0d406, 0x0d406) AM_READ_PORT("DSW1") AM_RANGE(0x0d406, 0x0d406) AM_READ_PORT("DSW1")
AM_RANGE(0x0d407, 0x0d407) AM_READ_PORT("DSW2") AM_RANGE(0x0d407, 0x0d407) AM_READ_PORT("DSW2")
AM_RANGE(0x0d802, 0x0d802) AM_WRITE(panicr_scrollx_hi_w) AM_RANGE(0x0d802, 0x0d802) AM_WRITE(scrollx_hi_w)
AM_RANGE(0x0d804, 0x0d804) AM_WRITE(panicr_scrollx_lo_w) AM_RANGE(0x0d804, 0x0d804) AM_WRITE(scrollx_lo_w)
AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(panicr_output_w) AM_RANGE(0x0d80a, 0x0d80a) AM_WRITE(output_w)
AM_RANGE(0x0d80c, 0x0d80c) AM_WRITEONLY AM_SHARE("spritebank") AM_RANGE(0x0d80c, 0x0d80c) AM_WRITEONLY AM_SHARE("spritebank")
AM_RANGE(0x0d818, 0x0d818) AM_WRITENOP // watchdog? AM_RANGE(0x0d818, 0x0d818) AM_WRITENOP // watchdog?
AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_RANGE(0xf0000, 0xfffff) AM_ROM
@ -519,9 +520,6 @@ static INPUT_PORTS_START( panicr )
PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) 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 INPUT_PORTS_END
@ -594,7 +592,7 @@ static GFXDECODE_START( panicr )
GFXDECODE_END GFXDECODE_END
TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::panicr_scanline) TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::scanline)
{ {
int scanline = param; int scanline = param;
@ -608,10 +606,10 @@ TIMER_DEVICE_CALLBACK_MEMBER(panicr_state::panicr_scanline)
static MACHINE_CONFIG_START( panicr, panicr_state ) static MACHINE_CONFIG_START( panicr, panicr_state )
MCFG_CPU_ADD("maincpu", V20,MASTER_CLOCK/2) /* Sony 8623h9 CXQ70116D-8 (V20 compatible) */ MCFG_CPU_ADD("maincpu", V20,MASTER_CLOCK/2) /* Sony 8623h9 CXQ70116D-8 (V20 compatible) */
MCFG_CPU_PROGRAM_MAP(panicr_map) 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_DEVICE_ADD("t5182", T5182, 0)
MCFG_FRAGMENT_ADD(t5182)
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60) 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_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, 0*8, 32*8-1)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*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_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", panicr) 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("2.19m", 0x0f0000, 0x08000, CRC(3d48b0b5) SHA1(a6e8b38971a8964af463c16f32bb7dbd301dd314) )
ROM_LOAD16_BYTE("1.19n", 0x0f0001, 0x08000, CRC(674131b9) SHA1(63499cd5ad39e79e70f3ba7060680f0aa133f095) ) ROM_LOAD16_BYTE("1.19n", 0x0f0001, 0x08000, CRC(674131b9) SHA1(63499cd5ad39e79e70f3ba7060680f0aa133f095) )
ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ ROM_REGION( 0x8000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) ROM_LOAD( "22d.bin", 0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
ROM_LOAD( "22d.bin", 0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
ROM_REGION( 0x04000, "gfx1", 0 ) ROM_REGION( 0x04000, "gfx1", 0 )
ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) ) 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("2g.19m", 0x0f0000, 0x08000, CRC(cf759403) SHA1(1a0911c943ecc752e46873c9a5da981745f7562d) )
ROM_LOAD16_BYTE("1g.19n", 0x0f0001, 0x08000, CRC(06877f9b) SHA1(8b92209d6422ff2b1f3cb66bd39a3ff84e399eec) ) ROM_LOAD16_BYTE("1g.19n", 0x0f0001, 0x08000, CRC(06877f9b) SHA1(8b92209d6422ff2b1f3cb66bd39a3ff84e399eec) )
ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 module */ ROM_REGION( 0x10000, "t5182_z80", 0 ) /* Toshiba T5182 external ROM */
ROM_LOAD( "t5182.rom", 0x0000, 0x2000, CRC(d354c8fc) SHA1(a1c9e1ac293f107f69cc5788cf6abc3db1646e33) ) ROM_LOAD( "22d.bin", 0x0000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
ROM_LOAD( "22d.bin", 0x8000, 0x8000, CRC(eb1a46e1) SHA1(278859ae4bca9f421247e646d789fa1206dcd8fc) )
ROM_REGION( 0x04000, "gfx1", 0 ) ROM_REGION( 0x04000, "gfx1", 0 )
ROM_LOAD( "13f.bin", 0x000000, 0x2000, CRC(4e6b3c04) SHA1(f388969d5d822df0eaa4d8300cbf9cee47468360) ) 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, 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( 1986, panicrg, panicr, panicr, panicr, panicr_state, panicr, ROT270, "Seibu Kaihatsu (Tuning license)", "Panic Road (Germany)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )

View File

@ -5,15 +5,20 @@ class darkmist_state : public driver_device
public: public:
darkmist_state(const machine_config &mconfig, device_type type, const char *tag) darkmist_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, 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_spritebank(*this, "spritebank"),
m_scroll(*this, "scroll"), m_scroll(*this, "scroll"),
m_videoram(*this, "videoram"), m_videoram(*this, "videoram"),
m_workram(*this, "workram"), m_workram(*this, "workram"),
m_spriteram(*this, "spriteram"), m_spriteram(*this, "spriteram") { }
m_maincpu(*this, "maincpu"),
m_t5182(*this, "t5182"), required_device<cpu_device> m_maincpu;
m_gfxdecode(*this, "gfxdecode"), required_device<t5182_device> m_t5182;
m_palette(*this, "palette") { } required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_spritebank; required_shared_ptr<UINT8> m_spritebank;
required_shared_ptr<UINT8> m_scroll; required_shared_ptr<UINT8> m_scroll;
@ -21,25 +26,24 @@ public:
required_shared_ptr<UINT8> m_workram; required_shared_ptr<UINT8> m_workram;
required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_spriteram;
required_device<cpu_device> m_maincpu;
required_device<t5182_device> m_t5182;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
int m_hw; int m_hw;
tilemap_t *m_bgtilemap; tilemap_t *m_bgtilemap;
tilemap_t *m_fgtilemap; tilemap_t *m_fgtilemap;
tilemap_t *m_txtilemap; tilemap_t *m_txtilemap;
DECLARE_WRITE8_MEMBER(darkmist_hw_w); DECLARE_WRITE8_MEMBER(hw_w);
DECLARE_DRIVER_INIT(darkmist);
TILE_GET_INFO_MEMBER(get_bgtile_info); TILE_GET_INFO_MEMBER(get_bgtile_info);
TILE_GET_INFO_MEMBER(get_fgtile_info); TILE_GET_INFO_MEMBER(get_fgtile_info);
TILE_GET_INFO_MEMBER(get_txttile_info); TILE_GET_INFO_MEMBER(get_txttile_info);
DECLARE_DRIVER_INIT(darkmist);
virtual void video_start(); virtual void video_start();
DECLARE_PALETTE_INIT(darkmist); 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_gfx();
void decrypt_snd(); void decrypt_snd();
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
}; };

View File

@ -5,16 +5,13 @@ class mustache_state : public driver_device
public: public:
mustache_state(const machine_config &mconfig, device_type type, const char *tag) mustache_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_cpu_decrypt(*this, "seibu_sound"), m_cpu_decrypt(*this, "seibu_sound"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"), m_screen(*this, "screen"),
m_palette(*this, "palette") { } m_palette(*this, "palette"),
m_videoram(*this, "videoram"),
required_shared_ptr<UINT8> m_videoram; m_spriteram(*this, "spriteram") { }
required_shared_ptr<UINT8> m_spriteram;
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<seibu_sound_device> m_cpu_decrypt; required_device<seibu_sound_device> m_cpu_decrypt;
@ -22,16 +19,24 @@ public:
required_device<screen_device> m_screen; required_device<screen_device> m_screen;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_spriteram;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
int m_control_byte; int m_control_byte;
DECLARE_WRITE8_MEMBER(mustache_videoram_w);
DECLARE_WRITE8_MEMBER(mustache_video_control_w); DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(mustache_scroll_w); DECLARE_WRITE8_MEMBER(video_control_w);
DECLARE_DRIVER_INIT(mustache); DECLARE_WRITE8_MEMBER(scroll_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info);
DECLARE_DRIVER_INIT(mustache);
virtual void video_start(); virtual void video_start();
DECLARE_PALETTE_INIT(mustache); 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 ); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
}; };

View File

@ -4,10 +4,8 @@
PALETTE_INIT_MEMBER(buggychl_state, buggychl) PALETTE_INIT_MEMBER(buggychl_state, buggychl)
{ {
int i;
/* arbitrary blue shading for the sky, estimation */ /* 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)); 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 ) void buggychl_state::draw_sky( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
int x, y; for (int y = 0; y < 256; y++)
for (int x = 0; x < 256; x++)
for (y = 0; y < 256; y++)
for (x = 0; x < 256; x++)
bitmap.pix16(y, x) = 128 + x / 2; 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 ) void buggychl_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
UINT8 *spriteram = m_spriteram;
int offs; int offs;
const UINT8 *gfx; const UINT8 *gfx;
@ -169,14 +164,14 @@ void buggychl_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
const UINT8 *lookup; const UINT8 *lookup;
const UINT8 *zoomx_rom, *zoomy_rom; const UINT8 *zoomx_rom, *zoomy_rom;
sx = spriteram[offs + 3] - ((spriteram[offs + 2] & 0x80) << 1); sx = m_spriteram[offs + 3] - ((m_spriteram[offs + 2] & 0x80) << 1);
sy = 256 - 64 - spriteram[offs] + ((spriteram[offs + 1] & 0x80) << 1); sy = 256 - 64 - m_spriteram[offs] + ((m_spriteram[offs + 1] & 0x80) << 1);
flipy = spriteram[offs + 1] & 0x40; flipy = m_spriteram[offs + 1] & 0x40;
zoom = spriteram[offs + 1] & 0x3f; zoom = m_spriteram[offs + 1] & 0x3f;
zoomy_rom = gfx + (zoom << 6); zoomy_rom = gfx + (zoom << 6);
zoomx_rom = gfx + 0x2000 + (zoom << 3); 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++) for (y = 0; y < 64; y++)
{ {

View File

@ -48,11 +48,10 @@ TILE_GET_INFO_MEMBER(darkmist_state::get_fgtile_info)
TILE_GET_INFO_MEMBER(darkmist_state::get_txttile_info) TILE_GET_INFO_MEMBER(darkmist_state::get_txttile_info)
{ {
UINT8 *videoram = m_videoram;
int code,attr,pal; int code,attr,pal;
code=videoram[tile_index]; code=m_videoram[tile_index];
attr=videoram[tile_index+0x400]; attr=m_videoram[tile_index+0x400];
pal=(attr>>1); pal=(attr>>1);
code+=(attr&1)<<8; 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_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_fgtilemap->set_transparent_pen(0);
m_txtilemap->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)) #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)); 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; int i,fx,fy,tile,palette;
for(i=0;i<m_spriteram.bytes();i+=32) for(i=0;i<m_spriteram.bytes();i+=32)
{ {
fy=spriteram[i+1]&0x40; fy=m_spriteram[i+1]&0x40;
fx=spriteram[i+1]&0x80; fx=m_spriteram[i+1]&0x80;
tile=spriteram[i+0]; tile=m_spriteram[i+0];
if(spriteram[i+1]&0x20) if(m_spriteram[i+1]&0x20)
tile += (*m_spritebank << 8); tile += (*m_spritebank << 8);
palette=((spriteram[i+1])>>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=machine().rand()&15;
palette+=32; palette+=32;
@ -160,7 +160,7 @@ UINT32 darkmist_state::screen_update_darkmist(screen_device &screen, bitmap_ind1
tile, tile,
palette, palette,
fx,fy, fx,fy,
spriteram[i+3],spriteram[i+2],0 ); m_spriteram[i+3],m_spriteram[i+2],0 );
} }
} }

View File

@ -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; m_videoram[offset] = data;
videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset / 2); 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)) 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(0, 0x100 - data);
m_bg_tilemap->set_scrollx(1, 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) TILE_GET_INFO_MEMBER(mustache_state::get_bg_tile_info)
{ {
UINT8 *videoram = m_videoram; int attr = m_videoram[2 * tile_index + 1];
int attr = videoram[2 * tile_index + 1]; int code = m_videoram[2 * tile_index] + ((attr & 0x60) << 3) + ((m_control_byte & 0x08) << 7);
int code = videoram[2 * tile_index] + ((attr & 0x60) << 3) + ((m_control_byte & 0x08) << 7);
int color = attr & 0x0f; int color = attr & 0x0f;
SET_TILE_INFO_MEMBER(0, code, color, ((attr & 0x10) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0) ); 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); 8, 8, 64, 32);
m_bg_tilemap->set_scroll_rows(4); m_bg_tilemap->set_scroll_rows(4);
save_item(NAME(m_control_byte));
} }
void mustache_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ) 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; rectangle clip = cliprect;
gfx_element *gfx = m_gfxdecode->gfx(1); gfx_element *gfx = m_gfxdecode->gfx(1);
const rectangle &visarea = m_screen->visible_area(); const rectangle &visarea = m_screen->visible_area();
UINT8 *spriteram = m_spriteram;
int offs; int offs;
for (offs = 0;offs < m_spriteram.bytes();offs += 4) for (offs = 0;offs < m_spriteram.bytes();offs += 4)
{ {
int sy = 240-spriteram[offs]; int sy = 240-m_spriteram[offs];
int sx = 240-spriteram[offs+3]; int sx = 240-m_spriteram[offs+3];
int code = spriteram[offs+2]; int code = m_spriteram[offs+2];
int attr = spriteram[offs+1]; int attr = m_spriteram[offs+1];
int color = (attr & 0xe0)>>5; int color = (attr & 0xe0)>>5;
if (sy == 240) continue; 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); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect); draw_sprites(bitmap, cliprect);

101
src/mess/drivers/tmtennis.c Normal file
View File

@ -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<cpu_device> m_maincpu;
required_device<speaker_sound_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 )

View File

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="100" top="0" bottom="100" />
<bezel element="static_black">
<bounds left="0" right="100" top="0" bottom="100" />
</bezel>
</view>
</mamelayout>

View File

@ -2609,3 +2609,4 @@ bitgrphb
unk3403 unk3403
elecdet elecdet
wildfire wildfire
tmtennis

View File

@ -1788,6 +1788,7 @@ $(MESSOBJ)/tiki.a: \
$(MESS_DRIVERS)/tiki100.o \ $(MESS_DRIVERS)/tiki100.o \
$(MESSOBJ)/tomy.a: \ $(MESSOBJ)/tomy.a: \
$(MESS_DRIVERS)/tmtennis.o \
$(MESS_DRIVERS)/tutor.o \ $(MESS_DRIVERS)/tutor.o \
$(MESSOBJ)/toshiba.a: \ $(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)/tk80.o: $(MESS_LAYOUT)/tk80.lh
$(MESS_DRIVERS)/tm990189.o: $(MESS_LAYOUT)/tm990189.lh \ $(MESS_DRIVERS)/tm990189.o: $(MESS_LAYOUT)/tm990189.lh \
$(MESS_LAYOUT)/tm990189v.lh $(MESS_LAYOUT)/tm990189v.lh
$(MESS_DRIVERS)/tmtennis.o: $(MESS_LAYOUT)/tmtennis.lh
$(MESS_DRIVERS)/unixpc.o: $(MESS_LAYOUT)/unixpc.lh $(MESS_DRIVERS)/unixpc.o: $(MESS_LAYOUT)/unixpc.lh
$(MESS_DRIVERS)/ut88.o: $(MESS_LAYOUT)/ut88mini.lh $(MESS_DRIVERS)/ut88.o: $(MESS_LAYOUT)/ut88mini.lh
$(MESS_DRIVERS)/vboy.o: $(MESS_LAYOUT)/vboy.lh $(MESS_DRIVERS)/vboy.o: $(MESS_LAYOUT)/vboy.lh