Assorted improvements and added steppers to various fruit machine drivers with some m68k adjustments - From Haze (nw)

New games added or promoted from NOT_WORKING status
---------------------------------------------------
Silver Millennium  [Bonky0013, David Haywood]
This commit is contained in:
Scott Stone 2012-04-13 04:28:23 +00:00
parent e01abb015e
commit e650c689d0
11 changed files with 613 additions and 41 deletions

1
.gitattributes vendored
View File

@ -2970,6 +2970,7 @@ src/mame/drivers/sidepckt.c svneol=native#text/plain
src/mame/drivers/sigmab52.c svneol=native#text/plain
src/mame/drivers/sigmab98.c svneol=native#text/plain
src/mame/drivers/silkroad.c svneol=native#text/plain
src/mame/drivers/silvmil.c svneol=native#text/plain
src/mame/drivers/simpl156.c svneol=native#text/plain
src/mame/drivers/simpsons.c svneol=native#text/plain
src/mame/drivers/skeetsht.c svneol=native#text/plain

View File

@ -4,7 +4,7 @@
#include "m68kcpu.h"
READ32_HANDLER( m68340_internal_sim_r )
READ16_HANDLER( m68340_internal_sim_r )
{
m68ki_cpu_core *m68k = m68k_get_safe_token(&space->device());
m68340_sim* sim = m68k->m68340SIM;
@ -13,13 +13,13 @@ READ32_HANDLER( m68340_internal_sim_r )
if (sim)
{
int pc = cpu_get_pc(&space->device());
logerror("%08x m68340_internal_sim_r %08x, (%08x)\n", pc, offset*4,mem_mask);
logerror("%08x m68340_internal_sim_r %04x, (%04x)\n", pc, offset*2,mem_mask);
}
return 0x00000000;
return 0x0000;
}
WRITE32_HANDLER( m68340_internal_sim_w )
WRITE16_HANDLER( m68340_internal_sim_w )
{
m68ki_cpu_core *m68k = m68k_get_safe_token(&space->device());
m68340_sim* sim = m68k->m68340SIM;
@ -28,7 +28,7 @@ WRITE32_HANDLER( m68340_internal_sim_w )
if (sim)
{
int pc = cpu_get_pc(&space->device());
logerror("%08x m68340_internal_sim_w %08x, %08x (%08x)\n", pc, offset*4,data,mem_mask);
logerror("%08x m68340_internal_sim_w %04x, %04x (%04x)\n", pc, offset*2,data,mem_mask);
}
}

View File

