hh_cop400: coleco h2h basketball WIP

This commit is contained in:
hap 2016-03-05 20:33:42 +01:00
parent bc99bc2dca
commit 785a324d68
2 changed files with 226 additions and 7 deletions

View File

@ -21,6 +21,7 @@
#include "einvaderc.lh" // test-layout(but still playable)
#include "funjacks.lh"
#include "funrlgl.lh"
#include "h2hbaskb.lh"
#include "lightfgt.lh" // clickable
//#include "hh_cop400_test.lh" // common test-layout - use external artwork
@ -67,6 +68,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
void set_display_segmask(UINT32 digits, UINT32 mask);
void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
@ -195,6 +197,17 @@ void hh_cop400_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
void hh_cop400_state::set_display_segmask(UINT32 digits, UINT32 mask)
{
// set a segment mask per selected digit, but leave unselected ones alone
for (int i = 0; i < 0x20; i++)
{
if (digits & 1)
m_display_segmask[i] = mask;
digits >>= 1;
}
}
void hh_cop400_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@ -266,8 +279,8 @@ WRITE8_MEMBER(ctstein_state::write_g)
WRITE8_MEMBER(ctstein_state::write_l)
{
// L0-L3: button lamps (strobed)
display_matrix(4, 1, data, 1);
display_matrix(4, 1, data, 0);
display_matrix(4, 1, data & 0xf, 1);
display_matrix(4, 1, data & 0xf, 0);
}
READ8_MEMBER(ctstein_state::read_l)
@ -300,9 +313,9 @@ static INPUT_PORTS_START( ctstein )
PORT_START("IN.2") // G2 port L
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Red Button")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Green Button")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Blue Button")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Blue Button")
INPUT_PORTS_END
static MACHINE_CONFIG_START( ctstein, ctstein_state )
@ -333,7 +346,7 @@ MACHINE_CONFIG_END
Coleco Head to Head Basketball
* COP420 MCU label COP420L-NEZ/N
* 2-digit 7seg display, 41 other leds, 1-bit sound
***************************************************************************/
class h2hbaskb_state : public hh_cop400_state
@ -342,16 +355,90 @@ public:
h2hbaskb_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_cop400_state(mconfig, type, tag)
{ }
void prepare_display();
DECLARE_WRITE8_MEMBER(write_d);
DECLARE_WRITE8_MEMBER(write_g);
DECLARE_WRITE8_MEMBER(write_l);
DECLARE_READ8_MEMBER(read_in);
DECLARE_WRITE_LINE_MEMBER(write_so);
};
// handlers
//..
void h2hbaskb_state::prepare_display()
{
// D2,D3 double as multiplexer
UINT16 mask = ((m_d >> 2 & 1) * 0xf) | ((m_d << 1 & 0x10) * 0xf);
UINT16 sel = (m_g | m_d << 4 | m_g << 8 | m_d << 12) & mask;
// D2+G0,G1 are 7segs
set_display_segmask(3, 0x7f);
display_matrix(7, 16, m_l, sel);
}
WRITE8_MEMBER(h2hbaskb_state::write_d)
{
// D: led select
m_d = data & 0xf;
prepare_display();
}
WRITE8_MEMBER(h2hbaskb_state::write_g)
{
// G: led select, input mux
m_inp_mux = data;
m_g = data & 0xf;
prepare_display();
}
WRITE8_MEMBER(h2hbaskb_state::write_l)
{
// L0-L6: digit segments A-G
// L0-L4: led data
m_l = data;
prepare_display();
}
READ8_MEMBER(h2hbaskb_state::read_in)
{
// IN: multiplexed inputs
return read_inputs(4);
}
WRITE_LINE_MEMBER(h2hbaskb_state::write_so)
{
// SO: speaker out
m_speaker->level_w(state);
}
// config
static INPUT_PORTS_START( h2hbaskb )
PORT_START("IN.0") // G0 port IN
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_4)
PORT_START("IN.1") // G1 port IN
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_5)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_6)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_7)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_CODE(KEYCODE_8)
PORT_START("IN.2") // G2 port IN
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_CODE(KEYCODE_W)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_CODE(KEYCODE_E)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_CODE(KEYCODE_R)
PORT_START("IN.3") // G3 port IN
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_CODE(KEYCODE_T)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON14 ) PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON15 ) PORT_CODE(KEYCODE_U)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON16 ) PORT_CODE(KEYCODE_I)
INPUT_PORTS_END
static MACHINE_CONFIG_START( h2hbaskb, h2hbaskb_state )
@ -359,9 +446,14 @@ static MACHINE_CONFIG_START( h2hbaskb, h2hbaskb_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP420, 1000000) // approximation - RC osc. R=43K to +9V, C=101pf to GND
MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
MCFG_COP400_WRITE_D_CB(WRITE8(h2hbaskb_state, write_d))
MCFG_COP400_WRITE_G_CB(WRITE8(h2hbaskb_state, write_g))
MCFG_COP400_WRITE_L_CB(WRITE8(h2hbaskb_state, write_l))
MCFG_COP400_READ_IN_CB(READ8(h2hbaskb_state, read_in))
MCFG_COP400_WRITE_SO_CB(WRITELINE(h2hbaskb_state, write_so))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_cop400_state, display_decay_tick, attotime::from_msec(1))
// MCFG_DEFAULT_LAYOUT(layout_h2hbaskb)
MCFG_DEFAULT_LAYOUT(layout_h2hbaskb)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")

