summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/stactics.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/stactics.c')
-rw-r--r--src/mame/machine/stactics.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/mame/machine/stactics.c b/src/mame/machine/stactics.c
new file mode 100644
index 00000000000..56b9ae296cf
--- /dev/null
+++ b/src/mame/machine/stactics.c
@@ -0,0 +1,94 @@
+
+#include "driver.h"
+
+/* needed in video/stactics.c */
+int stactics_vert_pos;
+int stactics_horiz_pos;
+UINT8 *stactics_motor_on;
+
+/* defined in video/stactics.c */
+extern int stactics_vblank_count;
+extern int stactics_shot_standby;
+extern int stactics_shot_arrive;
+
+#ifdef UNUSED_FUNCTION
+READ8_HANDLER( stactics_port_0_r )
+{
+ if (*stactics_motor_on & 0x01)
+ {
+ return (input_port_0_r(0)&0x7f);
+ }
+ else if ((stactics_horiz_pos == 0) && (stactics_vert_pos == 0))
+ {
+ return (input_port_0_r(0)&0x7f);
+ }
+ else
+ {
+ return (input_port_0_r(0)|0x80);
+ }
+}
+#endif
+
+READ8_HANDLER( stactics_port_2_r )
+{
+ return (input_port_2_r(0)&0xf0)+(stactics_vblank_count&0x08)+(mame_rand(Machine)%8);
+}
+
+READ8_HANDLER( stactics_port_3_r )
+{
+ return (input_port_3_r(0)&0x7d)+(stactics_shot_standby<<1)
+ +((stactics_shot_arrive^0x01)<<7);
+}
+
+READ8_HANDLER( stactics_vert_pos_r )
+{
+ return 0x70-stactics_vert_pos;
+}
+
+READ8_HANDLER( stactics_horiz_pos_r )
+{
+ return stactics_horiz_pos+0x80;
+}
+
+INTERRUPT_GEN( stactics_interrupt )
+{
+ /* Run the monitor motors */
+
+ if (*stactics_motor_on & 0x01) /* under joystick control */
+ {
+ int ip3 = readinputport(3);
+ int ip4 = readinputport(4);
+
+ if ((ip4 & 0x01) == 0) /* up */
+ if (stactics_vert_pos > -128)
+ stactics_vert_pos--;
+ if ((ip4 & 0x02) == 0) /* down */
+ if (stactics_vert_pos < 127)
+ stactics_vert_pos++;
+ if ((ip3 & 0x20) == 0) /* left */
+ if (stactics_horiz_pos < 127)
+ stactics_horiz_pos++;
+ if ((ip3 & 0x40) == 0) /* right */
+ if (stactics_horiz_pos > -128)
+ stactics_horiz_pos--;
+ }
+ else /* under self-centering control */
+ {
+ if (stactics_horiz_pos > 0)
+ stactics_horiz_pos--;
+ else if (stactics_horiz_pos < 0)
+ stactics_horiz_pos++;
+ if (stactics_vert_pos > 0)
+ stactics_vert_pos--;
+ else if (stactics_vert_pos < 0)
+ stactics_vert_pos++;
+ }
+
+ cpunum_set_input_line(0,0,HOLD_LINE);
+}
+
+WRITE8_HANDLER( stactics_coin_lockout_w )
+{
+ coin_lockout_w(offset, ~data & 0x01);
+}
+