Reimplemented fruit-machine mechanical meters to use timers [AGEMAME]

Various MPU4 changes [AGEMAME]:
 * Revised timing/input system to stop flickering
 * Tidied up the LED drawing code to remove flicker
 * Support for all known extenders and reel multiplex boards used in MPU4 H/W 
 * Partial support for OKI sampled sound card, need for some titles
 * Fixed Old Timer characteriser
 * Some general tidying up to allow better study of the BwB titles


New games added as GAME_NOT_WORKING:
------------------------------------
Reno Reels (20p/10GBP Cash, release A) [AGEMAME]
BwB Tetris v 2.2 [AGEMAME]
Red Hot Poker (20p/10GBP Cash, release 3) [AGEMAME]
This commit is contained in:
Phil Bennett 2011-02-05 19:23:04 +00:00
parent a99bd04a82
commit cc9ea396f7
15 changed files with 1063 additions and 2394 deletions

View File

@ -1360,7 +1360,6 @@ static WRITE8_HANDLER( meter_w )
{
int i;
int changed = meter_latch ^ data;
UINT64 cycles = downcast<cpu_device *>(space->cpu)->total_cycles();
meter_latch = data;
@ -1372,7 +1371,7 @@ static WRITE8_HANDLER( meter_w )
{
if (changed & (1 << i))
{
Mechmtr_update(i, cycles, data & (1 << i) );
MechMtr_update(i, data & (1 << i) );
generic_pulse_irq_line(space->cpu, M6809_FIRQ_LINE);
}
}

View File

@ -269,7 +269,6 @@ static WRITE8_HANDLER( mmtr_w )
else
{
int changed = mmtr_latch ^ data;
UINT64 cycles = downcast<cpu_device *>(space->cpu)->total_cycles();
mmtr_latch = data;
@ -277,7 +276,7 @@ static WRITE8_HANDLER( mmtr_w )
{
if ( changed & (1 << i) )
{
Mechmtr_update(i, cycles, data & (1 << i) );
MechMtr_update(i, data & (1 << i) );
generic_pulse_irq_line(space->machine->device("maincpu"), M6809_FIRQ_LINE);
}
}
@ -1362,7 +1361,7 @@ static DRIVER_INIT(toppoker)
{
sc1_common_init(machine,3,1);
adder2_decode_char_roms(machine); // decode GFX roms
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);
}
@ -1370,7 +1369,7 @@ static DRIVER_INIT(toppoker)
static DRIVER_INIT(lotse)
{
sc1_common_init(machine,6,1);
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);
BFM_BD1_init(1);
@ -1381,7 +1380,7 @@ static DRIVER_INIT(lotse)
static DRIVER_INIT(rou029)
{
sc1_common_init(machine,6,0);
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);
}
@ -1391,7 +1390,7 @@ static DRIVER_INIT(rou029)
static DRIVER_INIT(clatt)
{
sc1_common_init(machine,6,1);
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);

View File

