summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/steppers.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine/steppers.h')
-rw-r--r--src/emu/machine/steppers.h147
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);