@ -1,6 +1,6 @@
READ32_HANDLER( m68340_internal_sim_r );
WRITE32_HANDLER( m68340_internal_sim_w );
READ16_HANDLER( m68340_internal_sim_r );
WRITE16_HANDLER( m68340_internal_sim_w );
class m68340_sim
{

View File

@ -2741,7 +2741,7 @@ static WRITE32_HANDLER( m68340_internal_base_w )
{
int base = m68k->m68340_base & 0xfffff000;
m68k->internal->install_legacy_readwrite_handler(base + 0x000, base + 0x05f, FUNC(m68340_internal_sim_r), FUNC(m68340_internal_sim_w));
m68k->internal->install_legacy_readwrite_handler(base + 0x000, base + 0x05f, FUNC(m68340_internal_sim_r), FUNC(m68340_internal_sim_w),0xffffffff);
m68k->internal->install_legacy_readwrite_handler(base + 0x600, base + 0x67f, FUNC(m68340_internal_timer_r), FUNC(m68340_internal_timer_w));
m68k->internal->install_legacy_readwrite_handler(base + 0x700, base + 0x723, FUNC(m68340_internal_serial_r), FUNC(m68340_internal_serial_w));
m68k->internal->install_legacy_readwrite_handler(base + 0x780, base + 0x7bf, FUNC(m68340_internal_dma_r), FUNC(m68340_internal_dma_w));

View File

@ -34,6 +34,10 @@
#include "machine/68681.h"
#include "bfm_sc4.lh"
#include "machine/bfm_bd1.h"
#include "video/awpvid.h"
#include "machine/steppers.h" // stepper motor
class sc4_state : public driver_device
{
@ -57,6 +61,15 @@ public:
UINT8 vfd_ser_value;
int vfd_ser_count;
int m_reel_changed;
int m_reels;
int m_reel12_latch;
int m_reel3_latch;
int m_reel4_latch;
int m_reel56_latch;
int m_optic_pattern;
DECLARE_READ16_MEMBER(sc4_mem_r);
DECLARE_WRITE16_MEMBER(sc4_mem_w);
};
@ -181,6 +194,9 @@ READ16_MEMBER(sc4_state::sc4_mem_r)
return 0x0000;
}
static WRITE8_HANDLER( bfm_sc4_reel4_w );
WRITE16_MEMBER(sc4_state::sc4_mem_w)
{
int pc = cpu_get_pc(&space.device());
@ -222,6 +238,9 @@ WRITE16_MEMBER(sc4_state::sc4_mem_w)
ymz280b_w(m_ymz,1, data & 0xff);
break;
case 0x1330:
bfm_sc4_reel4_w(&space,0,data&0xf);
break;
default:
logerror("%08x maincpu write access offset %08x data %04x mem_mask %04x cs %d (LAMPS etc.)\n", pc, offset*2, data, mem_mask, cs);
@ -326,10 +345,51 @@ void bfm_sc4_write_serial_vfd(running_machine &machine, bool cs, bool clock, boo
static WRITE8_HANDLER( bfm_sc4_68307_porta_w )
{
int pc = cpu_get_pc(&space->device());
logerror("%08x bfm_sc4_68307_porta_w %04x\n", pc, data);
sc4_state *state = space->machine().driver_data<sc4_state>();
state->m_reel12_latch = data;
if ( stepper_update(0, data&0x0f ) ) state->m_reel_changed |= 0x01;
if ( stepper_update(1, (data>>4))&0x0f ) state->m_reel_changed |= 0x02;
if ( stepper_optic_state(0) ) state->m_optic_pattern |= 0x01;
else state->m_optic_pattern &= ~0x01;
if ( stepper_optic_state(1) ) state->m_optic_pattern |= 0x02;
else state->m_optic_pattern &= ~0x02;
awp_draw_reel(0);
awp_draw_reel(1);
}
static WRITE8_HANDLER( bfm_sc4_reel3_w )
{
sc4_state *state = space->machine().driver_data<sc4_state>();
state->m_reel3_latch = data;
if ( stepper_update(2, data&0x0f ) ) state->m_reel_changed |= 0x04;
if ( stepper_optic_state(2) ) state->m_optic_pattern |= 0x04;
else state->m_optic_pattern &= ~0x04;
awp_draw_reel(2);
}
static WRITE8_HANDLER( bfm_sc4_reel4_w )
{
sc4_state *state = space->machine().driver_data<sc4_state>();
state->m_reel4_latch = data;
if ( stepper_update(3, data&0x0f ) ) state->m_reel_changed |= 0x08;
if ( stepper_optic_state(3) ) state->m_optic_pattern |= 0x08;
else state->m_optic_pattern &= ~0x08;
awp_draw_reel(3);
}
static WRITE16_HANDLER( bfm_sc4_68307_portb_w )
{
int pc = cpu_get_pc(&space->device());
@ -337,11 +397,9 @@ static WRITE16_HANDLER( bfm_sc4_68307_portb_w )
// serial output to the VFD at least..
logerror("%08x bfm_sc4_68307_portb_w %04x %04x\n", pc, data, mem_mask);
// this seems good for the earlier sets which use the VFD, but I think the later games use a generic DMD of some kind instead?
// we have game specific DMD roms in a couple of cases, is it possible ALL the later games are meant to have
// their own DMD roms rather than it being something generic? (if so we're missing a lot of DMD roms..)
bfm_sc4_write_serial_vfd(space->machine(), (data & 0x4000)?1:0, (data & 0x1000)?1:0, !(data & 0x2000)?1:0);
// bfm_sc4_write_serial_vfd(space->machine(), (data & 0x1000)?1:0, (data & 0x4000)?0:1, !(data & 0x2000)?1:0);
bfm_sc4_reel3_w(space, 0, (data&0x0f00)>>8);
}
@ -359,6 +417,21 @@ static READ16_HANDLER( bfm_sc4_68307_portb_r )
return 0x0000;//0xffff;//space->machine().rand();
}
static MACHINE_RESET( sc4 )
{
sc4_state *state = machine.driver_data<sc4_state>();
int pattern =0, i;
for ( i = 0; i < state->m_reels; i++)
{
stepper_reset_position(i);
if ( stepper_optic_state(i) ) pattern |= 1<<i;
}
state->m_optic_pattern = pattern;
}
static MACHINE_START( sc4 )
{
sc4_state *state = machine.driver_data<sc4_state>();
@ -373,7 +446,19 @@ static MACHINE_START( sc4 )
bfm_sc4_68307_portb_w );
BFM_BD1_init(0);
int reels = 6;
state->m_reels=reels;
// todo, make reel configs a per game structure
for ( int n = 0; n < reels; n++ )
{
if (n!=3) stepper_config(machine, n, &starpoint_interface_48step);
else stepper_config(machine, n, &starpoint_interface_200step_reel); // luckb
}
if (reels)
{
awp_reel_setup();
}
}
@ -403,14 +488,28 @@ void bfm_sc4_duart_tx(device_t *device, int channel, UINT8 data)
UINT8 bfm_sc4_duart_input_r(device_t *device)
{
logerror("bfm_sc4_duart_input_r\n");
return 0x2;
sc4_state *state = device->machine().driver_data<sc4_state>();
// printf("bfm_sc4_duart_input_r\n");
return state->m_optic_pattern;
}
void bfm_sc4_duart_output_w(device_t *device, UINT8 data)
{
logerror("bfm_sc4_duart_output_w\n");
// cputag_set_input_line(device->machine(), "audiocpu", INPUT_LINE_RESET, data & 0x20 ? CLEAR_LINE : ASSERT_LINE);
// logerror("bfm_sc4_duart_output_w\n");
sc4_state *state = device->machine().driver_data<sc4_state>();
state->m_reel56_latch = data;
if ( stepper_update(4, data&0x0f ) ) state->m_reel_changed |= 0x10;
if ( stepper_update(5, (data>>4)&0x0f) ) state->m_reel_changed |= 0x20;
if ( stepper_optic_state(4) ) state->m_optic_pattern |= 0x10;
else state->m_optic_pattern &= ~0x10;
if ( stepper_optic_state(5) ) state->m_optic_pattern |= 0x20;
else state->m_optic_pattern &= ~0x20;
awp_draw_reel(4);
awp_draw_reel(5);
}
@ -458,6 +557,7 @@ MACHINE_CONFIG_START( sc4, sc4_state )
MCFG_CPU_PERIODIC_INT(sc4_fake_int_check,1000)
MCFG_MACHINE_START( sc4 )
MCFG_MACHINE_RESET( sc4 )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@ -465,7 +565,7 @@ MACHINE_CONFIG_START( sc4, sc4_state )
MCFG_DUART68681_ADD("duart68681", 16000000/4, bfm_sc4_duart68681_config) // ?? Mhz
MCFG_DEFAULT_LAYOUT(layout_bfm_sc4)
MCFG_DEFAULT_LAYOUT(layout_awpvid14)
MCFG_SOUND_ADD("ymz", YMZ280B, 16000000) // ?? Mhz
MCFG_SOUND_CONFIG(ymz280b_config)

View File

@ -378,7 +378,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( ecoinf3_pyramid, ecoinf3_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z180,4000000) // certainly not a plain z80 at least, invalid opcodes for that
MCFG_CPU_ADD("maincpu", Z180,16000000) // certainly not a plain z80 at least, invalid opcodes for that
MCFG_CPU_PROGRAM_MAP(pyramid_memmap)
MCFG_CPU_IO_MAP(pyramid_portmap)

View File

@ -1,7 +1,7 @@
/* Unkonwn JPM Platform */
/* seems to be 68340 (or similar) based, so probably after IMPACT - uses opcodes not handled by 68020, similar to SC5 */
/* seems to be Coldfire based */
/* only Ker - Chinq has sound roms, they seem to map in cpu space, but are missing from the rest? */
/* I don't think this is Pluto, or other known platforms */
/* Could be Pluto 6? */
@ -24,18 +24,24 @@ protected:
static ADDRESS_MAP_START( jpmsys7_map, AS_PROGRAM, 32, jpmsys7_state )
AM_RANGE(0x000000, 0x2fffff) AM_ROM
AM_RANGE(0x00000000, 0x002fffff) AM_ROM
AM_RANGE(0x10000000, 0x1000ffff) AM_RAM
AM_RANGE(0x20000018, 0x2000001b) AM_WRITENOP // large data upload like astra/pluto?
AM_RANGE(0x50000000, 0x50001fff) AM_RAM
// AM_RANGE(0xf0000000, 0xf0000fff) AM_RAM
ADDRESS_MAP_END
static INPUT_PORTS_START( jpmsys7 )
INPUT_PORTS_END
static MACHINE_CONFIG_START( jpmsys7, jpmsys7_state )
MCFG_CPU_ADD("maincpu", M68020, 16000000) // 68340?
MCFG_CPU_ADD("maincpu", MCF5206E, 40000000) // seems to be a Coldfire of some kind
MCFG_CPU_PROGRAM_MAP(jpmsys7_map)
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
/* unknown sound */
/* unknown sound (probably DMA driven DAC) */
MACHINE_CONFIG_END

View File

@ -13,6 +13,8 @@
#include "machine/z80ctc.h"
#include "machine/z80sio.h"
#include "sound/ay8910.h"
#include "video/awpvid.h"
#include "machine/roc10937.h"
class proconn_state : public driver_device
{
@ -121,8 +123,6 @@ protected:
};
static ADDRESS_MAP_START( proconn_map, AS_PROGRAM, 8, proconn_state )
AM_RANGE(0x0000, 0xefff) AM_ROM
AM_RANGE(0xf000, 0xffff) AM_RAM
@ -138,14 +138,14 @@ static ADDRESS_MAP_START( proconn_portmap, AS_IO, 8, proconn_state )
// sio (vfd should be connected to it?)
AM_RANGE(0x00ff, 0x00ff) AM_READWRITE(sio_r0, sio_w0)
AM_RANGE(0x01ff, 0x01ff) AM_READWRITE(sio_r1, sio_w1)
AM_RANGE(0x02ff, 0x02ff) AM_READWRITE(sio_r2, sio_w2)
AM_RANGE(0x01ff, 0x01ff) AM_READWRITE(sio_r2, sio_w2)
AM_RANGE(0x02ff, 0x02ff) AM_READWRITE(sio_r1, sio_w1)
AM_RANGE(0x03ff, 0x03ff) AM_READWRITE(sio_r3, sio_w3)
// ctc
AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(ctc_r0, ctc_w0)
AM_RANGE(0x01fe, 0x01fe) AM_READWRITE(ctc_r1, ctc_w1)
AM_RANGE(0x02fe, 0x02fe) AM_READWRITE(ctc_r2, ctc_w2)
AM_RANGE(0x01fe, 0x01fe) AM_READWRITE(ctc_r2, ctc_w2)
AM_RANGE(0x02fe, 0x02fe) AM_READWRITE(ctc_r1, ctc_w1)
AM_RANGE(0x03fe, 0x03fe) AM_READWRITE(ctc_r3, ctc_w3)
// ay (meters connected to it?)
@ -246,10 +246,11 @@ static Z80PIO_INTERFACE( pio_interface_5 )
DEVCB_NULL
};
static Z80CTC_INTERFACE( ctc_intf )
{
0, // timer disables
DEVCB_NULL, // interrupt handler
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), /* interrupt handler */
DEVCB_NULL, // ZC/TO0 callback
DEVCB_NULL, // ZC/TO1 callback
DEVCB_NULL // ZC/TO2 callback
@ -257,13 +258,17 @@ static Z80CTC_INTERFACE( ctc_intf )
static WRITE8_DEVICE_HANDLER( serial_transmit )
{
logerror("serial_transmit %02x\n", data);
// if (offset == 0)
{
ROC10937_newdata(0, data);
ROC10937_draw_16seg(0);
}
}
static int serial_receive(device_t *device, int channel)
{
return -1;
return 0xff;
}
@ -286,22 +291,45 @@ static const ay8910_interface ay8910_config =
};
static const z80_daisy_config z80_daisy_chain[] =
{
{ "z80ctc" },
{ "z80sio" },
{ NULL }
};
static MACHINE_RESET( proconn )
{
ROC10937_reset(0);
ROC10937_draw_16seg(0);
}
static MACHINE_START( proconn )
{
ROC10937_init(0, ROCKWELL10937,1);
}
static MACHINE_CONFIG_START( proconn, proconn_state )
MCFG_CPU_ADD("maincpu", Z80, 4000000) /* ?? Mhz */
MCFG_CPU_CONFIG(z80_daisy_chain)
MCFG_CPU_PROGRAM_MAP(proconn_map)
MCFG_CPU_IO_MAP(proconn_portmap)
MCFG_Z80PIO_ADD( "z80pio_1", 1000000, pio_interface_1 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_2", 1000000, pio_interface_2 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_3", 1000000, pio_interface_3 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_4", 1000000, pio_interface_4 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_5", 1000000, pio_interface_5 ) /* ?? Mhz */
MCFG_Z80CTC_ADD( "z80ctc", 1000000, ctc_intf ) /* ?? Mhz */
MCFG_Z80SIO_ADD( "z80sio", 1000000, sio_intf ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_1", 4000000, pio_interface_1 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_2", 4000000, pio_interface_2 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_3", 4000000, pio_interface_3 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_4", 4000000, pio_interface_4 ) /* ?? Mhz */
MCFG_Z80PIO_ADD( "z80pio_5", 4000000, pio_interface_5 ) /* ?? Mhz */
MCFG_Z80CTC_ADD( "z80ctc", 4000000, ctc_intf ) /* ?? Mhz */
MCFG_Z80SIO_ADD( "z80sio", 4000000, sio_intf ) /* ?? Mhz */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_MACHINE_START( proconn )
MCFG_MACHINE_RESET( proconn )
MCFG_DEFAULT_LAYOUT(layout_awpvid16)
MCFG_SOUND_ADD("aysnd", AY8910, 1000000) /* ?? Mhz */ // YM2149F on PC92?
MCFG_SOUND_CONFIG(ay8910_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.33)

