diff options
Diffstat (limited to 'src/emu/machine/steppers.h')
-rw-r--r-- | src/emu/machine/steppers.h | 147 |
1 files changed, 112 insertions, 35 deletions
diff --git a/src/emu/machine/steppers.h b/src/emu/machine/steppers.h index f6bc3dd9b1c..4d1b49adfd4 100644 --- a/src/emu/machine/steppers.h +++ b/src/emu/machine/steppers.h @@ -13,40 +13,82 @@ #ifndef INC_STEPPERS #define INC_STEPPERS -#define MAX_STEPPERS 8 /* maximum number of steppers */ - -#define STARPOINT_48STEP_REEL 0 /* STARPOINT RMXXX reel unit */ -#define STARPOINT_144STEP_DICE 1 /* STARPOINT 1DCU DICE mechanism */ -#define STARPOINT_200STEP_REEL 2 - -#define BARCREST_48STEP_REEL 3 /* Barcrest bespoke reel unit */ -#define MPU3_48STEP_REEL 4 - -#define ECOIN_200STEP_REEL 5 /* Probably not bespoke, but can't find a part number */ - -#define GAMESMAN_48STEP_REEL 6 -#define GAMESMAN_100STEP_REEL 7 -#define GAMESMAN_200STEP_REEL 8 - -#define PROJECT_48STEP_REEL 9 - -/*------------- Stepper motor interface structure -----------------*/ - -struct stepper_interface -{ - UINT8 type; /* Reel unit type */ - INT16 index_start;/* start position of index (in half steps) */ - INT16 index_end; /* end position of index (in half steps) */ - INT16 index_patt; /* pattern needed on coils (0=don't care) */ - UINT8 initphase; /* Phase at 0, for opto linkage */ -}; - -extern const stepper_interface starpoint_interface_48step; -extern const stepper_interface starpointrm20_interface_48step; - -extern const stepper_interface starpoint_interface_200step_reel; -extern const stepper_interface ecoin_interface_200step_reel; - +#define NOT_A_REEL 0 +#define STARPOINT_48STEP_REEL 1 /* STARPOINT RMXXX reel unit */ +#define STARPOINT_144STEP_DICE 2 /* STARPOINT 1DCU DICE mechanism */ +#define STARPOINT_200STEP_REEL 3 + +#define BARCREST_48STEP_REEL 4 /* Barcrest bespoke reel unit */ +#define MPU3_48STEP_REEL 5 + +#define ECOIN_200STEP_REEL 6 /* Probably not bespoke, but can't find a part number */ + +#define GAMESMAN_48STEP_REEL 7 +#define GAMESMAN_100STEP_REEL 8 +#define GAMESMAN_200STEP_REEL 9 + +#define PROJECT_48STEP_REEL 10 + +#define MCFG_STEPPER_ADD(_tag)\ + MCFG_DEVICE_ADD(_tag, STEPPER, 0) + +#define MCFG_STEPPER_REEL_TYPE(_data) \ + stepper_device::set_reel_type(*device, _data); + +/* total size of reel (in half steps) */ +#define MCFG_STEPPER_MAX_STEPS(_write) \ + stepper_device::set_max_steps(*device, _write); + +/* start position of index (in half steps) */ +#define MCFG_STEPPER_START_INDEX(_write) \ + stepper_device::set_start_index(*device, _write); + +/* end position of index (in half steps) */ +#define MCFG_STEPPER_END_INDEX(_write) \ + stepper_device::set_end_index(*device, _write); + +/* end position of index (in half steps) */ +#define MCFG_STEPPER_INDEX_PATTERN(_write) \ + stepper_device::set_index_pattern(*device, _write); + +/* Phase at 0, for opto linkage */ +#define MCFG_STEPPER_INIT_PHASE(_write) \ + stepper_device::set_init_phase(*device, _write); + +#define MCFG_STARPOINT_48STEP_ADD(_tag)\ + MCFG_STEPPER_ADD(_tag)\ + MCFG_STEPPER_REEL_TYPE(STARPOINT_48STEP_REEL)\ + MCFG_STEPPER_START_INDEX(1)\ + MCFG_STEPPER_END_INDEX(3)\ + MCFG_STEPPER_INDEX_PATTERN(0x09)\ + MCFG_STEPPER_INIT_PHASE(4) + +#define MCFG_STARPOINT_RM20_48STEP_ADD(_tag)\ + MCFG_DEVICE_ADD(_tag, STEPPER, 0)\ + MCFG_STEPPER_REEL_TYPE(STARPOINT_48STEP_REEL)\ + MCFG_STEPPER_START_INDEX(16)\ + MCFG_STEPPER_END_INDEX(24)\ + MCFG_STEPPER_INDEX_PATTERN(0x09)\ + MCFG_STEPPER_INIT_PHASE(7) + +#define MCFG_STARPOINT_200STEP_ADD(_tag)\ + MCFG_DEVICE_ADD(_tag, STEPPER, 0)\ + MCFG_STEPPER_REEL_TYPE(STARPOINT_200STEP_REEL)\ + MCFG_STEPPER_MAX_STEPS(200*2)\ + MCFG_STEPPER_START_INDEX(12)\ + MCFG_STEPPER_END_INDEX(24)\ + MCFG_STEPPER_INDEX_PATTERN(0x09)\ + MCFG_STEPPER_INIT_PHASE(7) + +//guess +#define MCFG_ECOIN_200STEP_ADD(_tag)\ + MCFG_DEVICE_ADD(_tag, STEPPER, 0)\ + MCFG_STEPPER_REEL_TYPE(ECOIN_200STEP_REEL)\ + MCFG_STEPPER_MAX_STEPS(200*2)\ + MCFG_STEPPER_START_INDEX(12)\ + MCFG_STEPPER_END_INDEX(24)\ + MCFG_STEPPER_INDEX_PATTERN(0x09)\ + MCFG_STEPPER_INIT_PHASE(7) #define MCFG_STEPPER_OPTIC_CALLBACK(_write) \ devcb = &stepper_device::set_optic_handler(*device, DEVCB_##_write); @@ -61,7 +103,42 @@ public: 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); } - void configure(const stepper_interface *intf); + static void set_reel_type(device_t &device, UINT8 type) + { + downcast<stepper_device &>(device).m_type = type; + switch ( 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 : + downcast<stepper_device &>(device).m_max_steps = (48*2); + break; + case GAMESMAN_100STEP_REEL : + downcast<stepper_device &>(device).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 + downcast<stepper_device &>(device).m_max_steps = ((48*3)*2); + break; + case STARPOINT_200STEP_REEL : + case GAMESMAN_200STEP_REEL : + case ECOIN_200STEP_REEL : + downcast<stepper_device &>(device).m_max_steps = (200*2); + break; + } + } + static void set_max_steps(device_t &device, INT16 steps) { downcast<stepper_device &>(device).m_max_steps = steps; } + static void set_start_index(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_start = index; } + static void set_end_index(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_end = index; } + static void set_index_pattern(device_t &device, INT16 index) { downcast<stepper_device &>(device).m_index_patt = index; } + static void set_init_phase(device_t &device, UINT8 phase) + { + downcast<stepper_device &>(device).m_initphase = phase; + downcast<stepper_device &>(device).m_phase = phase; + downcast<stepper_device &>(device).m_old_phase = phase; + } /* update a motor */ int update(UINT8 pattern); |