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
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); }

View File

@ -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;
}

View File

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

View File

@ -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<flex_format>;

View File

@ -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;

View File

@ -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:
|------------------------|
@ -152,23 +152,15 @@ rom.
const device_type T5182 = &device_creator<t5182_device>;
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<UINT8 *>(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<cpu_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 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 )
MCFG_CPU_ADD("t5182_z80", Z80, T5182_CLOCK)
MCFG_CPU_PROGRAM_MAP(t5182_map)
MCFG_CPU_IO_MAP(t5182_io)
MACHINE_CONFIG_END
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 );
}

View File

@ -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<cpu_device> m_ourcpu;
required_shared_ptr<UINT8> 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)

View File

@ -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 )

View File

@ -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 )

View File

@ -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 )

View File

@ -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<UINT8> m_mainram;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_textram;
required_shared_ptr<UINT8> m_spritebank;
m_palette(*this, "palette"),
m_mainram(*this, "mainram"),
m_spriteram(*this, "spriteram"),
m_textram(*this, "textram"),
m_spritebank(*this, "spritebank") { }
required_device<cpu_device> m_maincpu;
required_device<t5182_device> m_t5182;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
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_infotilemap_2;
tilemap_t *m_txttilemap;
int m_scrollx;
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);
int m_scrollx;
bitmap_ind16 *m_temprender;
bitmap_ind16 *m_tempbitmap_1;
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_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 )

View File

@ -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<cpu_device> m_maincpu;
required_device<t5182_device> m_t5182;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_spritebank;
required_shared_ptr<UINT8> m_scroll;
@ -21,25 +26,24 @@ public:
required_shared_ptr<UINT8> m_workram;
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;
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);
};

View File

@ -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<UINT8> m_videoram;
required_shared_ptr<UINT8> m_spriteram;
m_palette(*this, "palette"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram") { }
required_device<cpu_device> m_maincpu;
required_device<seibu_sound_device> m_cpu_decrypt;
@ -22,16 +19,24 @@ public:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> 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);
};

View File

@ -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++)
{

View File

@ -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<m_spriteram.bytes();i+=32)
{
fy=spriteram[i+1]&0x40;
fx=spriteram[i+1]&0x80;
fy=m_spriteram[i+1]&0x40;
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);
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+=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 );
}
}

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;
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);

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
elecdet
wildfire
tmtennis

View File

@ -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