435
src/mame/drivers/silvmil.c Normal file
View File

@ -0,0 +1,435 @@
/*
Silver Millennium
yet another Data East / Tumble Pop derived hardware
this one seems similar to (but not identical to)
the crospang.c hardware from F2 system
todo: check clocks, refresh rate, audio balance
add dipswitches
*/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h"
#include "sound/okim6295.h"
#include "sound/3812intf.h"
#include "video/decospr.h"
#include "sound/2151intf.h"
class silvmil_state : public driver_device
{
public:
silvmil_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) {
}
/* memory pointers */
UINT16 * m_bg_videoram;
UINT16 * m_fg_videoram;
UINT16 * m_spriteram;
size_t m_spriteram_size;
/* video-related */
tilemap_t *m_bg_layer;
tilemap_t *m_fg_layer;
int m_silvmil_tilebank[4];
int m_whichbank;
DECLARE_WRITE16_MEMBER(silvmil_tilebank_w)
{
m_silvmil_tilebank[m_whichbank] = (data>>8) & 0x1f;
// printf("%08x tilebank_w %04x (which = %04x)\n",pc, data, m_whichbank);
m_fg_layer->mark_all_dirty();
m_bg_layer->mark_all_dirty();
}
DECLARE_WRITE16_MEMBER(silvmil_tilebank1_w)
{
m_whichbank = (data>>8)&0x3;
}
DECLARE_WRITE16_MEMBER(silvmil_fg_scrolly_w)
{
m_fg_layer->set_scrolly(0, data + 8);
}
DECLARE_WRITE16_MEMBER(silvmil_bg_scrolly_w)
{
m_bg_layer->set_scrolly(0, data + 8);
}
DECLARE_WRITE16_MEMBER(silvmil_fg_scrollx_w)
{
m_fg_layer->set_scrollx(0, data);
}
DECLARE_WRITE16_MEMBER(silvmil_bg_scrollx_w)
{
m_bg_layer->set_scrollx(0, data + 4);
}
DECLARE_WRITE16_MEMBER(silvmil_fg_videoram_w)
{
COMBINE_DATA(&m_fg_videoram[offset]);
m_fg_layer->mark_tile_dirty(offset);
}
DECLARE_WRITE16_MEMBER(silvmil_bg_videoram_w)
{
COMBINE_DATA(&m_bg_videoram[offset]);
m_bg_layer->mark_tile_dirty(offset);
}
DECLARE_WRITE16_MEMBER(silvmil_soundcmd_w)
{
if (ACCESSING_BITS_0_7)
{
soundlatch_byte_w(space, 0, data & 0xff);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20));
}
}
};
static TILE_GET_INFO( get_bg_tile_info )
{
silvmil_state *state = machine.driver_data<silvmil_state>();
int data = state->m_bg_videoram[tile_index];
int tile = data & 0x3ff;
int color = (data >> 12) & 0x0f;
int bank = state->m_silvmil_tilebank[(data&0xc00)>>10]*0x400;
SET_TILE_INFO(1, tile + bank, color + 0x20, 0);
}
static TILE_GET_INFO( get_fg_tile_info )
{
silvmil_state *state = machine.driver_data<silvmil_state>();
int data = state->m_fg_videoram[tile_index];
int tile = data & 0x3ff;
int color = (data >> 12) & 0x0f;
int bank = state->m_silvmil_tilebank[(data&0xc00)>>10]*0x400;
SET_TILE_INFO(1, tile + bank, color + 0x10, 0);
}
static TILEMAP_MAPPER( deco16_scan_rows )
{
/* logical (col,row) -> memory offset */
return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6);
}
VIDEO_START( silvmil )
{
silvmil_state *state = machine.driver_data<silvmil_state>();
state->m_bg_layer = tilemap_create(machine, get_bg_tile_info, deco16_scan_rows, 16, 16, 64, 32);
state->m_fg_layer = tilemap_create(machine, get_fg_tile_info, deco16_scan_rows, 16, 16, 64, 32);
state->m_fg_layer->set_transparent_pen(0);
}
SCREEN_UPDATE_IND16( silvmil )
{
silvmil_state *state = screen.machine().driver_data<silvmil_state>();
state->m_bg_layer->draw(bitmap, cliprect, 0, 0);
state->m_fg_layer->draw(bitmap, cliprect, 0, 0);
screen.machine().device<decospr_device>("spritegen")->draw_sprites(bitmap, cliprect, state->m_spriteram, 0x400);
return 0;
}
static ADDRESS_MAP_START( silvmil_map, AS_PROGRAM, 16, silvmil_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x100001) AM_WRITE(silvmil_tilebank1_w)
AM_RANGE(0x100002, 0x100003) AM_WRITE(silvmil_fg_scrollx_w)
AM_RANGE(0x100004, 0x100005) AM_WRITE(silvmil_fg_scrolly_w)
AM_RANGE(0x100006, 0x100007) AM_WRITE(silvmil_bg_scrollx_w)
AM_RANGE(0x100008, 0x100009) AM_WRITE(silvmil_bg_scrolly_w)
AM_RANGE(0x10000e, 0x10000f) AM_WRITE(silvmil_tilebank_w)
AM_RANGE(0x120000, 0x120fff) AM_RAM_WRITE(silvmil_fg_videoram_w) AM_BASE(m_fg_videoram)
AM_RANGE(0x122000, 0x122fff) AM_RAM_WRITE(silvmil_bg_videoram_w) AM_BASE(m_bg_videoram)
AM_RANGE(0x200000, 0x2005ff) AM_RAM_WRITE(paletteram_xRRRRRGGGGGBBBBB_word_w) AM_SHARE("paletteram")
AM_RANGE(0x210000, 0x2107ff) AM_RAM AM_BASE_SIZE(m_spriteram, m_spriteram_size)
AM_RANGE(0x270000, 0x270001) AM_WRITE(silvmil_soundcmd_w)
AM_RANGE(0x280000, 0x280001) AM_READ_PORT("P1_P2")
AM_RANGE(0x280002, 0x280003) AM_READ_PORT("COIN")
AM_RANGE(0x280004, 0x280005) AM_READ_PORT("DSW")
AM_RANGE(0x300000, 0x30ffff) AM_RAM
ADDRESS_MAP_END
static INPUT_PORTS_START( silvmil )
PORT_START("P1_P2")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("COIN")
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0xfc00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW")
PORT_DIPNAME( 0x0001, 0x0001, "DSW1:1" )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, "DSW1:2" )
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, "DSW1:3" )
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, "DSW1:4" )
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, "DSW1:5" )
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, "DSW1:6" )
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, "DSW1:7" )
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, "DSW1:8" )
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0100, 0x0100, "DSW2:1" )
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0200, 0x0200, "DSW2:2" )
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0400, 0x0400, "DSW2:3" )
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0800, 0x0800, "DSW2:4" )
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x1000, 0x1000, "DSW2:5" )
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x2000, 0x2000, "DSW2:6" )
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x4000, 0x4000, "DSW2:7" )
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x8000, 0x8000, "DSW2:8" )
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
static const gfx_layout tlayout =
{
16,16,
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 },
{ 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
64*8
};
static GFXDECODE_START( silvmil )
GFXDECODE_ENTRY( "gfx2", 0, tlayout, 0, 64 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx1", 0, tlayout, 0, 64 ) /* Sprites 16x16 */
GFXDECODE_END
static MACHINE_START( silvmil )
{
}
static MACHINE_RESET( silvmil )
{
silvmil_state *state = machine.driver_data<silvmil_state>();
state->m_silvmil_tilebank[0] = 0;
state->m_silvmil_tilebank[1] = 0;
state->m_silvmil_tilebank[2] = 0;
state->m_silvmil_tilebank[3] = 0;
state->m_whichbank = 0;
}
static ADDRESS_MAP_START( silvmil_sound_map, AS_PROGRAM, 8, silvmil_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xd000, 0xd7ff) AM_RAM
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
AM_RANGE(0xc002, 0xc002) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xc003, 0xc003) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE(0xc006, 0xc006) AM_READ(soundlatch_byte_r)
AM_RANGE(0xc00f, 0xc00f) AM_WRITENOP // ??
ADDRESS_MAP_END
/* CLOCKS UNKNOWN! */
static void silvmil_irqhandler( device_t *device, int irq )
{
device_set_input_line(device->machine().device("audiocpu"), 0, irq ? ASSERT_LINE : CLEAR_LINE);
}
static const ym2151_interface silvmil_ym2151_interface =
{
silvmil_irqhandler
};
static MACHINE_CONFIG_START( silvmil, silvmil_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 14000000) // ??
MCFG_CPU_PROGRAM_MAP(silvmil_map)
MCFG_CPU_VBLANK_INT("screen", irq6_line_hold)
MCFG_CPU_ADD("audiocpu", Z80, 14000000/4) // ??
MCFG_CPU_PROGRAM_MAP(silvmil_sound_map)
MCFG_MACHINE_START(silvmil)
MCFG_MACHINE_RESET(silvmil)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 64*8)
MCFG_SCREEN_VISIBLE_AREA(0, 40*8-1, 0, 30*8-1)
MCFG_SCREEN_UPDATE_STATIC(silvmil)
MCFG_PALETTE_LENGTH(0x300)
MCFG_GFXDECODE(silvmil)
MCFG_VIDEO_START(silvmil)
MCFG_DEVICE_ADD("spritegen", DECO_SPRITE, 0)
decospr_device::set_gfx_region(*device, 0);
decospr_device::set_is_bootleg(*device, true);
decospr_device::set_offsets(*device, 5,7);
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("ymsnd", YM2151, 3427190) // ??
MCFG_SOUND_CONFIG(silvmil_ym2151_interface)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
MCFG_OKIM6295_ADD("oki", 1000000, OKIM6295_PIN7_HIGH) // ??
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.2)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.2)
MACHINE_CONFIG_END
ROM_START( silvmil )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68k */
ROM_LOAD16_BYTE( "d-13_u3.bin", 0x00000, 0x40000, CRC(46106c59) SHA1(ab965c1ea9ce89a67875530d76ac2bde7fd13e13) )
ROM_LOAD16_BYTE( "d-14_u2.bin", 0x00001, 0x40000, CRC(65421eca) SHA1(5258df7ceab6427e1b6f93f51896f7f3a651300c) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* z80 */
ROM_LOAD( "d-11_uz02.bin", 0x00000, 0x10000, CRC(b41289e6) SHA1(edf83206de418757a154d5a085b0b2fd97a77807) )
ROM_REGION( 0x40000, "oki", 0 ) /* samples */
ROM_LOAD( "d-12_uz1.bin", 0x00000, 0x40000, CRC(a170d8a9) SHA1(77339382570498f9f6eeb80595bfe72fc853fd68))
ROM_REGION( 0x400000, "gfx1", 0 )
ROM_LOAD16_BYTE( "d-16_u41.bin", 0x000000, 0x20000, CRC(ff5ea605) SHA1(38e32f391b211ed280dd7f05eb13301cb9ddf57c) )
ROM_CONTINUE ( 0x200000,0x20000 )
ROM_CONTINUE ( 0x040000,0x20000 )
ROM_CONTINUE ( 0x240000,0x20000 )
ROM_LOAD16_BYTE( "d-15_u42.bin", 0x000001, 0x20000, CRC(5f72d6cc) SHA1(88641a42c0fc6e84ffd009fb40d0b1774e8c0630) )
ROM_CONTINUE ( 0x200001,0x20000 )
ROM_CONTINUE ( 0x040001,0x20000 )
ROM_CONTINUE ( 0x240001,0x20000 )
ROM_LOAD16_BYTE( "d-20_pat01.bin", 0x080001, 0x20000, CRC(cc4d3b49) SHA1(a2ef0d949443c9133487f83d5879daabca688d66) )
ROM_CONTINUE ( 0x280001,0x20000 )
ROM_CONTINUE ( 0x0c0001,0x20000 )
ROM_CONTINUE ( 0x2c0001,0x20000 )
ROM_LOAD16_BYTE( "d-17_pat11.bin", 0x080000, 0x20000, CRC(2facb3f1) SHA1(ea380345e1f15451e1ded5de178ec4648c33e2f0) )
ROM_CONTINUE ( 0x280000,0x20000 )
ROM_CONTINUE ( 0x0c0000,0x20000 )
ROM_CONTINUE ( 0x2c0000,0x20000 )
ROM_LOAD16_BYTE( "d-17_pat02.bin", 0x100001, 0x20000, CRC(addc5261) SHA1(73c5e29a39364c286a110678eb65b85ab1cf97d4) )
ROM_CONTINUE ( 0x300001,0x20000)
ROM_CONTINUE ( 0x140001,0x20000)
ROM_CONTINUE ( 0x340001,0x20000)
ROM_LOAD16_BYTE( "d-18_pat12.bin", 0x100000, 0x20000, CRC(a429b237) SHA1(ab709b93c5232f3fdbb60954f93d04bb3828ac76) )
ROM_CONTINUE ( 0x300000,0x20000)
ROM_CONTINUE ( 0x140000,0x20000)
ROM_CONTINUE ( 0x340000,0x20000)
ROM_LOAD16_BYTE( "d-18_pat03.bin", 0x180001, 0x20000, CRC(36b9c407) SHA1(291e29a2f5de6db639988e99a010fcac233387ad) )
ROM_CONTINUE ( 0x380001,0x20000)
ROM_CONTINUE ( 0x1c0001,0x20000)
ROM_CONTINUE ( 0x3c0001,0x20000)
ROM_LOAD16_BYTE( "d-19_pat13.bin", 0x180000, 0x20000, CRC(af2507ce) SHA1(280b3995a6164e4ef834247d637ee46c61bf9950) )
ROM_CONTINUE ( 0x380000,0x20000)
ROM_CONTINUE ( 0x1c0000,0x20000)
ROM_CONTINUE ( 0x3c0000,0x20000)
ROM_REGION( 0x200000, "gfx2", 0 ) /* sprites */
ROM_LOAD16_BYTE( "d-17_u53.bin", 0x000000, 0x80000, CRC(4d177bda) SHA1(980205dead92830362095dac61d2e99bf62f0f5d) )
ROM_LOAD16_BYTE( "d-18_u54.bin", 0x000001, 0x80000, CRC(218c4471) SHA1(6a64d7a6c18eb078a5848f4f97aa0c65e74ad3d9) )
ROM_LOAD16_BYTE( "d-19_u55.bin", 0x100000, 0x80000, CRC(59507521) SHA1(8e0eaf8ecdfcaefccb5657278ecb2fea7489afb3) )
ROM_LOAD16_BYTE( "d-20_u56.bin", 0x100001, 0x80000, CRC(e67c2c7d) SHA1(cddfd6a3d934e71853af62e3d2bf312618c9b4ff) )
ROM_END
static void tumblepb_gfx1_rearrange(running_machine &machine)
{
UINT8 *rom = machine.region("gfx1")->base();
int len = machine.region("gfx1")->bytes();
int i;
/* gfx data is in the wrong order */
for (i = 0; i < len; i++)
{
if ((i & 0x20) == 0)
{
int t = rom[i]; rom[i] = rom[i + 0x20]; rom[i + 0x20] = t;
}
}
/* low/high half are also swapped */
for (i = 0; i < len / 2; i++)
{
int t = rom[i]; rom[i] = rom[i + len / 2]; rom[i + len / 2] = t;
}
}
static DRIVER_INIT( silvmil )
{
tumblepb_gfx1_rearrange(machine);
}
GAME( 1995, silvmil, 0, silvmil, silvmil, silvmil, ROT270, "Para", "Silver Millennium", 0 )

View File

@ -10221,6 +10221,7 @@ supertnk // (c) 1981 VIDEO GAMES GmbH, W.-GERMANY
crospang // (c) 1998 F2 System
heuksun // (c) 1998 Oksan / F2 System
bestri // (c) F2 System
silvmil // (c) 1995 Para
funybubl // (c) 1999 In Chang Electronic Co
funybublc // (c) 1999 Comad Industries
dcheese // (c) 1993 HAR

View File

@ -693,6 +693,7 @@ $(MAMEOBJ)/exidy.a: \
$(MAMEOBJ)/f32.a: \
$(DRIVERS)/crospang.o $(VIDEO)/crospang.o \
$(DRIVERS)/silvmil.o \
$(DRIVERS)/f-32.o \
$(MAMEOBJ)/funworld.a: \