diff options
Diffstat (limited to 'src/mame/machine/subs.cpp')
-rw-r--r-- | src/mame/machine/subs.cpp | 177 |
1 files changed, 0 insertions, 177 deletions
diff --git a/src/mame/machine/subs.cpp b/src/mame/machine/subs.cpp deleted file mode 100644 index b12e8cabbe5..00000000000 --- a/src/mame/machine/subs.cpp +++ /dev/null @@ -1,177 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Mike Balfour -/*************************************************************************** - - Atari Subs hardware - -***************************************************************************/ - -#include "emu.h" -#include "includes/subs.h" - - -/*************************************************************************** -machine initialization -***************************************************************************/ - -void subs_state::machine_start() -{ - save_item(NAME(m_steering_buf1)); - save_item(NAME(m_steering_buf2)); - save_item(NAME(m_steering_val1)); - save_item(NAME(m_steering_val2)); - save_item(NAME(m_last_val_1)); - save_item(NAME(m_last_val_2)); -} - -void subs_state::machine_reset() -{ - m_steering_buf1 = 0; - m_steering_buf2 = 0; - m_steering_val1 = 0x00; - m_steering_val2 = 0x00; -} - -/*************************************************************************** -interrupt -***************************************************************************/ -INTERRUPT_GEN_MEMBER(subs_state::interrupt) -{ - /* only do NMI interrupt if not in TEST mode */ - if ((ioport("IN1")->read() & 0x40)==0x40) - device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - -/*************************************************************************** -Steering - -When D7 is high, the steering wheel has moved. -If D6 is high, it moved left. If D6 is low, it moved right. -Be sure to keep returning a direction until steer_reset is called. -***************************************************************************/ -int subs_state::steering_1() -{ - int this_val; - int delta; - - this_val=ioport("DIAL2")->read(); - - delta=this_val-m_last_val_1; - m_last_val_1=this_val; - if (delta>128) delta-=256; - else if (delta<-128) delta+=256; - /* Divide by four to make our steering less sensitive */ - m_steering_buf1+=(delta/4); - - if (m_steering_buf1>0) - { - m_steering_buf1--; - m_steering_val1=0xC0; - } - else if (m_steering_buf1<0) - { - m_steering_buf1++; - m_steering_val1=0x80; - } - - return m_steering_val1; -} - -int subs_state::steering_2() -{ - int this_val; - int delta; - - this_val=ioport("DIAL1")->read(); - - delta=this_val-m_last_val_2; - m_last_val_2=this_val; - if (delta>128) delta-=256; - else if (delta<-128) delta+=256; - /* Divide by four to make our steering less sensitive */ - m_steering_buf2+=(delta/4); - - if (m_steering_buf2>0) - { - m_steering_buf2--; - m_steering_val2=0xC0; - } - else if (m_steering_buf2<0) - { - m_steering_buf2++; - m_steering_val2=0x80; - } - - return m_steering_val2; -} - -/*************************************************************************** -steer_reset -***************************************************************************/ -WRITE8_MEMBER(subs_state::steer_reset_w) -{ - m_steering_val1 = 0x00; - m_steering_val2 = 0x00; -} - -/*************************************************************************** -control_r -***************************************************************************/ -READ8_MEMBER(subs_state::control_r) -{ - int inport = ioport("IN0")->read(); - - switch (offset & 0x07) - { - case 0x00: return ((inport & 0x01) << 7); /* diag step */ - case 0x01: return ((inport & 0x02) << 6); /* diag hold */ - case 0x02: return ((inport & 0x04) << 5); /* slam */ - case 0x03: return ((inport & 0x08) << 4); /* spare */ - case 0x04: return ((steering_1() & 0x40) << 1); /* steer dir 1 */ - case 0x05: return ((steering_1() & 0x80) << 0); /* steer flag 1 */ - case 0x06: return ((steering_2() & 0x40) << 1); /* steer dir 2 */ - case 0x07: return ((steering_2() & 0x80) << 0); /* steer flag 2 */ - } - - return 0; -} - -/*************************************************************************** -coin_r -***************************************************************************/ -READ8_MEMBER(subs_state::coin_r) -{ - int inport = ioport("IN1")->read(); - - switch (offset & 0x07) - { - case 0x00: return ((inport & 0x01) << 7); /* coin 1 */ - case 0x01: return ((inport & 0x02) << 6); /* start 1 */ - case 0x02: return ((inport & 0x04) << 5); /* coin 2 */ - case 0x03: return ((inport & 0x08) << 4); /* start 2 */ - case 0x04: return ((inport & 0x10) << 3); /* VBLANK */ - case 0x05: return ((inport & 0x20) << 2); /* fire 1 */ - case 0x06: return ((inport & 0x40) << 1); /* test */ - case 0x07: return ((inport & 0x80) << 0); /* fire 2 */ - } - - return 0; -} - -/*************************************************************************** -options_r -***************************************************************************/ -READ8_MEMBER(subs_state::options_r) -{ - int opts = ioport("DSW")->read(); - - switch (offset & 0x03) - { - case 0x00: return ((opts & 0xC0) >> 6); /* language */ - case 0x01: return ((opts & 0x30) >> 4); /* credits */ - case 0x02: return ((opts & 0x0C) >> 2); /* game time */ - case 0x03: return ((opts & 0x03) >> 0); /* extended time */ - } - - return 0; -} |