Convert steppers to device_t
This commit is contained in:
parent
a4bdd8af85
commit
824889c03a
@ -160,6 +160,10 @@ static MACHINE_CONFIG_FRAGMENT( epson_lx810l )
|
||||
|
||||
/* 256-bit eeprom */
|
||||
MCFG_EEPROM_SERIAL_93C06_ADD("eeprom")
|
||||
|
||||
/* steppers */
|
||||
MCFG_DEVICE_ADD("pf_stepper", STEPPER, 0)
|
||||
MCFG_DEVICE_ADD("cr_stepper", STEPPER, 0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -278,6 +282,8 @@ epson_lx810l_t::epson_lx810l_t(const machine_config &mconfig, const char *tag, d
|
||||
device_t(mconfig, EPSON_LX810L, "Epson LX-810L", tag, owner, clock, "lx810l", __FILE__),
|
||||
device_centronics_peripheral_interface(mconfig, *this),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_pf_stepper(*this, "pf_stepper"),
|
||||
m_cr_stepper(*this, "cr_stepper"),
|
||||
m_eeprom(*this, "eeprom"),
|
||||
m_speaker(*this, "speaker"),
|
||||
m_e05a30(*this, "e05a30"),
|
||||
@ -296,6 +302,8 @@ epson_lx810l_t::epson_lx810l_t(const machine_config &mconfig, device_type type,
|
||||
device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__),
|
||||
device_centronics_peripheral_interface(mconfig, *this),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_pf_stepper(*this, "pf_stepper"),
|
||||
m_cr_stepper(*this, "cr_stepper"),
|
||||
m_eeprom(*this, "eeprom"),
|
||||
m_speaker(*this, "speaker"),
|
||||
m_e05a30(*this, "e05a30"),
|
||||
@ -339,8 +347,8 @@ static const stepper_interface lx810l_cr_stepper =
|
||||
|
||||
void epson_lx810l_t::device_start()
|
||||
{
|
||||
stepper_config(machine(), 0, &lx810l_pf_stepper);
|
||||
stepper_config(machine(), 1, &lx810l_cr_stepper);
|
||||
m_pf_stepper->configure(&lx810l_pf_stepper);
|
||||
m_cr_stepper->configure(&lx810l_cr_stepper);
|
||||
}
|
||||
|
||||
|
||||
@ -515,8 +523,8 @@ WRITE16_MEMBER( epson_lx810l_t::printhead )
|
||||
|
||||
WRITE8_MEMBER( epson_lx810l_t::pf_stepper )
|
||||
{
|
||||
stepper_update(0, data);
|
||||
m_pf_pos_abs = 200 - stepper_get_absolute_position(0);
|
||||
m_pf_stepper->update(data);
|
||||
m_pf_pos_abs = 200 - m_pf_stepper->get_absolute_position();
|
||||
|
||||
LX810LLOG("%s: %s(%02x); abs %d\n", machine().describe_context(), __func__, data, m_pf_pos_abs);
|
||||
}
|
||||
@ -525,8 +533,8 @@ WRITE8_MEMBER( epson_lx810l_t::cr_stepper )
|
||||
{
|
||||
int m_cr_pos_abs_prev = m_cr_pos_abs;
|
||||
|
||||
stepper_update(1, data);
|
||||
m_cr_pos_abs = 200 - stepper_get_absolute_position(1);
|
||||
m_cr_stepper->update(data);
|
||||
m_cr_pos_abs = 200 - m_cr_stepper->get_absolute_position();
|
||||
|
||||
if (m_cr_pos_abs > m_cr_pos_abs_prev) {
|
||||
/* going right */
|
||||
|
@ -100,6 +100,8 @@ protected:
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_pf_stepper;
|
||||
required_device<stepper_device> m_cr_stepper;
|
||||
required_device<eeprom_serial_93cxx_device> m_eeprom;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_device<e05a30_device> m_e05a30;
|
||||
|
@ -28,8 +28,6 @@
|
||||
// 05-03-2004: Re-Animator //
|
||||
// //
|
||||
// TODO: add further types of stepper motors if needed (Konami/IGT?) //
|
||||
// Someone who understands the device system may want to convert //
|
||||
// this //
|
||||
// 200 Step reels can alter their relative opto tab position, //
|
||||
// may be worth adding the phase setting to the interface //
|
||||
// There are reports that some games use a pulse that is too short//
|
||||
@ -41,34 +39,6 @@
|
||||
#include "emu.h"
|
||||
#include "steppers.h"
|
||||
|
||||
/* local prototypes */
|
||||
|
||||
static void update_optic(int which);
|
||||
|
||||
/* local vars */
|
||||
|
||||
struct stepper
|
||||
{
|
||||
const stepper_interface *intf;
|
||||
UINT8 pattern, /* coil pattern */
|
||||
old_pattern, /* old coil pattern */
|
||||
initphase,
|
||||
phase, /* motor phase */
|
||||
old_phase, /* old phase */
|
||||
type; /* reel type */
|
||||
INT16 step_pos, /* step position 0 - max_steps */
|
||||
max_steps; /* maximum step position */
|
||||
INT32 abs_step_pos; /* absolute step position */
|
||||
|
||||
INT16 index_start, /* start position of index (in half steps) */
|
||||
index_end, /* end position of index (in half steps) */
|
||||
index_patt; /* pattern needed on coils (0=don't care) */
|
||||
|
||||
UINT8 optic;
|
||||
};
|
||||
|
||||
static stepper step[MAX_STEPPERS];
|
||||
|
||||
/* useful interfaces (Starpoint is a very common setup)*/
|
||||
const stepper_interface starpoint_interface_48step =
|
||||
{
|
||||
@ -108,148 +78,123 @@ const stepper_interface ecoin_interface_200step_reel =
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
void stepper_config(running_machine &machine, int which, const stepper_interface *intf)
|
||||
void stepper_device::configure(const stepper_interface *intf)
|
||||
{
|
||||
assert_always(machine.phase() == MACHINE_PHASE_INIT, "Can only call stepper_config at init time!");
|
||||
assert_always((which >= 0) && (which < MAX_STEPPERS), "stepper_config called on an invalid stepper motor!");
|
||||
assert_always(intf, "stepper_config called with an invalid interface!");
|
||||
assert_always(machine().phase() == MACHINE_PHASE_INIT, "Can only call configure at init time!");
|
||||
assert_always(intf, "configure called with an invalid interface!");
|
||||
|
||||
step[which].intf = intf;
|
||||
|
||||
step[which].type = intf->type;
|
||||
step[which].index_start = intf->index_start;/* location of first index value in half steps */
|
||||
step[which].index_end = intf->index_end; /* location of last index value in half steps */
|
||||
step[which].index_patt = intf->index_patt; /* hex value of coil pattern (0 if not needed)*/
|
||||
step[which].initphase = intf->initphase; /* Phase at 0 steps, for alignment) */
|
||||
m_type = intf->type;
|
||||
m_index_start = intf->index_start; /* location of first index value in half steps */
|
||||
m_index_end = intf->index_end; /* location of last index value in half steps */
|
||||
m_index_patt = intf->index_patt; /* hex value of coil pattern (0 if not needed)*/
|
||||
m_initphase = intf->initphase; /* Phase at 0 steps, for alignment) */
|
||||
|
||||
|
||||
step[which].pattern = 0;
|
||||
step[which].old_pattern = 0;
|
||||
step[which].step_pos = 0;
|
||||
step[which].abs_step_pos= 0;
|
||||
step[which].phase = step[which].initphase;
|
||||
step[which].old_phase = step[which].initphase;
|
||||
m_pattern = 0;
|
||||
m_old_pattern = 0;
|
||||
m_step_pos = 0;
|
||||
m_abs_step_pos = 0;
|
||||
m_phase = m_initphase;
|
||||
m_old_phase = m_initphase;
|
||||
|
||||
|
||||
switch ( step[which].type )
|
||||
switch ( m_type )
|
||||
{ default:
|
||||
case STARPOINT_48STEP_REEL: /* STARPOINT RMxxx */
|
||||
case BARCREST_48STEP_REEL : /* Barcrest Reel unit */
|
||||
case MPU3_48STEP_REEL :
|
||||
case GAMESMAN_48STEP_REEL : /* Gamesman GMxxxx */
|
||||
case PROJECT_48STEP_REEL :
|
||||
step[which].max_steps = (48*2);
|
||||
m_max_steps = (48*2);
|
||||
break;
|
||||
case GAMESMAN_100STEP_REEL :
|
||||
step[which].max_steps = (100*2);
|
||||
m_max_steps = (100*2);
|
||||
break;
|
||||
case STARPOINT_144STEP_DICE :/* STARPOINT 1DCU DICE mechanism */
|
||||
//Dice reels are 48 step motors, but complete three full cycles between opto updates
|
||||
step[which].max_steps = ((48*3)*2);
|
||||
m_max_steps = ((48*3)*2);
|
||||
break;
|
||||
case STARPOINT_200STEP_REEL :
|
||||
case GAMESMAN_200STEP_REEL :
|
||||
case ECOIN_200STEP_REEL :
|
||||
step[which].max_steps = (200*2);
|
||||
m_max_steps = (200*2);
|
||||
break;
|
||||
}
|
||||
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].index_start);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].index_end);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].index_patt);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].initphase);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].phase);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].old_phase);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].pattern);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].old_pattern);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].step_pos);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].abs_step_pos);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].max_steps);
|
||||
state_save_register_item(machine, "stepper", NULL, which, step[which].type);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
int stepper_get_position(int which)
|
||||
{
|
||||
return step[which].step_pos;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
int stepper_get_absolute_position(int which)
|
||||
{
|
||||
return step[which].abs_step_pos;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int stepper_get_max(int which)
|
||||
void stepper_device::update_optic()
|
||||
{
|
||||
return step[which].max_steps;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void update_optic(int which)
|
||||
{
|
||||
int pos = step[which].step_pos,
|
||||
start = step[which].index_start,
|
||||
end = step[which].index_end;
|
||||
int pos = m_step_pos,
|
||||
start = m_index_start,
|
||||
end = m_index_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)
|
||||
( ( m_pattern == m_index_patt || m_index_patt==0) ||
|
||||
( m_pattern == 0 &&
|
||||
(m_old_pattern == m_index_patt || m_index_patt==0)
|
||||
) ) )
|
||||
{
|
||||
step[which].optic = 1;
|
||||
m_optic = 1;
|
||||
}
|
||||
else step[which].optic = 0;
|
||||
else m_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)
|
||||
( ( m_pattern == m_index_patt || m_index_patt==0) ||
|
||||
( m_pattern == 0 &&
|
||||
(m_old_pattern == m_index_patt || m_index_patt==0)
|
||||
) ) )
|
||||
{
|
||||
step[which].optic = 1;
|
||||
m_optic = 1;
|
||||
}
|
||||
else step[which].optic = 0;
|
||||
}
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void stepper_reset_position(int which)
|
||||
{
|
||||
step[which].step_pos = 0x00;
|
||||
step[which].abs_step_pos= 0x00;
|
||||
step[which].pattern = 0x00;
|
||||
step[which].old_pattern = 0x00;
|
||||
step[which].phase = step[which].initphase;
|
||||
step[which].old_phase = step[which].initphase;
|
||||
update_optic(which);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int stepper_optic_state(int which)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
if ( which < MAX_STEPPERS )
|
||||
{
|
||||
result = step[which].optic;
|
||||
else m_optic = 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
m_optic_cb(m_optic);
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void stepper_device::device_start()
|
||||
{
|
||||
/* resolve callbacks */
|
||||
m_optic_cb.resolve_safe();
|
||||
|
||||
/* register for state saving */
|
||||
save_item(NAME(m_index_start));
|
||||
save_item(NAME(m_index_end));
|
||||
save_item(NAME(m_index_patt));
|
||||
save_item(NAME(m_initphase));
|
||||
save_item(NAME(m_phase));
|
||||
save_item(NAME(m_old_phase));
|
||||
save_item(NAME(m_pattern));
|
||||
save_item(NAME(m_old_pattern));
|
||||
save_item(NAME(m_step_pos));
|
||||
save_item(NAME(m_abs_step_pos));
|
||||
save_item(NAME(m_max_steps));
|
||||
save_item(NAME(m_type));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int stepper_update(int which, UINT8 pattern)
|
||||
void stepper_device::device_reset()
|
||||
{
|
||||
m_step_pos = 0x00;
|
||||
m_abs_step_pos = 0x00;
|
||||
m_pattern = 0x00;
|
||||
m_old_pattern = 0x00;
|
||||
m_phase = m_initphase;
|
||||
m_old_phase = m_initphase;
|
||||
update_optic();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int stepper_device::update(UINT8 pattern)
|
||||
{
|
||||
int changed = 0;
|
||||
|
||||
@ -271,11 +216,11 @@ int stepper_update(int which, UINT8 pattern)
|
||||
*/
|
||||
|
||||
int pos,steps=0;
|
||||
step[which].pattern = pattern;
|
||||
switch ( step[which].type )
|
||||
m_pattern = pattern;
|
||||
switch ( m_type )
|
||||
{
|
||||
default:
|
||||
logerror("No reel type specified for %x!\n",which);
|
||||
logerror("No reel type specified!\n");
|
||||
break;
|
||||
case STARPOINT_48STEP_REEL : /* STARPOINT RMxxx */
|
||||
case GAMESMAN_200STEP_REEL : /* Gamesman GMxxxx */
|
||||
@ -287,51 +232,51 @@ int stepper_update(int which, UINT8 pattern)
|
||||
switch (pattern)
|
||||
{ //Black Blue Red Yellow
|
||||
case 0x02:// 0 0 1 0
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
break;
|
||||
case 0x06:// 0 1 1 0
|
||||
step[which].phase = 6;
|
||||
m_phase = 6;
|
||||
break;
|
||||
case 0x04:// 0 1 0 0
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
break;
|
||||
case 0x05:// 0 1 0 1
|
||||
step[which].phase = 4;
|
||||
m_phase = 4;
|
||||
break;
|
||||
case 0x01:// 0 0 0 1
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
break;
|
||||
case 0x09:// 1 0 0 1
|
||||
step[which].phase = 2;
|
||||
m_phase = 2;
|
||||
break;
|
||||
case 0x08:// 1 0 0 0
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
break;
|
||||
case 0x0A:// 1 0 1 0
|
||||
step[which].phase = 0;
|
||||
m_phase = 0;
|
||||
break;
|
||||
// Black Blue Red Yellow
|
||||
case 0x03:// 0 0 1 1
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
{
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
}
|
||||
else //otherwise it will line up due south
|
||||
{
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x0C:// 1 1 0 0
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
{
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
}
|
||||
else //otherwise it will line up due west
|
||||
{
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -347,54 +292,54 @@ int stepper_update(int which, UINT8 pattern)
|
||||
{
|
||||
// Yellow Brown Orange Black
|
||||
case 0x01:// 0 0 0 1
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
break;
|
||||
case 0x03:// 0 0 1 1
|
||||
step[which].phase = 6;
|
||||
m_phase = 6;
|
||||
break;
|
||||
case 0x02:// 0 0 1 0
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
break;
|
||||
case 0x06:// 0 1 1 0
|
||||
step[which].phase = 4;
|
||||
m_phase = 4;
|
||||
break;
|
||||
case 0x04:// 0 1 0 0
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
break;
|
||||
case 0x0C:// 1 1 0 0
|
||||
step[which].phase = 2;
|
||||
m_phase = 2;
|
||||
break;
|
||||
case 0x08:// 1 0 0 0
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
break;//YOLB
|
||||
case 0x09:// 1 0 0 1
|
||||
step[which].phase = 0;
|
||||
m_phase = 0;
|
||||
break;
|
||||
|
||||
// The below values should not be used by anything sane, as they effectively ignore one stator side entirely
|
||||
// Yellow Brown Orange Black
|
||||
case 0x05:// 0 1 0 1
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
{
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
}
|
||||
else //otherwise it will line up due south
|
||||
{
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x0A:// 1 0 1 0
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
{
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
}
|
||||
else //otherwise it will line up due west
|
||||
{
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -410,16 +355,16 @@ int stepper_update(int which, UINT8 pattern)
|
||||
{
|
||||
// Yellow(2) Brown(1) Orange(!2) Black(!1)
|
||||
case 0x00 :// 0 0 1 1
|
||||
step[which].phase = 6;
|
||||
m_phase = 6;
|
||||
break;
|
||||
case 0x01 :// 0 1 1 0
|
||||
step[which].phase = 4;
|
||||
m_phase = 4;
|
||||
break;
|
||||
case 0x03 :// 1 1 0 0
|
||||
step[which].phase = 2;
|
||||
m_phase = 2;
|
||||
break;
|
||||
case 0x02 :// 1 0 0 1
|
||||
step[which].phase = 0;
|
||||
m_phase = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -431,50 +376,50 @@ int stepper_update(int which, UINT8 pattern)
|
||||
switch (pattern)
|
||||
{
|
||||
case 0x08:// 0 0 1 0
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
break;
|
||||
case 0x0c:// 0 1 1 0
|
||||
step[which].phase = 6;
|
||||
m_phase = 6;
|
||||
break;
|
||||
case 0x04:// 0 1 0 0
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
break;
|
||||
case 0x06:// 0 1 0 1
|
||||
step[which].phase = 4;
|
||||
m_phase = 4;
|
||||
break;
|
||||
case 0x02:// 0 0 0 1
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
break;
|
||||
case 0x03:// 1 0 0 1
|
||||
step[which].phase = 2;
|
||||
m_phase = 2;
|
||||
break;
|
||||
case 0x01:// 1 0 0 0
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
break;
|
||||
case 0x09:// 1 0 1 0
|
||||
step[which].phase = 0;
|
||||
m_phase = 0;
|
||||
break;
|
||||
case 0x0a:// 0 0 1 1
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
{
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
}
|
||||
else //otherwise it will line up due south
|
||||
{
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x07:// 1 1 0 0
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
{
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
}
|
||||
else //otherwise it will line up due west
|
||||
{
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -488,50 +433,50 @@ int stepper_update(int which, UINT8 pattern)
|
||||
switch (pattern)
|
||||
{
|
||||
case 0x08:// 0 0 1 0
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
break;
|
||||
case 0x0c:// 0 1 1 0
|
||||
step[which].phase = 6;
|
||||
m_phase = 6;
|
||||
break;
|
||||
case 0x04:// 0 1 0 0
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
break;
|
||||
case 0x05:// 0 1 0 1
|
||||
step[which].phase = 4;
|
||||
m_phase = 4;
|
||||
break;
|
||||
case 0x01:// 0 0 0 1
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
break;
|
||||
case 0x03:// 1 0 0 1
|
||||
step[which].phase = 2;
|
||||
m_phase = 2;
|
||||
break;
|
||||
case 0x02:// 1 0 0 0
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
break;
|
||||
case 0x0a:// 1 0 1 0
|
||||
step[which].phase = 0;
|
||||
m_phase = 0;
|
||||
break;
|
||||
case 0x09:// 0 0 1 1
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 0)) // if the previous pattern had the drum in the northern quadrant, it will point north now
|
||||
{
|
||||
step[which].phase = 7;
|
||||
m_phase = 7;
|
||||
}
|
||||
else //otherwise it will line up due south
|
||||
{
|
||||
step[which].phase = 3;
|
||||
m_phase = 3;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x06:// 1 1 0 0
|
||||
{
|
||||
if ((step[which].old_phase ==6)||(step[which].old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
if ((m_old_phase ==6)||(m_old_phase == 4)) // if the previous pattern had the drum in the eastern quadrant, it will point east now
|
||||
{
|
||||
step[which].phase = 5;
|
||||
m_phase = 5;
|
||||
}
|
||||
else //otherwise it will line up due west
|
||||
{
|
||||
step[which].phase = 1;
|
||||
m_phase = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -542,7 +487,7 @@ int stepper_update(int which, UINT8 pattern)
|
||||
|
||||
}
|
||||
|
||||
steps = step[which].old_phase - step[which].phase;
|
||||
steps = m_old_phase - m_phase;
|
||||
|
||||
if (steps < -4)
|
||||
{
|
||||
@ -553,29 +498,25 @@ int stepper_update(int which, UINT8 pattern)
|
||||
steps = steps -8;
|
||||
}
|
||||
|
||||
step[which].old_phase = step[which].phase;
|
||||
step[which].old_pattern = step[which].pattern;
|
||||
m_old_phase = m_phase;
|
||||
m_old_pattern = m_pattern;
|
||||
|
||||
int max = step[which].max_steps;
|
||||
int max = m_max_steps;
|
||||
pos = 0;
|
||||
|
||||
if (max!=0)
|
||||
{
|
||||
step[which].abs_step_pos += steps;
|
||||
pos = (step[which].step_pos + steps + max) % max;
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("step[%x].max_steps == 0\n",which);
|
||||
m_abs_step_pos += steps;
|
||||
pos = (m_step_pos + steps + max) % max;
|
||||
}
|
||||
|
||||
if (pos != step[which].step_pos)
|
||||
if (pos != m_step_pos)
|
||||
{
|
||||
changed++;
|
||||
}
|
||||
|
||||
step[which].step_pos = pos;
|
||||
update_optic(which);
|
||||
m_step_pos = pos;
|
||||
update_optic();
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
@ -7,8 +7,6 @@
|
||||
// //
|
||||
// //
|
||||
// TODO: add further types of stepper motors if needed (Konami/IGT?) //
|
||||
// Someone who understands the device system may want to convert //
|
||||
// this //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@ -49,17 +47,57 @@ extern const stepper_interface starpointrm20_interface_48step;
|
||||
extern const stepper_interface starpoint_interface_200step_reel;
|
||||
extern const stepper_interface ecoin_interface_200step_reel;
|
||||
|
||||
void stepper_config(running_machine &machine, int which, const stepper_interface *intf);
|
||||
|
||||
void stepper_reset_position(int id); /* reset a motor to position 0 */
|
||||
#define MCFG_STEPPER_OPTIC_CALLBACK(_write) \
|
||||
devcb = &stepper_device::set_optic_handler(*device, DEVCB_##_write);
|
||||
|
||||
int stepper_optic_state( int id); /* read a motor's optics */
|
||||
class stepper_device;
|
||||
const device_type STEPPER = &device_creator<stepper_device>;
|
||||
|
||||
int stepper_update(int id, UINT8 pattern); /* update a motor */
|
||||
class stepper_device : public device_t
|
||||
{
|
||||
public:
|
||||
stepper_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, STEPPER, "Stepper Motor", tag, owner, clock, "stepper", __FILE__),
|
||||
m_optic_cb(*this)
|
||||
{ }
|
||||
|
||||
int stepper_get_position(int id); /* get current position in half steps */
|
||||
template<class _Object> static devcb_base &set_optic_handler(device_t &device, _Object object) { return downcast<stepper_device &>(device).m_optic_cb.set_callback(object); }
|
||||
|
||||
int stepper_get_absolute_position(int id); /* get current absolute position in half steps */
|
||||
void configure(const stepper_interface *intf);
|
||||
|
||||
/* update a motor */
|
||||
int update(UINT8 pattern);
|
||||
|
||||
/* get current position in half steps */
|
||||
int get_position() { return m_step_pos; }
|
||||
/* get current absolute position in half steps */
|
||||
int get_absolute_position() { return m_abs_step_pos; }
|
||||
/* get maximum position in half steps */
|
||||
int get_max() { return m_max_steps; }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
private:
|
||||
UINT8 m_pattern; /* coil pattern */
|
||||
UINT8 m_old_pattern; /* old coil pattern */
|
||||
UINT8 m_initphase;
|
||||
UINT8 m_phase; /* motor phase */
|
||||
UINT8 m_old_phase; /* old phase */
|
||||
UINT8 m_type; /* reel type */
|
||||
INT16 m_step_pos; /* step position 0 - max_steps */
|
||||
INT16 m_max_steps; /* maximum step position */
|
||||
INT32 m_abs_step_pos; /* absolute step position */
|
||||
INT16 m_index_start; /* start position of index (in half steps) */
|
||||
INT16 m_index_end; /* end position of index (in half steps) */
|
||||
INT16 m_index_patt; /* pattern needed on coils (0=don't care) */
|
||||
UINT8 m_optic;
|
||||
|
||||
void update_optic();
|
||||
devcb_write_line m_optic_cb;
|
||||
};
|
||||
|
||||
int stepper_get_max(int id); /* get maximum position in half steps */
|
||||
#endif
|
||||
|
@ -38,6 +38,10 @@ public:
|
||||
aces1_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_io1_port(*this, "IO1"),
|
||||
m_io2_port(*this, "IO2"),
|
||||
m_io3_port(*this, "IO3"),
|
||||
@ -53,6 +57,11 @@ public:
|
||||
int m_reel_clock[4];
|
||||
int m_reel_phase[4];
|
||||
int m_reel_count[4];
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
|
||||
DECLARE_READ8_MEMBER( aces1_unk_r )
|
||||
{
|
||||
@ -148,7 +157,13 @@ public:
|
||||
{
|
||||
int sense = ((data & (4 + (1<<reel))) ? -2:2);
|
||||
m_reel_phase[reel] = ((m_reel_phase[reel] + sense + 8) % 8);
|
||||
stepper_update(reel, phases[m_reel_phase[reel]]);
|
||||
switch (reel)
|
||||
{
|
||||
case 0: m_reel0->update(phases[m_reel_phase[reel]]); break;
|
||||
case 1: m_reel1->update(phases[m_reel_phase[reel]]); break;
|
||||
case 2: m_reel2->update(phases[m_reel_phase[reel]]); break;
|
||||
case 3: m_reel3->update(phases[m_reel_phase[reel]]); break;
|
||||
}
|
||||
m_reel_clock[reel] = clock;
|
||||
if ( m_reel_phase[reel] % 4 ==0)
|
||||
{
|
||||
@ -187,19 +202,21 @@ public:
|
||||
|
||||
DECLARE_READ8_MEMBER( ic37_read_c )
|
||||
{
|
||||
int pattern =0;
|
||||
int action =0;
|
||||
for (int reel = 0; reel < 4; reel++)
|
||||
{
|
||||
if (stepper_optic_state(reel)) pattern |= 1<<reel;
|
||||
if (m_reel_count[reel]) action |= 1<<reel;
|
||||
}
|
||||
|
||||
return ((pattern << 4) | action);
|
||||
return ((m_optic_pattern << 4) | action);
|
||||
}
|
||||
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_ioport m_io1_port;
|
||||
required_ioport m_io2_port;
|
||||
required_ioport m_io3_port;
|
||||
@ -236,10 +253,10 @@ TIMER_CALLBACK_MEMBER(aces1_state::m_aces1_nmi_timer_callback)
|
||||
|
||||
void aces1_state::machine_start()
|
||||
{
|
||||
stepper_config(machine(), 0, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 1, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 2, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 3, &starpoint_interface_48step);
|
||||
m_reel0->configure(&starpoint_interface_48step);
|
||||
m_reel1->configure(&starpoint_interface_48step);
|
||||
m_reel2->configure(&starpoint_interface_48step);
|
||||
m_reel3->configure(&starpoint_interface_48step);
|
||||
|
||||
for (int reel=0; reel <4; reel++)
|
||||
{
|
||||
@ -452,6 +469,16 @@ static MACHINE_CONFIG_START( aces1, aces1_state )
|
||||
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSWA"))
|
||||
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSWB"))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||
|
||||
/* steppers */
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(aces1_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(aces1_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(aces1_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(aces1_state, reel3_optic_cb))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -111,6 +111,12 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_vfd0(*this, "vfd0"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_reel4(*this, "reel4"),
|
||||
m_reel5(*this, "reel5"),
|
||||
m_upd7759(*this, "upd") { }
|
||||
|
||||
optional_device<bfm_bd1_t> m_vfd0;
|
||||
@ -120,6 +126,12 @@ public:
|
||||
int m_vfd_latch;
|
||||
int m_irq_status;
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; }
|
||||
int m_acia_status;
|
||||
int m_locked;
|
||||
int m_is_timer_enabled;
|
||||
@ -181,6 +193,12 @@ public:
|
||||
int Scorpion1_GetSwitchState(int strobe, int data);
|
||||
int sc1_find_project_string( );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_device<stepper_device> m_reel4;
|
||||
required_device<stepper_device> m_reel5;
|
||||
optional_device<upd7759_device> m_upd7759;
|
||||
};
|
||||
|
||||
@ -251,16 +269,11 @@ WRITE8_MEMBER(bfm_sc1_state::reel12_w)
|
||||
}
|
||||
else
|
||||
{
|
||||
stepper_update(0, (data>>4)&0x0f);
|
||||
stepper_update(1, data&0x0f );
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
m_reel0->update((data>>4)&0x0f);
|
||||
m_reel1->update( data &0x0f);
|
||||
}
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
@ -273,31 +286,22 @@ WRITE8_MEMBER(bfm_sc1_state::reel34_w)
|
||||
}
|
||||
else
|
||||
{
|
||||
stepper_update(2, (data>>4)&0x0f);
|
||||
stepper_update(3, data&0x0f );
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x08;
|
||||
else m_optic_pattern &= ~0x08;
|
||||
m_reel2->update((data>>4)&0x0f);
|
||||
m_reel3->update( data &0x0f);
|
||||
}
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WRITE8_MEMBER(bfm_sc1_state::reel56_w)
|
||||
{
|
||||
stepper_update(4, (data>>4)&0x0f);
|
||||
stepper_update(5, data&0x0f );
|
||||
m_reel4->update((data>>4)&0x0f);
|
||||
m_reel5->update( data &0x0f);
|
||||
|
||||
if ( stepper_optic_state(4) ) m_optic_pattern |= 0x10;
|
||||
else m_optic_pattern &= ~0x10;
|
||||
if ( stepper_optic_state(5) ) m_optic_pattern |= 0x20;
|
||||
else m_optic_pattern &= ~0x20;
|
||||
awp_draw_reel(5);
|
||||
awp_draw_reel(6);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
@ -612,20 +616,6 @@ void bfm_sc1_state::machine_reset()
|
||||
|
||||
m_vfd0->reset();
|
||||
|
||||
// reset stepper motors /////////////////////////////////////////////////////////////
|
||||
{
|
||||
int pattern =0, i;
|
||||
|
||||
for ( i = 0; i < 6; i++)
|
||||
{
|
||||
stepper_reset_position(i);
|
||||
if ( stepper_optic_state(i) ) pattern |= 1<<i;
|
||||
}
|
||||
|
||||
m_optic_pattern = pattern;
|
||||
|
||||
}
|
||||
|
||||
m_acia_status = 0x02; // MC6850 transmit buffer empty !!!
|
||||
m_locked = 0x07; // hardware is locked
|
||||
|
||||
@ -1061,6 +1051,19 @@ static MACHINE_CONFIG_START( scorpion1, bfm_sc1_state )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
MCFG_DEFAULT_LAYOUT(layout_sc1_vfd)
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel3_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel4", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel4_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel5", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel5_optic_cb))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -1092,14 +1095,17 @@ MACHINE_CONFIG_END
|
||||
|
||||
void bfm_sc1_state::sc1_common_init(int reels, int decrypt, int defaultbank)
|
||||
{
|
||||
UINT8 i;
|
||||
|
||||
memset(m_sc1_Inputs, 0, sizeof(m_sc1_Inputs));
|
||||
|
||||
// setup n default 96 half step reels ///////////////////////////////////////////
|
||||
for ( i = 0; i < reels; i++ )
|
||||
switch (reels)
|
||||
{
|
||||
stepper_config(machine(), i, &starpoint_interface_48step);
|
||||
case 6: m_reel5->configure(&starpoint_interface_48step);
|
||||
case 5: m_reel4->configure(&starpoint_interface_48step);
|
||||
case 4: m_reel3->configure(&starpoint_interface_48step);
|
||||
case 3: m_reel2->configure(&starpoint_interface_48step);
|
||||
case 2: m_reel1->configure(&starpoint_interface_48step);
|
||||
case 1: m_reel0->configure(&starpoint_interface_48step);
|
||||
}
|
||||
if (decrypt) bfm_decode_mainrom(machine(),"maincpu", m_codec_data); // decode main rom
|
||||
|
||||
|
@ -181,12 +181,24 @@ public:
|
||||
bfm_sc2_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_reel4(*this, "reel4"),
|
||||
m_reel5(*this, "reel5"),
|
||||
m_upd7759(*this, "upd"),
|
||||
m_vfd0(*this, "vfd0"),
|
||||
m_vfd1(*this, "vfd1"),
|
||||
m_dm01(*this, "dm01") { }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_device<stepper_device> m_reel4;
|
||||
required_device<stepper_device> m_reel5;
|
||||
required_device<upd7759_device> m_upd7759;
|
||||
optional_device<bfm_bd1_t> m_vfd0;
|
||||
optional_device<bfm_bd1_t> m_vfd1;
|
||||
@ -199,6 +211,12 @@ public:
|
||||
int m_mmtr_latch;
|
||||
int m_irq_status;
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; }
|
||||
int m_uart1_data;
|
||||
int m_uart2_data;
|
||||
int m_data_to_uart1;
|
||||
@ -386,20 +404,6 @@ void bfm_sc2_state::on_scorpion2_reset()
|
||||
|
||||
machine().device("ymsnd")->reset();
|
||||
|
||||
// reset stepper motors /////////////////////////////////////////////////
|
||||
{
|
||||
int pattern =0, i;
|
||||
|
||||
for ( i = 0; i < m_reels; i++)
|
||||
{
|
||||
stepper_reset_position(i);
|
||||
if ( stepper_optic_state(i) ) pattern |= 1<<i;
|
||||
}
|
||||
|
||||
m_optic_pattern = pattern;
|
||||
|
||||
}
|
||||
|
||||
// make sure no inputs are overidden ////////////////////////////////////
|
||||
memset(m_input_override, 0, sizeof(m_input_override));
|
||||
|
||||
@ -546,32 +550,22 @@ WRITE8_MEMBER(bfm_sc2_state::reel12_w)
|
||||
{
|
||||
m_reel12_latch = data;
|
||||
|
||||
stepper_update(0, data&0x0f );
|
||||
stepper_update(1, (data>>4)&0x0f );
|
||||
m_reel0->update( data &0x0f);
|
||||
m_reel1->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bfm_sc2_state::reel34_w)
|
||||
{
|
||||
m_reel34_latch = data;
|
||||
|
||||
stepper_update(2, data&0x0f );
|
||||
stepper_update(3, (data>>4)&0x0f);
|
||||
m_reel2->update( data &0x0f);
|
||||
m_reel3->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x08;
|
||||
else m_optic_pattern &= ~0x08;
|
||||
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
@ -580,16 +574,11 @@ WRITE8_MEMBER(bfm_sc2_state::reel56_w)
|
||||
{
|
||||
m_reel56_latch = data;
|
||||
|
||||
stepper_update(4, data&0x0f );
|
||||
stepper_update(5, (data>>4)&0x0f);
|
||||
m_reel4->update( data &0x0f);
|
||||
m_reel5->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(4) ) m_optic_pattern |= 0x10;
|
||||
else m_optic_pattern &= ~0x10;
|
||||
if ( stepper_optic_state(5) ) m_optic_pattern |= 0x20;
|
||||
else m_optic_pattern &= ~0x20;
|
||||
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(5);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
}
|
||||
|
||||
|
||||
@ -2174,6 +2163,20 @@ static MACHINE_CONFIG_START( scorpion2_vid, bfm_sc2_state )
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel3_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel4", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel4_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel5", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel5_optic_cb))
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -3664,29 +3667,37 @@ MACHINE_CONFIG_END
|
||||
|
||||
void bfm_sc2_state::sc2awp_common_init(int reels, int decrypt)
|
||||
{
|
||||
int n;
|
||||
sc2_common_init(decrypt);
|
||||
/* setup n default 96 half step reels */
|
||||
|
||||
m_reels=reels;
|
||||
|
||||
for ( n = 0; n < reels; n++ )
|
||||
switch (reels)
|
||||
{
|
||||
stepper_config(machine(), n, &starpoint_interface_48step);
|
||||
case 6: m_reel5->configure(&starpoint_interface_48step);
|
||||
case 5: m_reel4->configure(&starpoint_interface_48step);
|
||||
case 4: m_reel3->configure(&starpoint_interface_48step);
|
||||
case 3: m_reel2->configure(&starpoint_interface_48step);
|
||||
case 2: m_reel1->configure(&starpoint_interface_48step);
|
||||
case 1: m_reel0->configure(&starpoint_interface_48step);
|
||||
}
|
||||
}
|
||||
|
||||
void bfm_sc2_state::sc2awpdmd_common_init(int reels, int decrypt)
|
||||
{
|
||||
int n;
|
||||
sc2_common_init(decrypt);
|
||||
/* setup n default 96 half step reels */
|
||||
|
||||
m_reels=reels;
|
||||
|
||||
for ( n = 0; n < reels; n++ )
|
||||
switch (reels)
|
||||
{
|
||||
stepper_config(machine(), n, &starpoint_interface_48step);
|
||||
case 6: m_reel5->configure(&starpoint_interface_48step);
|
||||
case 5: m_reel4->configure(&starpoint_interface_48step);
|
||||
case 4: m_reel3->configure(&starpoint_interface_48step);
|
||||
case 3: m_reel2->configure(&starpoint_interface_48step);
|
||||
case 2: m_reel1->configure(&starpoint_interface_48step);
|
||||
case 1: m_reel0->configure(&starpoint_interface_48step);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -517,40 +517,29 @@ void sc4_state::bfm_sc4_68307_porta_w(address_space &space, bool dedicated, UINT
|
||||
{
|
||||
m_reel12_latch = data;
|
||||
|
||||
stepper_update(0, data&0x0f );
|
||||
stepper_update(1, (data>>4)&0x0f );
|
||||
m_reel0->update( data &0x0f);
|
||||
m_reel1->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( sc4_state::bfm_sc4_reel3_w )
|
||||
{
|
||||
m_reel3_latch = data;
|
||||
|
||||
stepper_update(2, data&0x0f );
|
||||
m_reel2->update(data&0x0f);
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( sc4_state::bfm_sc4_reel4_w )
|
||||
{
|
||||
m_reel4_latch = data;
|
||||
|
||||
stepper_update(3, data&0x0f );
|
||||
m_reel3->update(data&0x0f );
|
||||
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x08;
|
||||
else m_optic_pattern &= ~0x08;
|
||||
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
void sc4_state::bfm_sc4_68307_portb_w(address_space &space, bool dedicated, UINT16 data, UINT16 line_mask)
|
||||
@ -591,17 +580,8 @@ UINT16 sc4_state::bfm_sc4_68307_portb_r(address_space &space, bool dedicated, UI
|
||||
|
||||
MACHINE_RESET_MEMBER(sc4_state,sc4)
|
||||
{
|
||||
int pattern =0, i;
|
||||
|
||||
for ( i = 0; i < m_reels; i++)
|
||||
{
|
||||
stepper_reset_position(i);
|
||||
if ( stepper_optic_state(i) ) pattern |= 1<<i;
|
||||
}
|
||||
|
||||
m_dochk41 = true;
|
||||
|
||||
m_optic_pattern = pattern;
|
||||
sec.reset();
|
||||
}
|
||||
|
||||
@ -620,10 +600,12 @@ MACHINE_START_MEMBER(sc4_state,sc4)
|
||||
int reels = 6;
|
||||
m_reels=reels;
|
||||
|
||||
for ( int n = 0; n < reels; n++ )
|
||||
{
|
||||
if (m_reel_setup[n]) stepper_config(machine(), n, m_reel_setup[n]);
|
||||
}
|
||||
if (m_reel_setup[0]) m_reel0->configure(m_reel_setup[0]);
|
||||
if (m_reel_setup[1]) m_reel1->configure(m_reel_setup[1]);
|
||||
if (m_reel_setup[2]) m_reel2->configure(m_reel_setup[2]);
|
||||
if (m_reel_setup[3]) m_reel3->configure(m_reel_setup[3]);
|
||||
if (m_reel_setup[4]) m_reel4->configure(m_reel_setup[4]);
|
||||
if (m_reel_setup[5]) m_reel5->configure(m_reel_setup[5]);
|
||||
}
|
||||
|
||||
|
||||
@ -663,16 +645,11 @@ WRITE8_MEMBER(sc4_state::bfm_sc4_duart_output_w)
|
||||
// logerror("bfm_sc4_duart_output_w\n");
|
||||
m_reel56_latch = data;
|
||||
|
||||
stepper_update(4, data&0x0f );
|
||||
stepper_update(5, (data>>4)&0x0f);
|
||||
m_reel4->update( data &0x0f);
|
||||
m_reel5->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(4) ) m_optic_pattern |= 0x10;
|
||||
else m_optic_pattern &= ~0x10;
|
||||
if ( stepper_optic_state(5) ) m_optic_pattern |= 0x20;
|
||||
else m_optic_pattern &= ~0x20;
|
||||
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(5);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
}
|
||||
|
||||
|
||||
@ -728,6 +705,19 @@ MACHINE_CONFIG_START( sc4, sc4_state )
|
||||
MCFG_SOUND_ADD("ymz", YMZ280B, 16000000) // ?? Mhz
|
||||
MCFG_YMZ280B_IRQ_HANDLER(WRITELINE(sc4_state, bfm_sc4_irqhandler))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel3_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel4", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel4_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel5", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(sc4_state, reel5_optic_cb))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -74,6 +74,10 @@ public:
|
||||
bfmsys85_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag),
|
||||
m_vfd(*this, "vfd"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_acia6850_0(*this, "acia6850_0")
|
||||
{
|
||||
}
|
||||
@ -84,6 +88,10 @@ public:
|
||||
int m_alpha_clock;
|
||||
int m_irq_status;
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
int m_locked;
|
||||
int m_is_timer_enabled;
|
||||
int m_coin_inhibits;
|
||||
@ -117,6 +125,10 @@ public:
|
||||
INTERRUPT_GEN_MEMBER(timer_irq);
|
||||
int b85_find_project_string( );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_device<acia6850_device> m_acia6850_0;
|
||||
};
|
||||
|
||||
@ -158,17 +170,6 @@ void bfmsys85_state::machine_reset()
|
||||
|
||||
m_vfd->reset(); // reset display1
|
||||
|
||||
// reset stepper motors ///////////////////////////////////////////////////
|
||||
{
|
||||
int pattern =0, i;
|
||||
|
||||
for ( i = 0; i < 6; i++)
|
||||
{
|
||||
stepper_reset_position(i);
|
||||
if ( stepper_optic_state(i) ) pattern |= 1<<i;
|
||||
}
|
||||
m_optic_pattern = pattern;
|
||||
}
|
||||
m_locked = 0x00; // hardware is open
|
||||
}
|
||||
|
||||
@ -204,30 +205,22 @@ READ8_MEMBER(bfmsys85_state::irqlatch_r)
|
||||
|
||||
WRITE8_MEMBER(bfmsys85_state::reel12_w)
|
||||
{
|
||||
stepper_update(0, (data>>4)&0x0f);
|
||||
stepper_update(1, data&0x0f );
|
||||
m_reel0->update((data>>4)&0x0f);
|
||||
m_reel1->update( data &0x0f);
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WRITE8_MEMBER(bfmsys85_state::reel34_w)
|
||||
{
|
||||
stepper_update(2, (data>>4)&0x0f);
|
||||
stepper_update(3, data&0x0f );
|
||||
m_reel2->update((data>>4)&0x0f);
|
||||
m_reel3->update( data &0x0f);
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x08;
|
||||
else m_optic_pattern &= ~0x08;
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
@ -353,12 +346,10 @@ READ8_MEMBER(bfmsys85_state::triac_r)
|
||||
|
||||
void bfmsys85_state::machine_start()
|
||||
{
|
||||
int i;
|
||||
for ( i = 0; i < 4; i++ )
|
||||
{
|
||||
stepper_config(machine(), i, &starpoint_interface_48step);
|
||||
}
|
||||
|
||||
m_reel0->configure(&starpoint_interface_48step);
|
||||
m_reel1->configure(&starpoint_interface_48step);
|
||||
m_reel2->configure(&starpoint_interface_48step);
|
||||
m_reel3->configure(&starpoint_interface_48step);
|
||||
}
|
||||
|
||||
// memory map for bellfruit system85 board ////////////////////////////////
|
||||
@ -415,6 +406,15 @@ static MACHINE_CONFIG_START( bfmsys85, bfmsys85_state )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram") // load/save nv RAM
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfmsys85_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfmsys85_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfmsys85_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfmsys85_state, reel3_optic_cb))
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_bfmsys85)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -22,6 +22,10 @@ public:
|
||||
ecoinf2_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_coins(*this, "COINS"),
|
||||
m_key(*this, "PERKEY"),
|
||||
m_panel(*this, "PANEL")
|
||||
@ -31,6 +35,10 @@ public:
|
||||
}
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_ioport m_coins;
|
||||
required_ioport m_key;
|
||||
required_ioport m_panel;
|
||||
@ -40,6 +48,10 @@ public:
|
||||
//UINT16 m_chars[14];
|
||||
// void update_display();
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
int strobe_addr;
|
||||
int strobe_amount;
|
||||
|
||||
@ -187,30 +199,20 @@ public:
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ppi8255_ic23_write_a_reel01)
|
||||
{
|
||||
stepper_update(0, data&0x0f);
|
||||
stepper_update(1, (data>>4)&0x0f);
|
||||
m_reel0->update( data &0x0f);
|
||||
m_reel1->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x10;
|
||||
else m_optic_pattern &= ~0x10;
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x20;
|
||||
else m_optic_pattern &= ~0x20;
|
||||
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ppi8255_ic23_write_b_reel23)
|
||||
{
|
||||
stepper_update(2, data&0x0f);
|
||||
stepper_update(3, (data>>4)&0x0f);
|
||||
m_reel2->update( data &0x0f);
|
||||
m_reel3->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x40;
|
||||
else m_optic_pattern &= ~0x40;
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x80;
|
||||
else m_optic_pattern &= ~0x80;
|
||||
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
DECLARE_READ8_MEMBER(ppi8255_ic23_read_c_key)
|
||||
@ -498,10 +500,10 @@ INPUT_PORTS_END
|
||||
MACHINE_START_MEMBER(ecoinf2_state,ecoinf2)
|
||||
{
|
||||
MechMtr_config(machine(),8);
|
||||
for ( int n = 0; n < 4; n++ )
|
||||
{
|
||||
stepper_config(machine(), n, &ecoin_interface_200step_reel);
|
||||
}
|
||||
m_reel0->configure(&ecoin_interface_200step_reel);
|
||||
m_reel1->configure(&ecoin_interface_200step_reel);
|
||||
m_reel2->configure(&ecoin_interface_200step_reel);
|
||||
m_reel3->configure(&ecoin_interface_200step_reel);
|
||||
}
|
||||
|
||||
|
||||
@ -541,6 +543,15 @@ static MACHINE_CONFIG_START( ecoinf2_oxo, ecoinf2_state )
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(ecoinf2_state, ppi8255_ic13_write_b_strobedat1))
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(ecoinf2_state, ppi8255_ic13_read_c_panel))
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf2_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf2_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf2_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf2_state, reel3_optic_cb))
|
||||
|
||||
// MCFG_DEVICE_ADD("ic25_dips", I8255, 0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
@ -23,7 +23,11 @@ class ecoinf3_state : public driver_device
|
||||
public:
|
||||
ecoinf3_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu")
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3")
|
||||
{
|
||||
strobe_amount = 0;
|
||||
strobe_addr = 0;
|
||||
@ -31,6 +35,10 @@ public:
|
||||
}
|
||||
|
||||
required_device<z180_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
|
||||
UINT16 m_lamps[16];
|
||||
UINT16 m_chars[14];
|
||||
@ -39,6 +47,11 @@ public:
|
||||
int strobe_addr;
|
||||
int strobe_amount;
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
|
||||
int m_percent_mux;
|
||||
|
||||
DECLARE_READ8_MEMBER(ppi8255_intf_a_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_a_read_a %02x\n", m_maincpu->pcbase(), ret); return ret; }
|
||||
@ -211,32 +224,22 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(ppi8255_intf_d_write_a_reel01)
|
||||
{
|
||||
// logerror("%04x - ppi8255_intf_d_(used)write_a %02x\n", m_maincpu->pcbase(), data);
|
||||
stepper_update(0, data&0x0f);
|
||||
stepper_update(1, (data>>4)&0x0f);
|
||||
m_reel0->update( data &0x0f);
|
||||
m_reel1->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x10;
|
||||
else m_optic_pattern &= ~0x10;
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x20;
|
||||
else m_optic_pattern &= ~0x20;
|
||||
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ppi8255_intf_d_write_b_reel23)
|
||||
{
|
||||
// logerror("%04x - ppi8255_intf_d_(used)write_b %02x\n", m_maincpu->pcbase(), data);
|
||||
|
||||
stepper_update(2, data&0x0f);
|
||||
stepper_update(3, (data>>4)&0x0f);
|
||||
m_reel2->update( data &0x0f);
|
||||
m_reel3->update((data>>4)&0x0f);
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x40;
|
||||
else m_optic_pattern &= ~0x40;
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x80;
|
||||
else m_optic_pattern &= ~0x80;
|
||||
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
DECLARE_WRITE8_MEMBER(ppi8255_intf_d_write_c) { logerror("%04x - ppi8255_intf_d_(used)write_c %02x\n", m_maincpu->pcbase(), data);}
|
||||
@ -654,10 +657,10 @@ INPUT_PORTS_END
|
||||
|
||||
MACHINE_START_MEMBER(ecoinf3_state,ecoinf3)
|
||||
{
|
||||
for ( int n = 0; n < 4; n++ )
|
||||
{
|
||||
stepper_config(machine(), n, &ecoin_interface_200step_reel);
|
||||
}
|
||||
m_reel0->configure(&ecoin_interface_200step_reel);
|
||||
m_reel1->configure(&ecoin_interface_200step_reel);
|
||||
m_reel2->configure(&ecoin_interface_200step_reel);
|
||||
m_reel3->configure(&ecoin_interface_200step_reel);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( ecoinf3_pyramid, ecoinf3_state )
|
||||
@ -740,6 +743,15 @@ static MACHINE_CONFIG_START( ecoinf3_pyramid, ecoinf3_state )
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(ecoinf3_state, ppi8255_intf_h_write_b))
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(ecoinf3_state, ppi8255_intf_h_read_c))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(ecoinf3_state, ppi8255_intf_h_write_c))
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf3_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf3_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf3_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinf3_state, reel3_optic_cb))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -53,10 +53,19 @@ class ecoinfr_state : public driver_device
|
||||
public:
|
||||
ecoinfr_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu") { }
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3")
|
||||
{ }
|
||||
|
||||
int irq_toggle;
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
|
||||
UINT8 port09_value;
|
||||
UINT8 port10_value;
|
||||
@ -108,6 +117,10 @@ public:
|
||||
|
||||
DECLARE_MACHINE_START(ecoinfr);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
};
|
||||
|
||||
|
||||
@ -151,12 +164,9 @@ WRITE8_MEMBER(ecoinfr_state::ec_port00_out_w)
|
||||
printf("ec_port0a_out_w (reel 1 port) unk bits used %02x\n", data);
|
||||
}
|
||||
|
||||
stepper_update(0, data&0x0f);
|
||||
m_reel0->update(data&0x0f);
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ecoinfr_state::ec_port01_out_w)
|
||||
@ -166,12 +176,9 @@ WRITE8_MEMBER(ecoinfr_state::ec_port01_out_w)
|
||||
printf("ec_port01_out_w (reel 2 port) unk bits used %02x\n", data);
|
||||
}
|
||||
|
||||
stepper_update(1, data&0x0f);
|
||||
m_reel1->update(data&0x0f);
|
||||
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ecoinfr_state::ec_port02_out_w)
|
||||
@ -181,12 +188,9 @@ WRITE8_MEMBER(ecoinfr_state::ec_port02_out_w)
|
||||
printf("ec_port02_out_w (reel 3 port) unk bits used %02x\n", data);
|
||||
}
|
||||
|
||||
stepper_update(2, data&0x0f);
|
||||
m_reel2->update(data&0x0f);
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
}
|
||||
|
||||
|
||||
@ -766,10 +770,10 @@ void ecoinfr_state::machine_reset()
|
||||
|
||||
MACHINE_START_MEMBER(ecoinfr_state,ecoinfr)
|
||||
{
|
||||
for ( int n = 0; n < 4; n++ )
|
||||
{
|
||||
stepper_config(machine(), n, &ecoin_interface_200step_reel);
|
||||
}
|
||||
m_reel0->configure(&ecoin_interface_200step_reel);
|
||||
m_reel1->configure(&ecoin_interface_200step_reel);
|
||||
m_reel2->configure(&ecoin_interface_200step_reel);
|
||||
m_reel3->configure(&ecoin_interface_200step_reel);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( ecoinfr, ecoinfr_state )
|
||||
@ -784,6 +788,13 @@ static MACHINE_CONFIG_START( ecoinfr, ecoinfr_state )
|
||||
MCFG_MACHINE_START_OVERRIDE(ecoinfr_state, ecoinfr )
|
||||
|
||||
MCFG_DEVICE_ADD(UPD8251_TAG, I8251, 0)
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinfr_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinfr_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(ecoinfr_state, reel2_optic_cb))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -965,13 +965,12 @@ MACHINE_START_MEMBER(jpmimpct_state,impctawp)
|
||||
save_item(NAME(m_duart_1.IMR));
|
||||
save_item(NAME(m_duart_1.CT));
|
||||
|
||||
stepper_config(machine(), 0, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 1, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 2, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 3, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 4, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 5, &starpoint_interface_48step);
|
||||
stepper_config(machine(), 6, &starpoint_interface_48step);
|
||||
m_reel0->configure(&starpoint_interface_48step);
|
||||
m_reel1->configure(&starpoint_interface_48step);
|
||||
m_reel2->configure(&starpoint_interface_48step);
|
||||
m_reel3->configure(&starpoint_interface_48step);
|
||||
m_reel4->configure(&starpoint_interface_48step);
|
||||
m_reel5->configure(&starpoint_interface_48step);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(jpmimpct_state,impctawp)
|
||||
@ -1062,13 +1061,6 @@ READ16_MEMBER(jpmimpct_state::inputs1awp_r)
|
||||
|
||||
READ16_MEMBER(jpmimpct_state::optos_r)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<6; i++)
|
||||
{
|
||||
if ( stepper_optic_state(i) ) m_optic_pattern |= (1 << i);
|
||||
else m_optic_pattern &= ~(1 << i);
|
||||
}
|
||||
return m_optic_pattern;
|
||||
}
|
||||
|
||||
@ -1097,20 +1089,22 @@ WRITE16_MEMBER(jpmimpct_state::jpmioawp_w)
|
||||
|
||||
case 0x02:
|
||||
{
|
||||
for (i=0; i<4; i++)
|
||||
{
|
||||
stepper_update(i, (data >> i)& 0x0F );
|
||||
awp_draw_reel(i);
|
||||
}
|
||||
m_reel0->update((data >> 0)& 0x0F);
|
||||
m_reel1->update((data >> 1)& 0x0F);
|
||||
m_reel2->update((data >> 2)& 0x0F);
|
||||
m_reel3->update((data >> 3)& 0x0F);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
break;
|
||||
}
|
||||
case 0x04:
|
||||
{
|
||||
for (i=0; i<2; i++)
|
||||
{
|
||||
stepper_update(i+4, (data >> (i + 4)& 0x0F ));
|
||||
awp_draw_reel(i+4);
|
||||
}
|
||||
m_reel4->update((data >> 4)& 0x0F);
|
||||
m_reel5->update((data >> 5)& 0x0F);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
break;
|
||||
}
|
||||
case 0x06:
|
||||
|
@ -81,21 +81,9 @@
|
||||
// called if board is reset ///////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void maygay1b_state::m1_stepper_reset()
|
||||
{
|
||||
int pattern = 0,i;
|
||||
for ( i = 0; i < 6; i++)
|
||||
{
|
||||
stepper_reset_position(i);
|
||||
if ( stepper_optic_state(i) ) pattern |= 1<<i;
|
||||
}
|
||||
m_optic_pattern = pattern;
|
||||
}
|
||||
|
||||
void maygay1b_state::machine_reset()
|
||||
{
|
||||
m_vfd->reset(); // reset display1
|
||||
m1_stepper_reset();
|
||||
m_Vmm=false;
|
||||
}
|
||||
|
||||
@ -293,58 +281,43 @@ INPUT_PORTS_END
|
||||
|
||||
void maygay1b_state::machine_start()
|
||||
{
|
||||
int i;
|
||||
|
||||
// setup 8 mechanical meters ////////////////////////////////////////////
|
||||
MechMtr_config(machine(),8);
|
||||
|
||||
// setup 6 default 96 half step reels ///////////////////////////////////
|
||||
for ( i = 0; i < 6; i++ )
|
||||
{
|
||||
stepper_config(machine(), i, &starpoint_interface_48step);
|
||||
}
|
||||
m_reel0->configure(&starpoint_interface_48step);
|
||||
m_reel1->configure(&starpoint_interface_48step);
|
||||
m_reel2->configure(&starpoint_interface_48step);
|
||||
m_reel3->configure(&starpoint_interface_48step);
|
||||
m_reel4->configure(&starpoint_interface_48step);
|
||||
m_reel5->configure(&starpoint_interface_48step);
|
||||
|
||||
}
|
||||
WRITE8_MEMBER(maygay1b_state::reel12_w)
|
||||
{
|
||||
stepper_update(0, data & 0x0F );
|
||||
stepper_update(1, (data>>4) & 0x0F );
|
||||
m_reel0->update( data & 0x0F);
|
||||
m_reel1->update((data>>4) & 0x0F);
|
||||
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(maygay1b_state::reel34_w)
|
||||
{
|
||||
stepper_update(2, data & 0x0F );
|
||||
stepper_update(3, (data>>4) & 0x0F );
|
||||
m_reel2->update( data & 0x0F);
|
||||
m_reel3->update((data>>4) & 0x0F);
|
||||
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x08;
|
||||
else m_optic_pattern &= ~0x08;
|
||||
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(maygay1b_state::reel56_w)
|
||||
{
|
||||
stepper_update(4, data & 0x0F );
|
||||
stepper_update(5, (data>>4) & 0x0F );
|
||||
m_reel4->update( data & 0x0F);
|
||||
m_reel5->update((data>>4) & 0x0F);
|
||||
|
||||
if ( stepper_optic_state(4) ) m_optic_pattern |= 0x10;
|
||||
else m_optic_pattern &= ~0x10;
|
||||
if ( stepper_optic_state(5) ) m_optic_pattern |= 0x20;
|
||||
else m_optic_pattern &= ~0x20;
|
||||
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(5);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
}
|
||||
|
||||
READ8_MEMBER(maygay1b_state::m1_duart_r)
|
||||
@ -651,6 +624,19 @@ MACHINE_CONFIG_START( maygay_m1, maygay1b_state )
|
||||
MCFG_DEVICE_ADD("i8279_2", I8279, M1_MASTER_CLOCK/4) // unknown clock
|
||||
MCFG_I8279_OUT_DISP_CB(WRITE8(maygay1b_state, lamp_data_2_w)) // display A&B
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel3_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel4", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel4_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel5", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(maygay1b_state, reel5_optic_cb))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_maygay1b)
|
||||
|
@ -132,7 +132,12 @@ public:
|
||||
mpu3_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_vfd(*this, "vfd"),
|
||||
m_maincpu(*this, "maincpu") { }
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3")
|
||||
{ }
|
||||
optional_device<roc10937_t> m_vfd;
|
||||
|
||||
|
||||
@ -165,6 +170,11 @@ int m_prot_col;
|
||||
|
||||
int m_optic_pattern;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
|
||||
emu_timer *m_ic21_timer;
|
||||
DECLARE_WRITE8_MEMBER(characteriser_w);
|
||||
DECLARE_READ8_MEMBER(characteriser_r);
|
||||
@ -198,12 +208,15 @@ emu_timer *m_ic21_timer;
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(gen_50hz);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(ic10_callback);
|
||||
void update_triacs();
|
||||
void mpu3_stepper_reset();
|
||||
void ic11_update();
|
||||
void ic21_output(int data);
|
||||
void ic21_setup();
|
||||
void mpu3_config_common();
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
};
|
||||
|
||||
#define DISPLAY_PORT 0
|
||||
@ -224,23 +237,10 @@ void mpu3_state::update_triacs()
|
||||
}
|
||||
|
||||
/* called if board is reset */
|
||||
void mpu3_state::mpu3_stepper_reset()
|
||||
{
|
||||
int pattern = 0,reel;
|
||||
for (reel = 0; reel < 6; reel++)
|
||||
{
|
||||
stepper_reset_position(reel);
|
||||
if (stepper_optic_state(reel)) pattern |= 1<<reel;
|
||||
}
|
||||
m_optic_pattern = pattern;
|
||||
}
|
||||
|
||||
void mpu3_state::machine_reset()
|
||||
{
|
||||
m_vfd->reset();
|
||||
|
||||
mpu3_stepper_reset();
|
||||
|
||||
m_lamp_strobe = 0;
|
||||
m_led_strobe = 0;
|
||||
|
||||
@ -509,29 +509,14 @@ WRITE_LINE_MEMBER(mpu3_state::pia_ic4_cb2_w)
|
||||
WRITE8_MEMBER(mpu3_state::pia_ic5_porta_w)
|
||||
{
|
||||
LOG(("%s: IC5 PIA Port A Set to %2x (Reel)\n", machine().describe_context(),data));
|
||||
stepper_update(0, data & 0x03 );
|
||||
stepper_update(1, (data>>2) & 0x03 );
|
||||
stepper_update(2, (data>>4) & 0x03 );
|
||||
stepper_update(3, (data>>6) & 0x03 );
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
|
||||
{
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x08;
|
||||
else m_optic_pattern &= ~0x08;
|
||||
|
||||
}
|
||||
|
||||
m_reel0->update( data & 0x03);
|
||||
m_reel1->update((data>>2) & 0x03);
|
||||
m_reel2->update((data>>4) & 0x03);
|
||||
m_reel3->update((data>>6) & 0x03);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
|
||||
READ8_MEMBER(mpu3_state::pia_ic5_portb_r)
|
||||
@ -723,10 +708,10 @@ void mpu3_state::machine_start()
|
||||
MechMtr_config(machine(),8);
|
||||
|
||||
/* setup 4 reels */
|
||||
stepper_config(machine(), 0, &mpu3_reel_interface);
|
||||
stepper_config(machine(), 1, &mpu3_reel_interface);
|
||||
stepper_config(machine(), 2, &mpu3_reel_interface);
|
||||
stepper_config(machine(), 3, &mpu3_reel_interface);
|
||||
m_reel0->configure(&mpu3_reel_interface);
|
||||
m_reel1->configure(&mpu3_reel_interface);
|
||||
m_reel2->configure(&mpu3_reel_interface);
|
||||
m_reel3->configure(&mpu3_reel_interface);
|
||||
|
||||
}
|
||||
/*
|
||||
@ -871,6 +856,15 @@ static MACHINE_CONFIG_START( mpu3base, mpu3_state )
|
||||
MCFG_PIA_IRQA_HANDLER(WRITELINE(mpu3_state, cpu0_irq))
|
||||
MCFG_PIA_IRQB_HANDLER(WRITELINE(mpu3_state, cpu0_irq))
|
||||
|
||||
MCFG_DEVICE_ADD("reel0", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu3_state, reel0_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel1", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu3_state, reel1_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel2", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu3_state, reel2_optic_cb))
|
||||
MCFG_DEVICE_ADD("reel3", STEPPER, 0)
|
||||
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu3_state, reel3_optic_cb))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_mpu3)
|
||||
|
@ -171,8 +171,6 @@ MACHINE_RESET_MEMBER(mpu4dealem_state,dealem_vid)
|
||||
{
|
||||
m_vfd->reset(); //for debug ports only
|
||||
|
||||
mpu4_stepper_reset();
|
||||
|
||||
m_lamp_strobe = 0;
|
||||
m_lamp_strobe2 = 0;
|
||||
m_led_strobe = 0;
|
||||
|
@ -375,41 +375,41 @@ void mpu4_state::update_meters()
|
||||
break;
|
||||
|
||||
case FIVE_REEL_5TO8:
|
||||
stepper_update(4, ((data >> 4) & 0x0f));
|
||||
m_reel4->update(((data >> 4) & 0x0f));
|
||||
data = (data & 0x0F); //Strip reel data from meter drives, leaving active elements
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
break;
|
||||
|
||||
case FIVE_REEL_8TO5:
|
||||
stepper_update(4, (((data & 0x01) + ((data & 0x08) >> 2) + ((data & 0x20) >> 3) + ((data & 0x80) >> 4)) & 0x0f)) ;
|
||||
m_reel4->update((((data & 0x01) + ((data & 0x08) >> 2) + ((data & 0x20) >> 3) + ((data & 0x80) >> 4)) & 0x0f)) ;
|
||||
data = 0x00; //Strip all reel data from meter drives, nothing is connected
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
break;
|
||||
|
||||
case FIVE_REEL_3TO6:
|
||||
stepper_update(4, ((data >> 2) & 0x0f));
|
||||
m_reel4->update(((data >> 2) & 0x0f));
|
||||
data = 0x00; //Strip all reel data from meter drives
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
break;
|
||||
|
||||
case SIX_REEL_1TO8:
|
||||
stepper_update(4, (data & 0x0f));
|
||||
stepper_update(5, ((data >> 4) & 0x0f));
|
||||
m_reel4->update( data & 0x0f);
|
||||
m_reel5->update((data >> 4) & 0x0f);
|
||||
data = 0x00; //Strip all reel data from meter drives
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(5);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
break;
|
||||
|
||||
case SIX_REEL_5TO8:
|
||||
stepper_update(4, ((data >> 4) & 0x0f));
|
||||
m_reel4->update(((data >> 4) & 0x0f));
|
||||
data = 0x00; //Strip all reel data from meter drives
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
break;
|
||||
|
||||
case SEVEN_REEL:
|
||||
stepper_update(0, (((data & 0x01) + ((data & 0x08) >> 2) + ((data & 0x20) >> 3) + ((data & 0x80) >> 4)) & 0x0f)) ;
|
||||
m_reel0->update((((data & 0x01) + ((data & 0x08) >> 2) + ((data & 0x20) >> 3) + ((data & 0x80) >> 4)) & 0x0f)) ;
|
||||
data = 0x00; //Strip all reel data from meter drives
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
break;
|
||||
|
||||
case FLUTTERBOX: //The backbox fan assembly fits in a reel unit sized box, wired to the remote meter pin, so we can handle it here
|
||||
@ -433,27 +433,10 @@ void mpu4_state::update_meters()
|
||||
}
|
||||
|
||||
/* called if board is reset */
|
||||
void mpu4_state::mpu4_stepper_reset()
|
||||
{
|
||||
int pattern = 0,reel;
|
||||
for (reel = 0; reel < 6; reel++)
|
||||
{
|
||||
stepper_reset_position(reel);
|
||||
if(!m_reel_mux)
|
||||
{
|
||||
if (stepper_optic_state(reel)) pattern |= 1<<reel;
|
||||
}
|
||||
}
|
||||
m_optic_pattern = pattern;
|
||||
}
|
||||
|
||||
|
||||
MACHINE_RESET_MEMBER(mpu4_state,mpu4)
|
||||
{
|
||||
m_vfd->reset();
|
||||
|
||||
mpu4_stepper_reset();
|
||||
|
||||
m_lamp_strobe = 0;
|
||||
m_lamp_strobe2 = 0;
|
||||
m_led_strobe = 0;
|
||||
@ -788,7 +771,7 @@ READ8_MEMBER(mpu4_state::pia_ic4_portb_r)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (stepper_optic_state(m_active_reel))
|
||||
if (m_optic_pattern & (1<<m_active_reel))
|
||||
{
|
||||
m_ic4_input_b |= 0x08;
|
||||
}
|
||||
@ -915,18 +898,18 @@ WRITE8_MEMBER(mpu4_state::pia_ic5_porta_w)
|
||||
}
|
||||
if (m_reel_mux == SIX_REEL_5TO8)
|
||||
{
|
||||
stepper_update(4, data&0x0F);
|
||||
stepper_update(5, (data >> 4)&0x0F);
|
||||
awp_draw_reel(4);
|
||||
awp_draw_reel(5);
|
||||
m_reel4->update( data &0x0F);
|
||||
m_reel5->update((data >> 4)&0x0F);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
}
|
||||
else
|
||||
if (m_reel_mux == SEVEN_REEL)
|
||||
{
|
||||
stepper_update(1, data&0x0F);
|
||||
stepper_update(2, (data >> 4)&0x0F);
|
||||
awp_draw_reel(1);
|
||||
awp_draw_reel(2);
|
||||
m_reel1->update( data &0x0F);
|
||||
m_reel2->update((data >> 4)&0x0F);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
}
|
||||
|
||||
if (core_stricmp(machine().system().name, "m4gambal") == 0)
|
||||
@ -1139,26 +1122,17 @@ WRITE8_MEMBER(mpu4_state::pia_ic6_portb_w)
|
||||
|
||||
if (m_reel_mux == SEVEN_REEL)
|
||||
{
|
||||
stepper_update(3, data&0x0F);
|
||||
stepper_update(4, (data >> 4)&0x0F);
|
||||
awp_draw_reel(3);
|
||||
awp_draw_reel(4);
|
||||
m_reel3->update( data &0x0F);
|
||||
m_reel4->update((data >> 4)&0x0F);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
awp_draw_reel(4, m_reel4);
|
||||
}
|
||||
else if (m_reels)
|
||||
{
|
||||
stepper_update(0, data & 0x0F );
|
||||
stepper_update(1, (data>>4) & 0x0F );
|
||||
awp_draw_reel(0);
|
||||
awp_draw_reel(1);
|
||||
}
|
||||
|
||||
if (m_reel_flag && (m_reel_mux == STANDARD_REEL) && m_reels)
|
||||
{
|
||||
if ( stepper_optic_state(0) ) m_optic_pattern |= 0x01;
|
||||
else m_optic_pattern &= ~0x01;
|
||||
|
||||
if ( stepper_optic_state(1) ) m_optic_pattern |= 0x02;
|
||||
else m_optic_pattern &= ~0x02;
|
||||
m_reel0->update( data &0x0F);
|
||||
m_reel1->update((data >> 4)&0x0F);
|
||||
awp_draw_reel(0, m_reel0);
|
||||
awp_draw_reel(1, m_reel1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1204,25 +1178,17 @@ WRITE8_MEMBER(mpu4_state::pia_ic7_porta_w)
|
||||
LOG(("%s: IC7 PIA Port A Set to %2x (Reel C and D)\n", machine().describe_context(),data));
|
||||
if (m_reel_mux == SEVEN_REEL)
|
||||
{
|
||||
stepper_update(5, data&0x0F);
|
||||
stepper_update(6, (data >> 4)&0x0F);
|
||||
awp_draw_reel(5);
|
||||
awp_draw_reel(6);
|
||||
m_reel5->update( data &0x0F);
|
||||
m_reel6->update((data >> 4)&0x0F);
|
||||
awp_draw_reel(5, m_reel5);
|
||||
awp_draw_reel(6, m_reel6);
|
||||
}
|
||||
else if (m_reels)
|
||||
{
|
||||
stepper_update(2, data & 0x0F );
|
||||
stepper_update(3, (data>>4) & 0x0F );
|
||||
awp_draw_reel(2);
|
||||
awp_draw_reel(3);
|
||||
}
|
||||
|
||||
if (m_reel_flag && (m_reel_mux == STANDARD_REEL) && m_reels)
|
||||
{
|
||||
if ( stepper_optic_state(2) ) m_optic_pattern |= 0x04;
|
||||
else m_optic_pattern &= ~0x04;
|
||||
if ( stepper_optic_state(3) ) m_optic_pattern |= 0x08;
|
||||
else m_optic_pattern &= ~0x08;
|
||||
m_reel2->update( data &0x0F);
|
||||
m_reel3->update((data >> 4)&0x0F);
|
||||
awp_draw_reel(2, m_reel2);
|
||||
awp_draw_reel(3, m_reel3);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2230,16 +2196,6 @@ void mpu4_state::mpu4_config_common()
|
||||
|
||||
}
|
||||
|
||||
void mpu4_state::mpu4_config_common_reels(int reels)
|
||||
{
|
||||
int n;
|
||||
/* setup n default 96 half step reels, using the standard optic flag */
|
||||
for ( n = 0; n < reels; n++ )
|
||||
{
|
||||
stepper_config(machine(), n, &barcrest_reel_interface);
|
||||
}
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(mpu4_state,mod2)
|
||||
{
|
||||
mpu4_config_common();
|
||||
@ -2368,12 +2324,12 @@ DRIVER_INIT_MEMBER(mpu4_state,m_oldtmr)
|
||||
m_reel_mux=SIX_REEL_1TO8;
|
||||
m_reels = 6;
|
||||
|
||||
stepper_config(machine(), 0, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 1, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 2, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 3, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 4, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 5, &barcrest_opto1_interface);
|
||||
m_reel0->configure(&barcrest_opto1_interface);
|
||||
m_reel1->configure(&barcrest_opto1_interface);
|
||||
m_reel2->configure(&barcrest_opto1_interface);
|
||||
m_reel3->configure(&barcrest_opto1_interface);
|
||||
m_reel4->configure(&barcrest_opto1_interface);
|
||||
m_reel5->configure(&barcrest_opto1_interface);
|
||||
DRIVER_INIT_CALL(m4default_banks);
|
||||
|
||||
m_current_chr_table = oldtmr_data;
|
||||
@ -2384,12 +2340,12 @@ DRIVER_INIT_MEMBER(mpu4_state,m4altreels)
|
||||
m_reel_mux=SIX_REEL_1TO8;
|
||||
m_reels = 6;
|
||||
|
||||
stepper_config(machine(), 0, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 1, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 2, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 3, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 4, &barcrest_opto1_interface);
|
||||
stepper_config(machine(), 5, &barcrest_opto1_interface);
|
||||
m_reel0->configure(&barcrest_opto1_interface);
|
||||
m_reel1->configure(&barcrest_opto1_interface);
|
||||
m_reel2->configure(&barcrest_opto1_interface);
|
||||
m_reel3->configure(&barcrest_opto1_interface);
|
||||
m_reel4->configure(&barcrest_opto1_interface);
|
||||
m_reel5->configure(&barcrest_opto1_interface);
|
||||
DRIVER_INIT_CALL(m4default_banks);
|
||||
}
|
||||
|
||||
@ -2412,7 +2368,11 @@ DRIVER_INIT_MEMBER(mpu4_state,m_grtecp)
|
||||
m_reels = 5;
|
||||
m_lamp_extender=SMALL_CARD;
|
||||
// setup 4 default 96 half step reels with the mux board
|
||||
mpu4_config_common_reels(5);
|
||||
m_reel0->configure(&barcrest_reel_interface);
|
||||
m_reel1->configure(&barcrest_reel_interface);
|
||||
m_reel2->configure(&barcrest_reel_interface);
|
||||
m_reel3->configure(&barcrest_reel_interface);
|
||||
m_reel4->configure(&barcrest_reel_interface);
|
||||
DRIVER_INIT_CALL(m4default_banks);
|
||||
|
||||
m_current_chr_table = grtecp_data;
|
||||
@ -2423,11 +2383,11 @@ DRIVER_INIT_MEMBER(mpu4_state,m_blsbys)
|
||||
m_bwb_bank=1;
|
||||
m_reel_mux=FIVE_REEL_5TO8;
|
||||
m_reels = 5;
|
||||
stepper_config(machine(), 0, &bwb_opto1_interface);
|
||||
stepper_config(machine(), 1, &bwb_opto1_interface);
|
||||
stepper_config(machine(), 2, &bwb_opto1_interface);
|
||||
stepper_config(machine(), 3, &bwb_opto1_interface);
|
||||
stepper_config(machine(), 4, &bwb_opto1_interface);
|
||||
m_reel0->configure(&bwb_opto1_interface);
|
||||
m_reel1->configure(&bwb_opto1_interface);
|
||||
m_reel2->configure(&bwb_opto1_interface);
|
||||
m_reel3->configure(&bwb_opto1_interface);
|
||||
m_reel4->configure(&bwb_opto1_interface);
|
||||
m_bwb_chr_table1 = blsbys_data1;
|
||||
m_current_chr_table = blsbys_data;
|
||||
DRIVER_INIT_CALL(m4default_big);
|
||||
@ -2437,7 +2397,10 @@ DRIVER_INIT_MEMBER(mpu4_state,m4default_reels)
|
||||
{
|
||||
m_reel_mux=STANDARD_REEL;
|
||||
m_reels = 4;
|
||||
mpu4_config_common_reels(4);
|
||||
m_reel0->configure(&barcrest_reel_interface);
|
||||
m_reel1->configure(&barcrest_reel_interface);
|
||||
m_reel2->configure(&barcrest_reel_interface);
|
||||
m_reel3->configure(&barcrest_reel_interface);
|
||||
m_bwb_bank=0;
|
||||
}
|
||||
|
||||
@ -2453,14 +2416,14 @@ DRIVER_INIT_MEMBER(mpu4_state,m4default_alt)
|
||||
{
|
||||
m_reel_mux=STANDARD_REEL;
|
||||
m_reels = 8;
|
||||
stepper_config(machine(), 0, &barcrest_opto2_interface);
|
||||
stepper_config(machine(), 1, &barcrest_opto2_interface);
|
||||
stepper_config(machine(), 2, &barcrest_opto2_interface);
|
||||
stepper_config(machine(), 3, &barcrest_opto2_interface);
|
||||
stepper_config(machine(), 4, &barcrest_opto2_interface);
|
||||
stepper_config(machine(), 5, &barcrest_opto2_interface);
|
||||
stepper_config(machine(), 6, &barcrest_opto2_interface);
|
||||
stepper_config(machine(), 7, &barcrest_opto2_interface);
|
||||
m_reel0->configure(&barcrest_opto2_interface);
|
||||
m_reel1->configure(&barcrest_opto2_interface);
|
||||
m_reel2->configure(&barcrest_opto2_interface);
|
||||
m_reel3->configure(&barcrest_opto2_interface);
|
||||
m_reel4->configure(&barcrest_opto2_interface);
|
||||
m_reel5->configure(&barcrest_opto2_interface);
|
||||
m_reel6->configure(&barcrest_opto2_interface);
|
||||
m_reel7->configure(&barcrest_opto2_interface);
|
||||
DRIVER_INIT_CALL(m4default_banks);
|
||||
|
||||
m_bwb_bank=0;
|
||||
|
@ -1263,8 +1263,6 @@ MACHINE_RESET_MEMBER(mpu4vid_state,mpu4_vid)
|
||||
{
|
||||
m_vfd->reset(); //for debug ports only
|
||||
|
||||
mpu4_stepper_reset();
|
||||
|
||||
m_lamp_strobe = 0;
|
||||
m_lamp_strobe2 = 0;
|
||||
m_led_strobe = 0;
|
||||
|
@ -101,6 +101,12 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_cpuregion(*this, "maincpu"),
|
||||
m_nvram(*this, "nvram"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_reel4(*this, "reel4"),
|
||||
m_reel5(*this, "reel5"),
|
||||
m_io1(*this, "IN-0"),
|
||||
m_io2(*this, "IN-1"),
|
||||
m_io3(*this, "IN-2"),
|
||||
@ -122,6 +128,12 @@ public:
|
||||
required_memory_region m_cpuregion;
|
||||
// devices
|
||||
required_device<nvram_device> m_nvram;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_device<stepper_device> m_reel4;
|
||||
required_device<stepper_device> m_reel5;
|
||||
|
||||
|
||||
const stepper_interface **m_reel_setup;
|
||||
@ -131,6 +143,12 @@ public:
|
||||
int m_reel4_latch;
|
||||
int m_reel56_latch;
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; }
|
||||
SEC sec;
|
||||
|
||||
int m_meterstatus;
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
****************************************************************************/
|
||||
#include "machine/roc10937.h"
|
||||
#include "machine/steppers.h"
|
||||
#include "cpu/tms34010/tms34010.h"
|
||||
#include "sound/upd7759.h"
|
||||
|
||||
@ -62,7 +63,14 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_upd7759(*this, "upd"),
|
||||
m_palette(*this, "palette"),
|
||||
m_dsp(*this, "dsp") { }
|
||||
m_dsp(*this, "dsp"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_reel4(*this, "reel4"),
|
||||
m_reel5(*this, "reel5")
|
||||
{ }
|
||||
|
||||
UINT8 m_tms_irq;
|
||||
UINT8 m_duart_1_irq;
|
||||
@ -72,6 +80,12 @@ public:
|
||||
int m_lamp_strobe;
|
||||
UINT8 m_Lamps[256];
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; }
|
||||
int m_payen;
|
||||
int m_alpha_clock;
|
||||
int m_hopinhibit;
|
||||
@ -123,4 +137,10 @@ public:
|
||||
required_device<upd7759_device> m_upd7759;
|
||||
optional_device<palette_device> m_palette;
|
||||
optional_device<tms34010_device> m_dsp;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_device<stepper_device> m_reel4;
|
||||
required_device<stepper_device> m_reel5;
|
||||
};
|
||||
|
@ -44,7 +44,13 @@ public:
|
||||
m_s5_port(*this, "STROBE5"),
|
||||
m_s6_port(*this, "STROBE6"),
|
||||
m_s7_port(*this, "STROBE7"),
|
||||
m_bank1(*this, "bank1")
|
||||
m_bank1(*this, "bank1"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_reel4(*this, "reel4"),
|
||||
m_reel5(*this, "reel5")
|
||||
{}
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -63,6 +69,12 @@ public:
|
||||
required_ioport m_s6_port;
|
||||
required_ioport m_s7_port;
|
||||
required_memory_bank m_bank1;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_device<stepper_device> m_reel4;
|
||||
required_device<stepper_device> m_reel5;
|
||||
|
||||
UINT8 m_lamppos;
|
||||
int m_lamp_strobe;
|
||||
@ -79,6 +91,12 @@ public:
|
||||
TIMER_DEVICE_CALLBACK_MEMBER( maygay1b_nmitimer_callback );
|
||||
UINT8 m_Lamps[256];
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; }
|
||||
DECLARE_WRITE8_MEMBER(scanlines_w);
|
||||
DECLARE_WRITE8_MEMBER(lamp_data_w);
|
||||
DECLARE_WRITE8_MEMBER(lamp_data_2_w);
|
||||
@ -111,7 +129,6 @@ public:
|
||||
virtual void machine_reset();
|
||||
void cpu0_firq(int data);
|
||||
void cpu0_nmi();
|
||||
void m1_stepper_reset();
|
||||
};
|
||||
|
||||
MACHINE_CONFIG_EXTERN( maygay_m1 );
|
||||
|
@ -113,6 +113,14 @@ public:
|
||||
m_aux2_port(*this, "AUX2"),
|
||||
m_bank1(*this, "bank1"),
|
||||
m_msm6376(*this, "msm6376"),
|
||||
m_reel0(*this, "reel0"),
|
||||
m_reel1(*this, "reel1"),
|
||||
m_reel2(*this, "reel2"),
|
||||
m_reel3(*this, "reel3"),
|
||||
m_reel4(*this, "reel4"),
|
||||
m_reel5(*this, "reel5"),
|
||||
m_reel6(*this, "reel6"),
|
||||
m_reel7(*this, "reel7"),
|
||||
m_palette(*this, "palette")
|
||||
{}
|
||||
|
||||
@ -212,7 +220,6 @@ protected:
|
||||
void lamp_extend_large(int data,int column,int active);
|
||||
void led_write_latch(int latch, int data, int column);
|
||||
void update_meters();
|
||||
void mpu4_stepper_reset();
|
||||
void ic23_update();
|
||||
void ic24_output(int data);
|
||||
void ic24_setup();
|
||||
@ -242,6 +249,14 @@ protected:
|
||||
required_ioport m_aux2_port;
|
||||
optional_memory_bank m_bank1;
|
||||
optional_device<okim6376_device> m_msm6376;
|
||||
required_device<stepper_device> m_reel0;
|
||||
required_device<stepper_device> m_reel1;
|
||||
required_device<stepper_device> m_reel2;
|
||||
required_device<stepper_device> m_reel3;
|
||||
required_device<stepper_device> m_reel4;
|
||||
required_device<stepper_device> m_reel5;
|
||||
required_device<stepper_device> m_reel6;
|
||||
required_device<stepper_device> m_reel7;
|
||||
|
||||
enum
|
||||
{
|
||||
@ -280,6 +295,14 @@ protected:
|
||||
UINT8 m_led_strobe;
|
||||
UINT8 m_ay_data;
|
||||
int m_optic_pattern;
|
||||
DECLARE_WRITE_LINE_MEMBER(reel0_optic_cb) { if (state) m_optic_pattern |= 0x01; else m_optic_pattern &= ~0x01; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel1_optic_cb) { if (state) m_optic_pattern |= 0x02; else m_optic_pattern &= ~0x02; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel2_optic_cb) { if (state) m_optic_pattern |= 0x04; else m_optic_pattern &= ~0x04; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel3_optic_cb) { if (state) m_optic_pattern |= 0x08; else m_optic_pattern &= ~0x08; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel4_optic_cb) { if (state) m_optic_pattern |= 0x10; else m_optic_pattern &= ~0x10; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel5_optic_cb) { if (state) m_optic_pattern |= 0x20; else m_optic_pattern &= ~0x20; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel6_optic_cb) { if (state) m_optic_pattern |= 0x40; else m_optic_pattern &= ~0x40; }
|
||||
DECLARE_WRITE_LINE_MEMBER(reel7_optic_cb) { if (state) m_optic_pattern |= 0x80; else m_optic_pattern &= ~0x80; }
|
||||
int m_active_reel;
|
||||
int m_remote_meter;
|
||||
int m_reel_mux;
|
||||
|
@ -18,13 +18,13 @@
|
||||
|
||||
static UINT16 reelpos[MAX_STEPPERS];
|
||||
|
||||
void awp_draw_reel(int rno)
|
||||
void awp_draw_reel(int rno, stepper_device &reel)
|
||||
{
|
||||
int x = rno + 1;
|
||||
char rg[16];
|
||||
|
||||
sprintf(rg,"reel%d", x);
|
||||
reelpos[rno] = stepper_get_position(rno);
|
||||
reelpos[rno] = reel.get_position();
|
||||
if (reelpos[rno] == output_get_value(rg))
|
||||
{
|
||||
// Not moved, no need to update.
|
||||
@ -34,11 +34,11 @@ void awp_draw_reel(int rno)
|
||||
output_set_value(rg,(reelpos[rno]));
|
||||
|
||||
// if the reel isn't configured don't do this, otherwise you'll get DIV0
|
||||
if (stepper_get_max(rno))
|
||||
if (reel.get_max())
|
||||
{
|
||||
sprintf(rg,"sreel%d", x); // our new scrolling reels are called 'sreel'
|
||||
// normalize the value
|
||||
int sreelpos = (reelpos[rno] * 0x10000) / stepper_get_max(rno);
|
||||
int sreelpos = (reelpos[rno] * 0x10000) / reel.get_max();
|
||||
|
||||
output_set_value(rg,sreelpos);
|
||||
}
|
||||
|
@ -6,6 +6,8 @@
|
||||
#ifndef AWP_VIDEO
|
||||
#define AWP_VIDEO
|
||||
|
||||
void awp_draw_reel(int rno);
|
||||
#include "machine/steppers.h"
|
||||
|
||||
void awp_draw_reel(int rno, stepper_device &reel);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user