mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
elecbowl wip
This commit is contained in:
parent
1f4d126bd9
commit
c575a0b993
@ -5,15 +5,26 @@
|
||||
** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.c) **
|
||||
|
||||
Marx Series 300 Electronic Bowling Game
|
||||
Main board:
|
||||
* TMS1100NLL MP3403 DBS 7836 SINGAPORE
|
||||
* 4*SN75492 quad segment driver, 2*SN74259 8-line demultiplexer,
|
||||
2*CD4043 quad r/s input latch
|
||||
* 5 7seg LEDs, 15 lamps(10 lamps projected to bowling pins reflection),
|
||||
1bit-sound with crude volume control
|
||||
* edge connector to sensor board, inputs, ...?
|
||||
|
||||
10 lamps for bowling pins + 3 more bulbs, and 7segs for frame number and
|
||||
scores. Board size is 10-12" by 6-8".
|
||||
lamp translation table: SN74259.u5(mux 1) goes to MESS output lamp5x,
|
||||
SN74259.u6(mux 2) goes to MESS output lamp6x. u1-u3 are SN75492 ICs,
|
||||
where other: u1 A2 is N/C, u3 A1 is from O2 and goes to digits seg C.
|
||||
|
||||
some clues:
|
||||
- it's from 1978
|
||||
- Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403
|
||||
- it plays some short jingles (you need to be lucky with button mashing)
|
||||
u5 Q0 -> u1 A4 -> L2 (pin #2) u6 Q0 -> u3 A4 -> L1 (pin #1)
|
||||
u5 Q1 -> u1 A5 -> L4 (pin #4) u6 Q1 -> u3 A5 -> L5 (pin #5)
|
||||
u5 Q2 -> u1 A6 -> L7 (pin #7) u6 Q2 -> u2 A3 -> L11 (player 1)
|
||||
u5 Q3 -> u1 A1 -> L8 (pin #8) u6 Q3 -> u2 A2 -> L12 (player 2)
|
||||
u5 Q4 -> u3 A2 -> L3 (pin #3) u6 Q4 -> u2 A1 -> L15 (?)
|
||||
u5 Q5 -> u2 A6 -> L6 (pin #6) u6 Q5 -> u3 A6 -> L14 (?)
|
||||
u5 Q6 -> u2 A5 -> L10 (pin #10) u6 Q6 -> u1 A3 -> L13 (spare)
|
||||
u5 Q7 -> u2 A4 -> L9 (pin #9) u6 Q7 -> u3 A3 -> digit 4 B+C
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -28,15 +39,43 @@ public:
|
||||
: hh_tms1k_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void prepare_display();
|
||||
DECLARE_WRITE16_MEMBER(write_r);
|
||||
DECLARE_WRITE16_MEMBER(write_o);
|
||||
DECLARE_READ8_MEMBER(read_k);
|
||||
|
||||
protected:
|
||||
virtual void machine_start();
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Display
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void elecbowl_state::prepare_display()
|
||||
{
|
||||
// standard 7segs
|
||||
for (int y = 0; y < 4; y++)
|
||||
{
|
||||
m_display_segmask[y] = 0x7f;
|
||||
m_display_state[y] = (m_r >> (y + 4) & 1) ? m_o : 0;
|
||||
}
|
||||
|
||||
// lamp muxes
|
||||
UINT8 d = m_r >> 1 & 1;
|
||||
m_display_state[5] = (m_r & 1) ? (d << (m_o & 7)) : 0;
|
||||
m_display_state[6] = (m_r >> 2 & 1) ? (d << (m_o & 7)) : 0;
|
||||
|
||||
// digit 4 is from u6 Q7
|
||||
m_display_segmask[4] = 6;
|
||||
m_display_state[4] = (m_display_state[6] & 0x80) ? 6 : 0;
|
||||
|
||||
set_display_size(8, 7);
|
||||
display_update();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
I/O
|
||||
@ -45,19 +84,29 @@ protected:
|
||||
|
||||
WRITE16_MEMBER(elecbowl_state::write_r)
|
||||
{
|
||||
// R4-R7: input mux
|
||||
m_inp_mux = data >> 4 & 0xf;
|
||||
// R5-R7,R10: input mux
|
||||
m_inp_mux = (data >> 5 & 7) | (data >> 7 & 8);
|
||||
|
||||
// R9: speaker out
|
||||
// R3,R8: speaker volume..
|
||||
m_speaker->level_w(data >> 9 & 1);
|
||||
|
||||
// R10: maybe a switch or other button row?
|
||||
// others: ?
|
||||
// R4-R7: select digit
|
||||
// R0,R2: lamp muxes enable
|
||||
// R1: lamp muxes state
|
||||
m_r = data;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(elecbowl_state::write_o)
|
||||
{
|
||||
// ?
|
||||
// O0-O2: lamp mux
|
||||
// O0-O6: digit segments A-G
|
||||
// O7: N/C
|
||||
//if (data & 0x80) printf("%X ",data&0x7f);
|
||||
|
||||
m_o = data & 0x7f;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(elecbowl_state::read_k)
|
||||
@ -74,25 +123,25 @@ READ8_MEMBER(elecbowl_state::read_k)
|
||||
***************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( elecbowl )
|
||||
PORT_START("IN.0") // R4
|
||||
PORT_START("IN.0") // R5
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
|
||||
|
||||
PORT_START("IN.1") // R5
|
||||
PORT_START("IN.1") // R6
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) // reset/newgame?
|
||||
|
||||
PORT_START("IN.2") // R6
|
||||
PORT_START("IN.2") // R7
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame?
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)
|
||||
|
||||
PORT_START("IN.3") // R7
|
||||
PORT_START("IN.3") // R10
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)
|
||||
@ -107,30 +156,35 @@ INPUT_PORTS_END
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
void elecbowl_state::machine_start()
|
||||
{
|
||||
hh_tms1k_state::machine_start();
|
||||
}
|
||||
|
||||
|
||||
// output PLA is not dumped
|
||||
static const UINT16 elecbowl_output_pla[0x20] =
|
||||
{
|
||||
/* O output PLA configuration currently unknown */
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
|
||||
lA+lB+lC+lD+lE+lF, // 0
|
||||
lB+lC, // 1
|
||||
lA+lB+lG+lE+lD, // 2
|
||||
lA+lB+lG+lC+lD, // 3
|
||||
lF+lB+lG+lC, // 4
|
||||
lA+lF+lG+lC+lD, // 5
|
||||
lA+lF+lG+lC+lD+lE, // 6
|
||||
lA+lB+lC, // 7
|
||||
lA+lB+lC+lD+lE+lF+lG, // 8
|
||||
lA+lB+lG+lF+lC+lD, // 9
|
||||
|
||||
0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
|
||||
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
|
||||
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( elecbowl, elecbowl_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", TMS1100, 300000) // approximation - unknown freq
|
||||
MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
|
||||
MCFG_TMS1XXX_OUTPUT_PLA(elecbowl_output_pla)
|
||||
MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k))
|
||||
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecbowl_state, write_r))
|
||||
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(elecbowl_state, write_o))
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
|
||||
MCFG_DEFAULT_LAYOUT(layout_elecbowl)
|
||||
|
||||
/* no video! */
|
||||
@ -151,7 +205,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( elecbowl )
|
||||
ROM_REGION( 0x0800, "maincpu", 0 )
|
||||
ROM_LOAD( "mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
|
||||
ROM_LOAD( "mp3403.u9", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
|
||||
|
||||
ROM_REGION( 867, "maincpu:mpla", 0 )
|
||||
ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
|
||||
@ -160,4 +214,4 @@ ROM_START( elecbowl )
|
||||
ROM_END
|
||||
|
||||
|
||||
CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling (Marx)", GAME_SUPPORTS_SAVE | GAME_MECHANICAL | GAME_NOT_WORKING )
|
||||
CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling (Marx)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND | GAME_MECHANICAL | GAME_NOT_WORKING )
|
||||
|
@ -9,6 +9,11 @@
|
||||
<led7seg><color red="1.0" green="0.2" blue="0.2" /></led7seg>
|
||||
</element>
|
||||
|
||||
<element name="lamp" defstate="0">
|
||||
<disk state="0"><color red="0.2" green="0.18" blue="0.16" /></disk>
|
||||
<disk state="1"><color red="1.0" green="0.95" blue="0.9" /></disk>
|
||||
</element>
|
||||
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
@ -19,6 +24,36 @@
|
||||
<bounds left="0" right="100" top="0" bottom="100" />
|
||||
</bezel>
|
||||
|
||||
<bezel name="digit2" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="digit1" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="digit0" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
|
||||
|
||||
<bezel name="digit4" element="digit"><bounds x="50" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="digit3" element="digit"><bounds x="60" y="0" width="10" height="15" /></bezel>
|
||||
|
||||
|
||||
<bezel name="lamp52" element="lamp"><bounds x="0" y="20" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp53" element="lamp"><bounds x="10" y="20" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp57" element="lamp"><bounds x="20" y="20" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp56" element="lamp"><bounds x="30" y="20" width="10" height="10" /></bezel>
|
||||
|
||||
<bezel name="lamp51" element="lamp"><bounds x="5" y="30" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp61" element="lamp"><bounds x="15" y="30" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp55" element="lamp"><bounds x="25" y="30" width="10" height="10" /></bezel>
|
||||
|
||||
<bezel name="lamp50" element="lamp"><bounds x="10" y="40" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp54" element="lamp"><bounds x="20" y="40" width="10" height="10" /></bezel>
|
||||
|
||||
<bezel name="lamp60" element="lamp"><bounds x="15" y="50" width="10" height="10" /></bezel>
|
||||
|
||||
|
||||
<bezel name="lamp64" element="lamp"><bounds x="0" y="70" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp65" element="lamp"><bounds x="10" y="70" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp66" element="lamp"><bounds x="20" y="70" width="10" height="10" /></bezel>
|
||||
|
||||
<bezel name="lamp62" element="lamp"><bounds x="50" y="70" width="10" height="10" /></bezel>
|
||||
<bezel name="lamp63" element="lamp"><bounds x="50" y="80" width="10" height="10" /></bezel>
|
||||
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
||||
|
Loading…
Reference in New Issue
Block a user