mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
Merge pull request #1355 from ajrhacker/big10_inputs
big10: Various modest input/output improvements
This commit is contained in:
commit
8f0c90af03
@ -239,6 +239,7 @@ has twice the steps, happening twice as fast.
|
||||
*************************************/
|
||||
|
||||
#define ENABLE_REGISTER_TEST (0) /* Enable preprogrammed registers */
|
||||
#define LOG_IGNORED_WRITES (0)
|
||||
|
||||
#define MAX_OUTPUT 0x7fff
|
||||
|
||||
@ -650,11 +651,13 @@ void ay8910_device::ay8910_write_reg(int r, int v)
|
||||
if (!m_port_a_write_cb.isnull())
|
||||
m_port_a_write_cb((offs_t)0, m_regs[AY_PORTA]);
|
||||
else
|
||||
logerror("warning - write %02x to 8910 '%s' Port A\n",m_regs[AY_PORTA],tag());
|
||||
logerror("warning - write %02x to 8910 Port A\n", m_regs[AY_PORTA]);
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("warning: write to 8910 '%s' Port A set as input - ignored\n",tag());
|
||||
#if LOG_IGNORED_WRITES
|
||||
logerror("warning: write %02x to 8910 Port A set as input - ignored\n", v);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case AY_PORTB:
|
||||
@ -663,11 +666,13 @@ void ay8910_device::ay8910_write_reg(int r, int v)
|
||||
if (!m_port_b_write_cb.isnull())
|
||||
m_port_b_write_cb((offs_t)0, m_regs[AY_PORTB]);
|
||||
else
|
||||
logerror("warning - write %02x to 8910 '%s' Port B\n",m_regs[AY_PORTB],tag());
|
||||
logerror("warning - write %02x to 8910 Port B\n", m_regs[AY_PORTB]);
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("warning: write to 8910 '%s' Port B set as input - ignored\n",tag());
|
||||
#if LOG_IGNORED_WRITES
|
||||
logerror("warning: write %02x to 8910 Port B set as input - ignored\n", v);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -997,7 +1002,7 @@ int ay8910_device::ay8910_read_ym()
|
||||
{
|
||||
case AY_PORTA:
|
||||
if ((m_regs[AY_ENABLE] & 0x40) != 0)
|
||||
logerror("warning: read from 8910 '%s' Port A set as output\n",tag());
|
||||
logerror("%s: warning - read from 8910 '%s' Port A set as output\n", machine().describe_context());
|
||||
/*
|
||||
even if the port is set as output, we still need to return the external
|
||||
data. Some games, like kidniki, need this to work.
|
||||
@ -1011,15 +1016,15 @@ int ay8910_device::ay8910_read_ym()
|
||||
if (!m_port_a_read_cb.isnull())
|
||||
m_regs[AY_PORTA] = m_port_a_read_cb(0);
|
||||
else
|
||||
logerror("%s: warning - read 8910 '%s' Port A\n",machine().describe_context(),tag());
|
||||
logerror("%s: warning - read 8910 Port A\n", machine().describe_context());
|
||||
break;
|
||||
case AY_PORTB:
|
||||
if ((m_regs[AY_ENABLE] & 0x80) != 0)
|
||||
logerror("warning: read from 8910 '%s' Port B set as output\n",tag());
|
||||
logerror("%s: warning - read from 8910 Port B set as output\n", machine().describe_context());
|
||||
if (!m_port_b_read_cb.isnull())
|
||||
m_regs[AY_PORTB] = m_port_b_read_cb(0);
|
||||
else
|
||||
logerror("%s: warning - read 8910 '%s' Port B\n",machine().describe_context(),tag());
|
||||
logerror("%s: warning - read 8910 Port B\n", machine().describe_context());
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,7 @@
|
||||
#include "sound/ay8910.h"
|
||||
#include "video/v9938.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/ticket.h"
|
||||
|
||||
|
||||
class big10_state : public driver_device
|
||||
@ -72,35 +73,24 @@ public:
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_v9938(*this, "v9938")
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_in1(*this, "IN1")
|
||||
, m_in2(*this, "IN2")
|
||||
, m_in3(*this, "IN3")
|
||||
, m_hopper(*this, "hopper")
|
||||
, m_in(*this, "IN%u", 1)
|
||||
{ }
|
||||
|
||||
required_device<v9938_device> m_v9938;
|
||||
UINT8 m_mux_data;
|
||||
DECLARE_READ8_MEMBER(mux_r);
|
||||
DECLARE_WRITE8_MEMBER(mux_w);
|
||||
virtual void machine_reset() override;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_ioport m_in1;
|
||||
required_ioport m_in2;
|
||||
required_ioport m_in3;
|
||||
required_device<ticket_dispenser_device> m_hopper;
|
||||
required_ioport_array<6> m_in;
|
||||
};
|
||||
|
||||
|
||||
#define HOPPER_PULSE 40 // time between hopper pulses in milliseconds
|
||||
#define VDP_MEM 0x40000
|
||||
|
||||
|
||||
/*************************************
|
||||
* Machine Reset *
|
||||
*************************************/
|
||||
|
||||
void big10_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/****************************************
|
||||
* Input Ports Demux & Common Routines *
|
||||
****************************************/
|
||||
@ -109,18 +99,18 @@ void big10_state::machine_reset()
|
||||
WRITE8_MEMBER(big10_state::mux_w)
|
||||
{
|
||||
m_mux_data = ~data;
|
||||
m_hopper->write(space, 0, (data & 0x40) << 1);
|
||||
machine().output().set_lamp_value(1, BIT(~data, 7)); // maybe a coin counter?
|
||||
}
|
||||
|
||||
READ8_MEMBER(big10_state::mux_r)
|
||||
{
|
||||
switch(m_mux_data)
|
||||
{
|
||||
case 1: return m_in1->read();
|
||||
case 2: return m_in2->read();
|
||||
case 4: return m_in3->read();
|
||||
}
|
||||
UINT8 result = 0xff;
|
||||
for (int b = 0; b < 6; b++)
|
||||
if (BIT(m_mux_data, b))
|
||||
result &= m_in[b]->read();
|
||||
|
||||
return m_mux_data;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -151,9 +141,9 @@ ADDRESS_MAP_END
|
||||
static INPUT_PORTS_START( big10 )
|
||||
|
||||
PORT_START("SYSTEM")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_TOGGLE /* Service Mode */
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W) PORT_NAME("Payout")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Analyze Mode") PORT_TOGGLE
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode, go to the game whilst keep pressed.
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode, go to the game whilst keep pressed.
|
||||
@ -161,46 +151,53 @@ static INPUT_PORTS_START( big10 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2)
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Number 0")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Number 1")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Number 2")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Number 3")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Number 4")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Number 5")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Number 6")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON14 ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Number 7")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Number 0")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Number 1")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Number 2")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Number 3")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Number 4")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Number 5")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Number 6")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Number 7")
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON15 ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Number 8")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON16 ) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Number 9")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_F) PORT_NAME("Flip Flop")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Number 8")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Number 9")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("Flip Flop")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Select")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) PORT_NAME("Select 10")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("Cancel All")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_2) PORT_NAME("Start")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_1) PORT_NAME("Bet")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
|
||||
|
||||
PORT_START("IN3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_3) PORT_NAME("Double Up")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_4) PORT_NAME("Take Score")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_A) PORT_NAME("Big")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_S) PORT_NAME("Small")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Small")
|
||||
PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // in test mode triggers a sound and screen turns black, hanging the game.
|
||||
|
||||
PORT_START("IN4")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("IN5")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("IN6")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("DSW1")
|
||||
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8")
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:7")
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:6")
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:5")
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x03, 0x03, "Credit Limit?" ) PORT_DIPLOCATION("DSW1:8,7")
|
||||
PORT_DIPSETTING( 0x00, "500" )
|
||||
PORT_DIPSETTING( 0x01, "1000" )
|
||||
PORT_DIPSETTING( 0x02, "3000" )
|
||||
PORT_DIPSETTING( 0x03, "9999" )
|
||||
PORT_DIPNAME( 0x0c, 0x0c, "Unknown" ) PORT_DIPLOCATION("DSW1:6,5") // $C17E
|
||||
PORT_DIPSETTING( 0x00, "0" )
|
||||
PORT_DIPSETTING( 0x04, "1" )
|
||||
PORT_DIPSETTING( 0x08, "2" )
|
||||
PORT_DIPSETTING( 0x0c, "3" )
|
||||
PORT_DIPNAME( 0x30, 0x30, "Main Game Rate" ) PORT_DIPLOCATION("DSW1:4,3")
|
||||
PORT_DIPSETTING( 0x00, "60%" )
|
||||
PORT_DIPSETTING( 0x10, "70%" )
|
||||
@ -243,6 +240,8 @@ static MACHINE_CONFIG_START( big10, big10_state )
|
||||
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW1"))
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(big10_state, mux_w))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
|
||||
|
||||
MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(HOPPER_PULSE), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user