View File

@ -0,0 +1,127 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.20" blue="0.22" /></led7seg>
</element>
<element name="led" defstate="0">
<disk state="0"><color red="0.2" green="0.04" blue="0.05" /></disk>
<disk state="1"><color red="1.0" green="0.20" blue="0.22" /></disk>
</element>
<!-- build screen -->
<view name="Internal Layout">
<bounds left="0" right="12" top="0" bottom="30" />
<bezel element="static_black">
<bounds left="0" right="12" top="0" bottom="30" />
</bezel>
<bezel name="digit1" element="digit"><bounds x="0" y="0" width="4" height="6" /></bezel>
<bezel name="digit0" element="digit"><bounds x="4" y="0" width="4" height="6" /></bezel>
<!--
<bezel name="0.0" element="led"><bounds x="0" y="10" width="1" height="1" /></bezel>
<bezel name="0.1" element="led"><bounds x="1" y="10" width="1" height="1" /></bezel>
<bezel name="0.2" element="led"><bounds x="2" y="10" width="1" height="1" /></bezel>
<bezel name="0.3" element="led"><bounds x="3" y="10" width="1" height="1" /></bezel>
<bezel name="0.4" element="led"><bounds x="4" y="10" width="1" height="1" /></bezel>
<bezel name="1.0" element="led"><bounds x="0" y="11" width="1" height="1" /></bezel>
<bezel name="1.1" element="led"><bounds x="1" y="11" width="1" height="1" /></bezel>
<bezel name="1.2" element="led"><bounds x="2" y="11" width="1" height="1" /></bezel>
<bezel name="1.3" element="led"><bounds x="3" y="11" width="1" height="1" /></bezel>
<bezel name="1.4" element="led"><bounds x="4" y="11" width="1" height="1" /></bezel>
-->
<bezel name="2.0" element="led"><bounds x="0" y="12" width="1" height="1" /></bezel>
<bezel name="2.1" element="led"><bounds x="1" y="12" width="1" height="1" /></bezel>
<bezel name="2.2" element="led"><bounds x="2" y="12" width="1" height="1" /></bezel>
<bezel name="2.3" element="led"><bounds x="3" y="12" width="1" height="1" /></bezel>
<bezel name="2.4" element="led"><bounds x="4" y="12" width="1" height="1" /></bezel>
<bezel name="3.0" element="led"><bounds x="0" y="13" width="1" height="1" /></bezel>
<bezel name="3.1" element="led"><bounds x="1" y="13" width="1" height="1" /></bezel>
<bezel name="3.2" element="led"><bounds x="2" y="13" width="1" height="1" /></bezel>
<bezel name="3.3" element="led"><bounds x="3" y="13" width="1" height="1" /></bezel>
<bezel name="3.4" element="led"><bounds x="4" y="13" width="1" height="1" /></bezel>
<bezel name="4.0" element="led"><bounds x="0" y="14" width="1" height="1" /></bezel>
<bezel name="4.1" element="led"><bounds x="1" y="14" width="1" height="1" /></bezel>
<bezel name="4.2" element="led"><bounds x="2" y="14" width="1" height="1" /></bezel>
<bezel name="4.3" element="led"><bounds x="3" y="14" width="1" height="1" /></bezel>
<bezel name="4.4" element="led"><bounds x="4" y="14" width="1" height="1" /></bezel>
<bezel name="5.0" element="led"><bounds x="0" y="15" width="1" height="1" /></bezel>
<bezel name="5.1" element="led"><bounds x="1" y="15" width="1" height="1" /></bezel>
<bezel name="5.2" element="led"><bounds x="2" y="15" width="1" height="1" /></bezel>
<bezel name="5.3" element="led"><bounds x="3" y="15" width="1" height="1" /></bezel>
<bezel name="5.4" element="led"><bounds x="4" y="15" width="1" height="1" /></bezel>
<!--
<bezel name="6.0" element="led"><bounds x="0" y="16" width="1" height="1" /></bezel>
<bezel name="6.1" element="led"><bounds x="1" y="16" width="1" height="1" /></bezel>
<bezel name="6.2" element="led"><bounds x="2" y="16" width="1" height="1" /></bezel>
<bezel name="6.3" element="led"><bounds x="3" y="16" width="1" height="1" /></bezel>
<bezel name="6.4" element="led"><bounds x="4" y="16" width="1" height="1" /></bezel>
<bezel name="7.0" element="led"><bounds x="0" y="17" width="1" height="1" /></bezel>
<bezel name="7.1" element="led"><bounds x="1" y="17" width="1" height="1" /></bezel>
<bezel name="7.2" element="led"><bounds x="2" y="17" width="1" height="1" /></bezel>
<bezel name="7.3" element="led"><bounds x="3" y="17" width="1" height="1" /></bezel>
<bezel name="7.4" element="led"><bounds x="4" y="17" width="1" height="1" /></bezel>
-->
<bezel name="8.0" element="led"><bounds x="0" y="18" width="1" height="1" /></bezel>
<bezel name="8.1" element="led"><bounds x="1" y="18" width="1" height="1" /></bezel>
<bezel name="8.2" element="led"><bounds x="2" y="18" width="1" height="1" /></bezel>
<bezel name="8.3" element="led"><bounds x="3" y="18" width="1" height="1" /></bezel>
<bezel name="8.4" element="led"><bounds x="4" y="18" width="1" height="1" /></bezel>
<bezel name="9.0" element="led"><bounds x="0" y="19" width="1" height="1" /></bezel>
<bezel name="9.1" element="led"><bounds x="1" y="19" width="1" height="1" /></bezel>
<bezel name="9.2" element="led"><bounds x="2" y="19" width="1" height="1" /></bezel>
<bezel name="9.3" element="led"><bounds x="3" y="19" width="1" height="1" /></bezel>
<bezel name="9.4" element="led"><bounds x="4" y="19" width="1" height="1" /></bezel>
<bezel name="10.0" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel>
<bezel name="10.1" element="led"><bounds x="1" y="20" width="1" height="1" /></bezel>
<bezel name="10.2" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel>
<bezel name="10.3" element="led"><bounds x="3" y="20" width="1" height="1" /></bezel>
<bezel name="10.4" element="led"><bounds x="4" y="20" width="1" height="1" /></bezel>
<bezel name="11.0" element="led"><bounds x="0" y="21" width="1" height="1" /></bezel>
<bezel name="11.1" element="led"><bounds x="1" y="21" width="1" height="1" /></bezel>
<bezel name="11.2" element="led"><bounds x="2" y="21" width="1" height="1" /></bezel>
<bezel name="11.3" element="led"><bounds x="3" y="21" width="1" height="1" /></bezel>
<bezel name="11.4" element="led"><bounds x="4" y="21" width="1" height="1" /></bezel>
<bezel name="12.0" element="led"><bounds x="0" y="22" width="1" height="1" /></bezel>
<bezel name="12.1" element="led"><bounds x="1" y="22" width="1" height="1" /></bezel>
<bezel name="12.2" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel>
<bezel name="12.3" element="led"><bounds x="3" y="22" width="1" height="1" /></bezel>
<bezel name="12.4" element="led"><bounds x="4" y="22" width="1" height="1" /></bezel>
<bezel name="13.0" element="led"><bounds x="0" y="23" width="1" height="1" /></bezel>
<bezel name="13.1" element="led"><bounds x="1" y="23" width="1" height="1" /></bezel>
<bezel name="13.2" element="led"><bounds x="2" y="23" width="1" height="1" /></bezel>
<bezel name="13.3" element="led"><bounds x="3" y="23" width="1" height="1" /></bezel>
<bezel name="13.4" element="led"><bounds x="4" y="23" width="1" height="1" /></bezel>
<!--
<bezel name="14.0" element="led"><bounds x="0" y="24" width="1" height="1" /></bezel>
<bezel name="14.1" element="led"><bounds x="1" y="24" width="1" height="1" /></bezel>
<bezel name="14.2" element="led"><bounds x="2" y="24" width="1" height="1" /></bezel>
<bezel name="14.3" element="led"><bounds x="3" y="24" width="1" height="1" /></bezel>
<bezel name="14.4" element="led"><bounds x="4" y="24" width="1" height="1" /></bezel>
<bezel name="15.0" element="led"><bounds x="0" y="25" width="1" height="1" /></bezel>
<bezel name="15.1" element="led"><bounds x="1" y="25" width="1" height="1" /></bezel>
<bezel name="15.2" element="led"><bounds x="2" y="25" width="1" height="1" /></bezel>
<bezel name="15.3" element="led"><bounds x="3" y="25" width="1" height="1" /></bezel>
<bezel name="15.4" element="led"><bounds x="4" y="25" width="1" height="1" /></bezel>
-->
</view>
</mamelayout>