@ -183,10 +183,6 @@ static int get_scorpion2_uart_status(void); // retrieve status of uart on scorp
static int read_e2ram(void);
static void e2ram_reset(void);
// global vars ////////////////////////////////////////////////////////////
static int sc2gui_update_mmtr; // bit pattern which mechanical meter needs updating
// local vars /////////////////////////////////////////////////////////////
static UINT8 key[16]; // security device on gamecard (video games only)
@ -321,7 +317,6 @@ static void on_scorpion2_reset(running_machine *machine)
hopper_running = 0; // for video games
hopper_coin_sense = 0;
sc2gui_update_mmtr= 0xFF;
slide_states[0] = 0;
slide_states[1] = 0;
@ -583,7 +578,6 @@ static WRITE8_HANDLER( mmtr_w )
{
int i;
int changed = mmtr_latch ^ data;
UINT64 cycles = downcast<cpu_device *>(space->cpu)->total_cycles();
mmtr_latch = data;
@ -591,10 +585,7 @@ static WRITE8_HANDLER( mmtr_w )
{
if ( changed & (1 << i) )
{
if ( Mechmtr_update(i, cycles, data & (1 << i) ) )
{
sc2gui_update_mmtr |= (1 << i);
}
MechMtr_update(i, data & (1 << i) );
}
}
if ( data & 0x1F ) cputag_set_input_line(space->machine, "maincpu", M6809_FIRQ_LINE, ASSERT_LINE );
@ -2251,7 +2242,7 @@ static DRIVER_INIT (quintoon)
{
sc2_common_init(machine, 1);
adder2_decode_char_roms(machine);
Mechmtr_init(8); // setup mech meters
MechMtr_config(machine,8); // setup mech meters
has_hopper = 0;
@ -4005,7 +3996,7 @@ static void sc2awp_common_init(running_machine *machine,int reels, int decrypt)
static DRIVER_INIT (bbrkfst)
{
sc2awp_common_init(machine,5, 1);
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);
BFM_BD1_init(1);
@ -4027,7 +4018,7 @@ static DRIVER_INIT (bbrkfst)
static DRIVER_INIT (drwho)
{
sc2awp_common_init(machine,4, 1);
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);
BFM_BD1_init(1);
@ -4047,7 +4038,7 @@ static DRIVER_INIT (drwho)
static DRIVER_INIT (drwhon)
{
sc2awp_common_init(machine,4, 0);
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);
BFM_BD1_init(1);
@ -4068,7 +4059,7 @@ static DRIVER_INIT (drwhon)
static DRIVER_INIT (focus)
{
sc2awp_common_init(machine,6, 1);
Mechmtr_init(5);
MechMtr_config(machine,5);
BFM_BD1_init(0);
}
@ -4077,7 +4068,7 @@ static DRIVER_INIT (cpeno1)
{
sc2awp_common_init(machine,6, 1);
Mechmtr_init(5);
MechMtr_config(machine,5);
Scorpion2_SetSwitchState(3,3,1); /* 5p play */
Scorpion2_SetSwitchState(3,4,1); /* 20p play */
@ -4120,7 +4111,7 @@ static DRIVER_INIT (cpeno1)
static DRIVER_INIT (bfmcgslm)
{
sc2awp_common_init(machine,6, 1);
Mechmtr_init(8);
MechMtr_config(machine,8);
BFM_BD1_init(0);
has_hopper = 0;
}
@ -4128,7 +4119,7 @@ static DRIVER_INIT (bfmcgslm)
static DRIVER_INIT (luvjub)
{
sc2awp_common_init(machine,6, 1);
Mechmtr_init(8);
MechMtr_config(machine,8);
has_hopper = 0;
Scorpion2_SetSwitchState(3,0,1);

View File

@ -220,12 +220,11 @@ static WRITE8_HANDLER( mmtr_w )
{
int i;
int changed = mmtr_latch ^ data;
UINT64 cycles = downcast<cpu_device *>(space->cpu)->total_cycles();
mmtr_latch = data;
for (i=0; i<8; i++)
if ( changed & (1 << i) ) Mechmtr_update(i, cycles, data & (1 << i) );
if ( changed & (1 << i) ) MechMtr_update(i, data & (1 << i) );
if ( data ) generic_pulse_irq_line(space->machine->device("maincpu"), M6809_FIRQ_LINE);
}

View File

@ -561,7 +561,6 @@ static READ16_HANDLER( jpmio_r )
static WRITE16_HANDLER( jpmio_w )
{
UINT64 cycles = space->machine->firstcpu->total_cycles();
switch (offset)
{
case 0x02:
@ -589,7 +588,7 @@ static WRITE16_HANDLER( jpmio_w )
}
else
// slide = 0;
Mechmtr_update(0, cycles, data >> 10);
MechMtr_update(0, data >> 10);
duart_1.IP &= ~0x10;
break;
}
@ -1206,7 +1205,6 @@ static READ16_HANDLER( optos_r )
static WRITE16_HANDLER( jpmioawp_w )
{
int i;
UINT64 cycles = space->machine->firstcpu->total_cycles();
switch (offset)
{
case 0x00:
@ -1248,7 +1246,7 @@ static WRITE16_HANDLER( jpmioawp_w )
}
else
// slide = 0;
Mechmtr_update(0, cycles, data >> 10);
MechMtr_update(0, data >> 10);
if ( data )
{
duart_1.IP &= ~0x10;

View File

@ -645,7 +645,7 @@ static MACHINE_START( m1 )
int i;
// setup 8 mechanical meters ////////////////////////////////////////////
Mechmtr_init(8);
MechMtr_config(machine,8);
// setup 6 default 96 half step reels ///////////////////////////////////
for ( i = 0; i < 6; i++ )
@ -706,10 +706,9 @@ static UINT8 m1_duart_r (device_t *device)
static WRITE8_DEVICE_HANDLER( m1_meter_w )
{
int i;
UINT64 cycles = device->machine->device<cpu_device>("maincpu")->total_cycles();
for (i=0; i<8; i++)
if ( data & (1 << i) ) Mechmtr_update(i, cycles, data & (1 << i) );
if ( data & (1 << i) ) MechMtr_update(i, data & (1 << i) );
}
static WRITE8_HANDLER( m1_latch_w )

File diff suppressed because it is too large Load Diff

View File

@ -172,6 +172,7 @@ TODO:
- Hook up OKIM6376 sound in The Mating Game
- Get the BwB games running
* They have a slightly different 68k memory map. The 6850 is at e00000 and the 6840 is at e01000
They appear to hang on the handshake with the MPU4 board
- Find out what causes the games to reset in service mode (see jump taken at CPU1:c8e8)
- Deal 'Em lockouts vary on certain cabinets (normally connected to AUX2, but not there?)
- Deal 'Em has bad tiles (apostrophe, logo, bottom corner), black should actually be transparent
@ -1094,6 +1095,84 @@ static READ16_HANDLER( ef9369_r )
}
}
/******************************************
*
* Brooktree Bt471 RAMDAC
* Implementation stolen from JPM
* Impact, may not be 100% (that has a 477)
******************************************/
static struct
{
UINT8 address;
UINT8 addr_cnt;
UINT8 pixmask;
UINT8 command;
rgb_t color;
} bt471;
/*
* 0 0 0 Address register (RAM write mode)
* 0 0 1 Color palette RAMs
* 0 1 0 Pixel read mask register
* 0 1 1 Address register (RAM read mode)
* 1 0 0 Address register (overlay write mode)
* 1 1 1 Address register (overlay read mode)
* 1 0 1 Overlay register
*/
WRITE16_HANDLER( bt471_w )
{
UINT8 val = data & 0xff;
{
popmessage("Bt477: Unhandled write access (offset:%x, data:%x)", offset, val);
}
switch (offset)
{
case 0x0:
{
bt471.address = val;
bt471.addr_cnt = 0;
break;
}
case 0x1:
{
UINT8 *addr_cnt = &bt471.addr_cnt;
rgb_t *color = &bt471.color;
color[*addr_cnt] = val;
if (++*addr_cnt == 3)
{
palette_set_color(space->machine, bt471.address, MAKE_RGB(color[0], color[1], color[2]));
*addr_cnt = 0;
/* Address register increments */
bt471.address++;
}
break;
}
case 0x2:
{
bt471.pixmask = val;
break;
}
// default:
{
popmessage("Bt477: Unhandled write access (offset:%x, data:%x)", offset, val);
}
}
}
READ16_HANDLER( bt471_r )
{
popmessage("Bt477: Unhandled read access (offset:%x)", offset);
return 0;
}
/*************************************
*
@ -1888,17 +1967,12 @@ static MACHINE_START( mpu4_vid )
{
mpu4_config_common(machine);
mod_number=4; //No AY chip
/* setup communications */
link7a_connected = 1;
/* setup 8 mechanical meters */
Mechmtr_init(8);
/* setup 4 reels (for hybrid machines) */
stepper_config(machine, 0, &barcrest_reel_interface);
stepper_config(machine, 1, &barcrest_reel_interface);
stepper_config(machine, 2, &barcrest_reel_interface);
stepper_config(machine, 3, &barcrest_reel_interface);
MechMtr_config(machine,8);
/* setup the standard oki MSC1937 display */
ROC10937_init(0, MSC1937, 0);
@ -1977,12 +2051,64 @@ static ADDRESS_MAP_START( vp_68k_map, ADDRESS_SPACE_PROGRAM, 16 )
/* AM_RANGE(0xffd000, 0xffd00f) AM_READWRITE(characteriser16_r, characteriser16_w) Word-based version of old CHR??? */
ADDRESS_MAP_END
static ADDRESS_MAP_START( bwbvid_6809_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x0800, 0x0800) AM_DEVREADWRITE("acia6850_0", acia6850_stat_r, acia6850_ctrl_w)
AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("acia6850_0", acia6850_data_r, acia6850_data_w)
AM_RANGE(0x0880, 0x0881) //AM_NOP //Read/write here
AM_RANGE(0x0900, 0x0907) AM_DEVREADWRITE("ptm_ic2", ptm6840_read, ptm6840_write)
AM_RANGE(0x0a00, 0x0a03) AM_DEVREADWRITE("pia_ic3", pia6821_r, pia6821_w)
AM_RANGE(0x0b00, 0x0b03) AM_DEVREADWRITE("pia_ic4", pia6821_r, pia6821_w)
AM_RANGE(0x0c00, 0x0c03) AM_DEVREADWRITE("pia_ic5", pia6821_r, pia6821_w)
AM_RANGE(0x0d00, 0x0d03) AM_DEVREADWRITE("pia_ic6", pia6821_r, pia6821_w)
AM_RANGE(0x0e00, 0x0e03) AM_DEVREADWRITE("pia_ic7", pia6821_r, pia6821_w)
AM_RANGE(0x0f00, 0x0f03) AM_DEVREADWRITE("pia_ic8", pia6821_r, pia6821_w)
AM_RANGE(0x4000, 0x7fff) AM_RAM
AM_RANGE(0xbe00, 0xbfff) AM_RAM
AM_RANGE(0xc000, 0xffff) AM_ROM AM_REGION("maincpu",0) /* 64k EPROM on board, only this region read */
ADDRESS_MAP_END
static ADDRESS_MAP_START( bwbvid_68k_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x7fffff) AM_ROM
AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(&mpu4_vid_mainram)
AM_RANGE(0x810000, 0x81ffff) AM_RAM /* ? */
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_data_w, 0x00ff)
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_control_w, 0x00ff)
AM_RANGE(0xa00000, 0xa00003) AM_READWRITE(ef9369_r, ef9369_w)
// AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE(bt471_r,bt471_w) //Some games use this
/* AM_RANGE(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(mpu4_vid_scn2674_r, mpu4_vid_scn2674_w)
AM_RANGE(0xc00000, 0xc1ffff) AM_READWRITE(mpu4_vid_vidram_r, mpu4_vid_vidram_w)
AM_RANGE(0xe05000, 0xe05001) //AM_READWRITE(adpcm_r, adpcm_w) CHR ?
AM_RANGE(0xe00000, 0xe00001) AM_DEVREADWRITE8("acia6850_1", acia6850_stat_r, acia6850_ctrl_w, 0xff)
AM_RANGE(0xe00002, 0xe00003) AM_DEVREADWRITE8("acia6850_1", acia6850_data_r, acia6850_data_w, 0xff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( bwbvid5_68k_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x7fffff) AM_ROM
AM_RANGE(0x800000, 0x80ffff) AM_RAM AM_BASE(&mpu4_vid_mainram)
AM_RANGE(0x810000, 0x81ffff) AM_RAM /* ? */
AM_RANGE(0x900000, 0x900001) AM_DEVWRITE8("saa", saa1099_data_w, 0x00ff)
AM_RANGE(0x900002, 0x900003) AM_DEVWRITE8("saa", saa1099_control_w, 0x00ff)
AM_RANGE(0xa00000, 0xa00003) AM_READWRITE(ef9369_r, ef9369_w)
//AM_RANGE(0xa00000, 0xa00003) AM_READWRITE(bt471_r,bt471_w) Some games use this
/* AM_RANGE(0xa00004, 0xa0000f) AM_READWRITE(mpu4_vid_unmap_r, mpu4_vid_unmap_w) */
AM_RANGE(0xb00000, 0xb0000f) AM_READWRITE(mpu4_vid_scn2674_r, mpu4_vid_scn2674_w)
AM_RANGE(0xc00000, 0xc1ffff) AM_READWRITE(mpu4_vid_vidram_r, mpu4_vid_vidram_w)
AM_RANGE(0xe05000, 0xe05001) //AM_READWRITE(adpcm_r, adpcm_w) CHR ?
AM_RANGE(0xe00000, 0xe00001) AM_DEVREADWRITE8("acia6850_1", acia6850_stat_r, acia6850_ctrl_w, 0xff)
AM_RANGE(0xe00002, 0xe00003) AM_DEVREADWRITE8("acia6850_1", acia6850_data_r, acia6850_data_w, 0xff)
AM_RANGE(0xe01000, 0xe0100f) AM_DEVREADWRITE8("6840ptm_68k", ptm6840_read, ptm6840_write, 0xff)
AM_RANGE(0xe02000, 0xe02007) AM_DEVREADWRITE8("pia_ic4ss", pia6821_r, pia6821_w, 0xff)
AM_RANGE(0xe03000, 0xe0300f) AM_DEVREADWRITE8("6840ptm_ic3ss", ptm6840_read, ptm6840_write, 0xff)
ADDRESS_MAP_END
//
/* Deal 'Em */
/* Deal 'Em was designed as an enhanced gamecard, to fit into an existing MPU4 cabinet
It's an unoffical addon, and does all its work through the existing 6809 CPU.
Although given unofficial status, Barcrest's patent on the MPU4 Video hardware (GB1596363) describes
the Deal 'Em board design, rather than the one they ultimately used, suggesting some sort of licensing deal. */
the Deal 'Em board design, rather than the one they ultimately used, suggesting some sort of licensing deal.
Perhaps this was the (seemingly very rare) MPU3 Video card design? */
static const gfx_layout dealemcharlayout =
{
@ -2269,12 +2395,6 @@ static MACHINE_CONFIG_START( mpu4_vid, driver_device )
MCFG_PALETTE_LENGTH(16)
MCFG_PTM6840_ADD("6840ptm_68k", ptm_vid_intf)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ay8913",AY8913, MPU4_MASTER_CLOCK/4)
MCFG_SOUND_CONFIG(ay8910_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* Present on all video cards */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("saa", SAA1099, 8000000)
@ -2293,9 +2413,9 @@ static MACHINE_CONFIG_DERIVED( crmaze, mpu4_vid )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( mating, crmaze )
MCFG_SOUND_ADD("oki", OKIM6376, 64000) //?
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.5)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.5)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( vgpoker, mpu4_vid )
@ -2303,7 +2423,69 @@ static MACHINE_CONFIG_DERIVED( vgpoker, mpu4_vid )
MCFG_CPU_PROGRAM_MAP(vp_68k_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( bwbvid, driver_device )
MCFG_CPU_ADD("maincpu", M6809, MPU4_MASTER_CLOCK/4 )
MCFG_CPU_PROGRAM_MAP(bwbvid_6809_map)
MCFG_TIMER_ADD_PERIODIC("50hz",gen_50hz, attotime::from_hz(100))
MCFG_NVRAM_ADD_0FILL("nvram") /* confirm */
/* 6840 PTM */
MCFG_PTM6840_ADD("ptm_ic2", ptm_ic2_intf)
MCFG_PIA6821_ADD("pia_ic3", pia_ic3_intf)
MCFG_PIA6821_ADD("pia_ic4", pia_ic4_intf)
MCFG_PIA6821_ADD("pia_ic5", pia_ic5_intf)
MCFG_PIA6821_ADD("pia_ic6", pia_ic6_intf)
MCFG_PIA6821_ADD("pia_ic7", pia_ic7_intf)
MCFG_PIA6821_ADD("pia_ic8", pia_ic8_intf)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MCFG_SCREEN_SIZE(64*8, 40*8) // note this directly affects the scanline counters used below, and thus the timing of everything
MCFG_SCREEN_VISIBLE_AREA(0*8, 63*8-1, 0*8, 37*8-1)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_CPU_ADD("video", M68000, VIDEO_MASTER_CLOCK )
MCFG_CPU_PROGRAM_MAP(bwbvid_68k_map)
MCFG_QUANTUM_TIME(attotime::from_hz(960))
MCFG_MACHINE_START(mpu4_vid)
MCFG_MACHINE_RESET(mpu4_vid)
MCFG_VIDEO_START (mpu4_vid)
MCFG_VIDEO_UPDATE(mpu4_vid)
MCFG_PALETTE_LENGTH(16)
MCFG_PTM6840_ADD("6840ptm_68k", ptm_vid_intf)
/* Present on all video cards */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("saa", SAA1099, 8000000)
MCFG_SOUND_ROUTE(0, "lspeaker", 0.5)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.5)
MCFG_ACIA6850_ADD("acia6850_0", m6809_acia_if)
MCFG_ACIA6850_ADD("acia6850_1", m68k_acia_if)
// for the video timing
MCFG_TIMER_ADD_SCANLINE("scan_timer", scanline_timer_callback, "screen", 0, 1)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( bwbvid5, bwbvid )
MCFG_CPU_MODIFY("video")
MCFG_CPU_PROGRAM_MAP(bwbvid5_68k_map)
MCFG_PTM6840_ADD("6840ptm_ic3ss", ptm_ic3ss_intf)
MCFG_PIA6821_ADD("pia_ic4ss", pia_ic4ss_intf)
MCFG_SOUND_ADD("msm6376", OKIM6376, 64000) //?
MCFG_SOUND_ROUTE(0, "lspeaker", 0.5)
MCFG_SOUND_ROUTE(1, "rspeaker", 0.5)
MACHINE_CONFIG_END
/* machine driver for Zenitone Deal 'Em board */
static MACHINE_CONFIG_START( dealem, driver_device )
@ -2697,6 +2879,64 @@ ROM_START( bloxd )
ROM_LOAD16_BYTE( "blxv___2.0_6", 0x040001, 0x10000, CRC(a3d92b5b) SHA1(1e7042d5eae4a19a01a3ef7d806c434886dc9f4d) )
ROM_END
ROM_START( bwbtetrs )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("tetris22.p0", 0x00000, 0x04000, CRC(b711c7ae) SHA1(767b17ddf9021fdf79ff6c52f04a5d8ea60cf30e) )
ROM_REGION( 0x800000, "video", 0 )
ROM_LOAD16_BYTE( "tetris22.p1", 0x000000, 0x10000, CRC(e81dd182) SHA1(28b460224abf6fe24b637542ccd1c84040674555) )
ROM_LOAD16_BYTE( "tetris22.p2", 0x000001, 0x10000, CRC(68aa4f15) SHA1(4e4511a64391fc64e5f5b7ccb46a78fd2e1d94d6) )
ROM_LOAD16_BYTE( "tetris22.p3", 0x020000, 0x10000, CRC(b38b4763) SHA1(d28e77fdd6869cb5b5ec40ed1f300a2a947e0482) )
ROM_LOAD16_BYTE( "tetris22.p4", 0x020001, 0x10000, CRC(1649f604) SHA1(ca4ac303391a0969d41c8f988b8e81cfcee1a21c) )
ROM_LOAD16_BYTE( "tetris22.p5", 0x040001, 0x10000, CRC(02859676) SHA1(5293c767021a6b5253eecab0b0568aa082ea7084) )
ROM_LOAD16_BYTE( "tetris22.p6", 0x040001, 0x10000, CRC(40d24c82) SHA1(7ac3cf148af84ad93eaf11ce3420abbe45d986e2) )
ROM_END
/* Vegas Poker Prototype dumped by HIGHWAYMAN */
ROM_START( vgpoker )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("comms-v2.0.bin", 0x00000, 0x10000, CRC(1717581f) SHA1(40f8cae39a2ab0c89d2bbfd8a37725aaae229c96))
ROM_REGION( 0x800000, "video", 0 )
ROM_LOAD16_BYTE("video-1.bin", 0x000000, 0x010000, CRC(7ba2396c) SHA1(eb24b802b984315fc2eba4f15c208e2c1925c1c8))
ROM_LOAD16_BYTE("video-2.bin", 0x000001, 0x010000, CRC(4f9e830b) SHA1(f17bebb289c3620bf4c88b2b358a9dab87ac214f))
ROM_LOAD16_BYTE("video-3.bin", 0x020000, 0x010000, CRC(607e0baa) SHA1(9f64a46ef3b9a854e939b5e7f0d1e6e925735922))
ROM_LOAD16_BYTE("video-4.bin", 0x020001, 0x010000, CRC(2019f5d3) SHA1(d183b3b92d03be9f9d57b5df1a621cbfe955ed93))
ROM_LOAD16_BYTE("video-5.bin", 0x040000, 0x010000, CRC(c029202e) SHA1(b08bb2678c2ff62a58ef67d5440c326d0fadc34e))
ROM_LOAD16_BYTE("video-6.bin", 0x040001, 0x010000, CRC(3287ae4e) SHA1(3b05a036de3ca7ec644bfbf04934e44e631d1e28))
ROM_LOAD16_BYTE("video-7.bin", 0x060000, 0x010000, CRC(231cf163) SHA1(02b28ef0e1661a82d0fba2ecc5474c79651fa9e7))
ROM_LOAD16_BYTE("video-8.bin", 0x060001, 0x010000, CRC(076efdc8) SHA1(bef0a1d8f0e7486ee5dc7407ce5c96854cefa5cf))
ROM_END
ROM_START( renoreel )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("rr_27s__.a60", 0x00000, 0x10000, CRC(44c9ff47) SHA1(93a3155144b233c113aa3b49bd4eb5969e400a68))
ROM_REGION( 0x800000, "video", 0 )
ROM_LOAD16_BYTE( "rr______.a_1", 0x000000, 0x80000, CRC(ff27d0ba) SHA1(85cce36495f00a05c1806ecde37274212680e466) )
ROM_LOAD16_BYTE( "rr______.a_2", 0x000001, 0x80000, CRC(519b9ae1) SHA1(8ccfe8de0f2c85923df81af8cba6f20af43d2fe2) )
ROM_REGION( 0x200000, "msm6376", 0 )
ROM_LOAD( "renosnda.bin", 0x000000, 0x080000, CRC(a72a5e1b) SHA1(a0d5338a400345a55484848a7612119405f617b1) )
ROM_LOAD( "renosndb.bin", 0x080000, 0x080000, CRC(46e9a32f) SHA1(d45835a82368992597e44b3c5b9d00d8b901e733) )
ROM_END
ROM_START( redhtpkr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("rp_20s__.3_0", 0x00000, 0x10000, CRC(b7d02d22) SHA1(f9da1c6dde064bc39d0c48a165dac7acde933397))
ROM_REGION( 0x800000, "video", 0 )
ROM_LOAD16_BYTE("rp______.3_1", 0x000000, 0x010000, CRC(b987406d) SHA1(8c4d386570c0c6298b1cabf50295021b3b0cf625))
ROM_LOAD16_BYTE("rp______.3_2", 0x000001, 0x010000, CRC(73e3c12e) SHA1(19e3ed7255fa0c3bfa14b6a4b705c0c3e1a237b6))
ROM_LOAD16_BYTE("rp______.3_3", 0x020000, 0x010000, CRC(05a30183) SHA1(302f4926073bf7335da7f0b1e6399b64ea9bbae4))
ROM_LOAD16_BYTE("rp______.3_4", 0x020001, 0x010000, CRC(6b122765) SHA1(72cd0fda322790bed8cdc7697306ec01efc43789))
ROM_LOAD16_BYTE("rp______.3_5", 0x040000, 0x010000, CRC(d9fd05d0) SHA1(330ef58c012b5d5fd018bea54b3ae315b3e45cfd))
ROM_LOAD16_BYTE("rp______.3_6", 0x040001, 0x010000, CRC(eeea91ff) SHA1(cc7870a68f62d4dd70c13713a432a61a091821ef))
ROM_END
ROM_START( crmaze )
ROM_REGION( 0x10000, "maincpu", 0 )
VID_BIOS
@ -3122,21 +3362,6 @@ ROM_START( quidgrid2d )
ROM_END
/* Vegas Poker Prototype dumped by HIGHWAYMAN */
ROM_START( vgpoker )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("comms-v2.0.bin", 0x00000, 0x10000, CRC(1717581f) SHA1(40f8cae39a2ab0c89d2bbfd8a37725aaae229c96))
ROM_REGION( 0x800000, "video", 0 )
ROM_LOAD16_BYTE("video-1.bin", 0x000000, 0x010000, CRC(7ba2396c) SHA1(eb24b802b984315fc2eba4f15c208e2c1925c1c8))
ROM_LOAD16_BYTE("video-2.bin", 0x000001, 0x010000, CRC(4f9e830b) SHA1(f17bebb289c3620bf4c88b2b358a9dab87ac214f))
ROM_LOAD16_BYTE("video-3.bin", 0x020000, 0x010000, CRC(607e0baa) SHA1(9f64a46ef3b9a854e939b5e7f0d1e6e925735922))
ROM_LOAD16_BYTE("video-4.bin", 0x020001, 0x010000, CRC(2019f5d3) SHA1(d183b3b92d03be9f9d57b5df1a621cbfe955ed93))
ROM_LOAD16_BYTE("video-5.bin", 0x040000, 0x010000, CRC(c029202e) SHA1(b08bb2678c2ff62a58ef67d5440c326d0fadc34e))
ROM_LOAD16_BYTE("video-6.bin", 0x040001, 0x010000, CRC(3287ae4e) SHA1(3b05a036de3ca7ec644bfbf04934e44e631d1e28))
ROM_LOAD16_BYTE("video-7.bin", 0x060000, 0x010000, CRC(231cf163) SHA1(02b28ef0e1661a82d0fba2ecc5474c79651fa9e7))
ROM_LOAD16_BYTE("video-8.bin", 0x060001, 0x010000, CRC(076efdc8) SHA1(bef0a1d8f0e7486ee5dc7407ce5c96854cefa5cf))
ROM_END
/*Deal 'Em was a conversion kit designed to make early MPU4 machines into video games by replacing the top glass
and reel assembly with this kit and a supplied monitor.
The real Deal 'Em ran on Summit Coin hardware, and was made by someone else.
@ -3192,8 +3417,11 @@ GAME( 199?, quidgridd, quidgrid, mpu4_vid, mpu4, quidgrid, ROT0, "Barcrest"
GAME( 199?, quidgrid2, quidgrid, mpu4_vid, mpu4, quidgrid, ROT0, "Barcrest", "Ten Quid Grid (v2.4)", GAME_NOT_WORKING )
GAME( 199?, quidgrid2d,quidgrid, mpu4_vid, mpu4, quidgrid, ROT0, "Barcrest", "Ten Quid Grid (v2.4, Datapak)", GAME_NOT_WORKING )
/* Games below are newer BwB games and use their own BIOS ROMs */
/* Games below are newer BwB games and use their own BIOS ROMs and hardware setups*/
GAME( 199?, vgpoker, 0, vgpoker, mpu4, 0, ROT0, "BwB", "Vegas Poker (prototype, release 2)", GAME_NOT_WORKING )
GAME( 199?, prizeinv, 0, mpu4_vid, mpu4, 0, ROT0, "BwB", "Prize Space Invaders (20\" v1.1)", GAME_NOT_WORKING )
GAME( 199?, blox, 0, mpu4_vid, mpu4, 0, ROT0, "BwB", "Blox (v2.0)", GAME_NOT_WORKING )
GAME( 199?, bloxd, blox, mpu4_vid, mpu4, 0, ROT0, "BwB", "Blox (v2.0, Datapak)", GAME_NOT_WORKING )
GAME( 199?, prizeinv, 0, bwbvid, mpu4, 0, ROT0, "BwB", "Prize Space Invaders (20\" v1.1)", GAME_NOT_WORKING )
GAME( 199?, blox, 0, bwbvid, mpu4, 0, ROT0, "BwB", "Blox (v2.0)", GAME_NOT_WORKING )
GAME( 199?, bloxd, blox, bwbvid, mpu4, 0, ROT0, "BwB", "Blox (v2.0, Datapak)", GAME_NOT_WORKING )
GAME( 1996, renoreel, 0, bwbvid5, mpu4, 0, ROT0, "BwB", "Reno Reels (20p/10GBP Cash, release A)", GAME_NOT_WORKING )
GAME( 199?, redhtpkr, 0, bwbvid, mpu4, 0, ROT0, "BwB", "Red Hot Poker (20p/10GBP Cash, release 3)", GAME_NOT_WORKING )
GAME( 199?, bwbtetrs, 0, bwbvid, mpu4, 0, ROT0, "BwB", "BwB Tetris v 2.2", GAME_NOT_WORKING )

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,6 @@
// //
// Electro mechanical meters //
// //
// 23-07-2004: Re-Animator //
// //
// TODO: - meter ticks if the signal changes from high to low AND the //
// signal was high for at least 'reacttime' cycles //
// It should tick if the signal goes from low to high AND stays //
// high for at least xxx milliseconds //
// //
///////////////////////////////////////////////////////////////////////////
@ -18,72 +12,84 @@
static struct
{
long timestamp, // time stamp in cycles after which timer will tick
reacttime,
count; // mechmeter value
int state; // state 0/1
long on, // Activity of reel
reacttime,
count; // mechmeter value
int state; // state 0/1
emu_timer *meter_timer;
} meter_info[MAXMECHMETERS];
static int number_mtr;
///////////////////////////////////////////////////////////////////////////
void Mechmtr_init(int number)
static TIMER_CALLBACK( meter_callback )
{
int i;
meter_info[param].count++;
}
if ( number > MAXMECHMETERS ) number = MAXMECHMETERS;
void MechMtr_config(running_machine *machine, int number)
{
int i;
for ( i = 0; i < number; i++ )
{
meter_info[i].reacttime = METERREACTTIME;
meter_info[i].state = 0;
meter_info[i].count = 0;
meter_info[i].timestamp = 0;
}
number_mtr = number;
if ( number > MAXMECHMETERS ) number = MAXMECHMETERS;
for ( i = 0; i < number; i++ )
{
meter_info[i].reacttime = METERREACTTIME;
meter_info[i].state = 0;
meter_info[i].count = 0;
meter_info[i].on = 0;
meter_info[i].meter_timer = timer_alloc(machine, meter_callback, (void*)(FPTR)i);
timer_reset(meter_info[i].meter_timer, attotime::never);
}
number_mtr = number;
}
///////////////////////////////////////////////////////////////////////////
int MechMtr_GetNumberMeters(void)
int MechMtr_GetNumberMeters(void)
{
return number_mtr;
return number_mtr;
}
///////////////////////////////////////////////////////////////////////////
void MechMtr_Setcount(int id, long count)
{
if ( id >= number_mtr ) return;
if ( id >= number_mtr ) return;
meter_info[id].count = count;
meter_info[id].count = count;
}
///////////////////////////////////////////////////////////////////////////
long MechMtr_Getcount(int id)
{
long result = 0;
long result = 0;
if ( id < number_mtr ) result = meter_info[id].count;
if ( id < number_mtr ) result = meter_info[id].count;
return result;
return result;
}
///////////////////////////////////////////////////////////////////////////
void MechMtr_ReactTime(int id, long cycles)
{
if ( id >= number_mtr ) return;
meter_info[id].reacttime = cycles;
if ( id >= number_mtr ) return;
meter_info[id].reacttime = cycles;
}
///////////////////////////////////////////////////////////////////////////
int Mechmtr_update(int id, long cycles, int state)
int MechMtr_GetActivity(int id)
{
return meter_info[id].on;
}
///////////////////////////////////////////////////////////////////////////
int MechMtr_update(int id, int state)
{
int res = 0;
@ -97,15 +103,13 @@ int Mechmtr_update(int id, long cycles, int state)
if ( state )
{
meter_info[id].timestamp = cycles + meter_info[id].reacttime;
meter_info[id].on =1;
timer_adjust_oneshot(meter_info[id].meter_timer, attotime::from_seconds(meter_info[id].reacttime), id);
}
else
{
if ( cycles > meter_info[id].timestamp )
{ // meter has been active long enough
res = 1;
meter_info[id].count++;
}
meter_info[id].on =0;
timer_adjust_oneshot(meter_info[id].meter_timer, attotime::never, id);
}
}

View File

@ -4,21 +4,22 @@
// //
// 23-07-2004: Re-Animator //
// //
// TODO: - meter ticks if the signal changes from high to low AND the //
// signal was high for at least 'reacttime' cycles //
// It should tick if the signal goes from low to high AND stays //
// high for at least xxx milliseconds //
// //
///////////////////////////////////////////////////////////////////////////
#ifndef INC_MMTR
#define INC_MMTR
#pragma once
#ifndef __METERS_H__
#define __METERS_H__
#include "emu.h"
#define MAXMECHMETERS 8
#define METERREACTTIME 30000 // number of cycles meter has to be active to tick
#define METERREACTTIME 0.025 // number of seconds meter has to be active to tick
void Mechmtr_init( int number);
void MechMtr_config(running_machine *machine, int number);
int MechMtr_GetNumberMeters(void);
@ -28,6 +29,7 @@ long MechMtr_Getcount( int id);
void MechMtr_ReactTime(int id, long cycles);
int Mechmtr_update( int id, long cycles, int state); // returns 1 if meter ticked
int MechMtr_update( int id, int state);
int MechMtr_GetActivity(int id);
#endif

View File

@ -11,7 +11,8 @@
// 05-03-2004: Re-Animator //
// //
// TODO: add different types of stepper motors if needed //
// //
// someone who understands the device system may want to convert //
// this //
///////////////////////////////////////////////////////////////////////////
#include "emu.h"
@ -344,7 +345,7 @@ static const int BarcrestStepTab[] =
0, //0001->0110 1->6
0, //0001->0111 1->7
0, //0001->1000 1->8
-1,//0001->1001 1->9
-1,//0001->1001 1->9 -1,//1001->1000 9->8
0, //0001->1010 1->A
0, //0001->1011 1->B
0, //0001->1100 1->C
@ -660,17 +661,31 @@ static void update_optic(int which)
start = step[which].index_start,
end = step[which].index_end;
if ( (( pos >= start ) && ( pos <= end )) &&
if (start > end) // cope with index patterns that wrap around
{
if ( (( pos > start ) || ( pos < end )) &&
( ( step[which].pattern == step[which].index_patt || step[which].index_patt==0) ||
( step[which].pattern == 0 &&
(step[which].old_pattern == step[which].index_patt || step[which].index_patt==0)
) ) )
{
step[which].optic = 1;
}
else step[which].optic = 0;
}
else
{
if ( (( pos > start ) && ( pos < end )) &&
( ( step[which].pattern == step[which].index_patt || step[which].index_patt==0) ||
( step[which].pattern == 0 &&
(step[which].old_pattern == step[which].index_patt || step[which].index_patt==0)
) ) )
{
step[which].optic = 1;
}
else step[which].optic = 0;
}
else step[which].optic = 0;
}
///////////////////////////////////////////////////////////////////////////
void stepper_reset_position(int which)
@ -729,7 +744,7 @@ int stepper_update(int which, UINT8 pattern)
break;
}
#if 0 /* Assists with new index generation */
if ( which ==0 )logerror("which %d Index %d Steps %d Pattern Old %02X New %02X\n",which,index,steps,step[which].old_pattern,step[which].pattern);
if ( which ==0 )popmessage("which %d Index %d Steps %d Pattern Old %02X New %02X\n",which,index,steps,step[which].old_pattern,step[which].pattern);
#endif
if ( steps )

View File

@ -1,22 +1,18 @@
///////////////////////////////////////////////////////////////////////////
// //
// Steppermotor emulation //
// steppers.c steppermotor emulation //
// //
// Emulates : 48 step motors driven with full step or half step //
// also emulates the index optic //
// //
// 13-08-2008: J. Wallace - Added a rigid interface structure, //
// and removed unnecessary inline functions //
// Rewritten to make it more flexible //
// 26-01-2007: J. Wallace - Rewritten to make it more flexible //
// 26-01-2007: J. Wallace - Rewritten to make it more flexible //
// 26-01-2007: J. Wallace - Rewritten to make it more flexible //
// and to allow indices to be set in drivers //
// 29-12-2006: J. Wallace - Added state save support //
// 05-03-2004: Re-Animator //
// //
// TODO: add different types of stepper motors if needed //
// //
// someone who understands the device system may want to convert //
// this //
///////////////////////////////////////////////////////////////////////////

View File

@ -1876,6 +1876,7 @@ $(DRIVERS)/mpoker.o: $(LAYOUT)/mpoker.lh
$(DRIVERS)/mpu4.o: $(LAYOUT)/mpu4.lh \
$(LAYOUT)/connect4.lh \
$(LAYOUT)/mpu4ext.lh \
$(LAYOUT)/gamball.lh
$(DRIVERS)/mw18w.o: $(LAYOUT)/18w.lh

View File

@ -8963,10 +8963,14 @@ Other Sun games
DRIVER( eyesdown ) /* 199? */
DRIVER( eyesdownd ) /* 199? */
/* BwB games */
DRIVER( blox ) /* 199? */
DRIVER( bloxd ) /* 199? */
DRIVER( bwbtetrs ) /* 199? */
DRIVER( prizeinv ) /* 199? */
DRIVER( vgpoker ) /* 199? */
DRIVER( renoreel ) /* 199? */
DRIVER( redhtpkr ) /* 199? */
/* ADP games */
DRIVER( backgamn ) /* (c) 1990 */
@ -10564,6 +10568,7 @@ Other Sun games
DRIVER( m_oldtmr ) /* Barcrest - highly prelim*/
DRIVER( m_ccelbr )
DRIVER( m_gmball )
DRIVER( m_grtecp ) /* 199? */
/* MPU5 */
DRIVER( m_honmon )