mirror of
https://github.com/holub/mame
synced 2025-07-05 09:57:47 +03:00
ttfball: add volume gate
This commit is contained in:
parent
934bd1bd1f
commit
cc45555809
@ -43,12 +43,12 @@ ROM source notes when dumped from another title, but confident it's the same:
|
||||
- drdunk: Tandy Electronic Basketball
|
||||
- flash: Radio Shack Sound Effects Chassis
|
||||
- hccbaskb: Sears Electronic Basketball
|
||||
- ttfballa: (no brand) Football
|
||||
- us2pfball: Tandy 2-Player Football
|
||||
- uspbball: Tandy 2-Player Baseball
|
||||
|
||||
TODO:
|
||||
- tweak MCU frequency for games when video/audio recording surfaces(YouTube etc.)
|
||||
- ttfball: discrete sound part, for volume gating?
|
||||
- sfxphasor default music mode should have volume decay, I can't get it working
|
||||
without breaking sound effects or command C (volume decay with values 15 and up)
|
||||
- what's the relation between drdunk and hccbaskb? Probably made by the same
|
||||
@ -62,6 +62,7 @@ TODO:
|
||||
#include "cpu/pic16c5x/pic16c5x.h"
|
||||
#include "video/pwm.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/input_merger.h"
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/flt_vol.h"
|
||||
@ -304,14 +305,14 @@ INPUT_PORTS_END
|
||||
void touchme_state::touchme(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
PIC1655(config, m_maincpu, 300000); // approximation - RC osc. R=100K, C=47pF
|
||||
PIC1655(config, m_maincpu, 250000); // approximation - RC osc. R=100K, C=47pF
|
||||
m_maincpu->read_a().set(FUNC(touchme_state::read_a));
|
||||
m_maincpu->write_b().set(FUNC(touchme_state::write_b));
|
||||
m_maincpu->read_c().set_constant(0xff);
|
||||
m_maincpu->write_c().set(FUNC(touchme_state::write_c));
|
||||
|
||||
// PIC CLKOUT, tied to RTCC
|
||||
CLOCK(config, "clock", 300000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
|
||||
CLOCK(config, "clock", 250000/4).signal_handler().set_inputline("maincpu", PIC16C5x_RTCC);
|
||||
|
||||
// video hardware
|
||||
PWM_DISPLAY(config, m_display).set_size(7, 7);
|
||||
@ -449,10 +450,11 @@ ROM_END
|
||||
* PIC 1655A-522
|
||||
* 3-bit sound with volume decay
|
||||
|
||||
It's a toy synthesizer. When in music mode, the user can create custom
|
||||
sounds with the F key, other keys are music notes. To put it briefly,
|
||||
commands A,B are for vibrato, C is for volume decay, and D,E,F change
|
||||
the timbre.
|
||||
It's a toy synthesizer. It included keypad overlays with nursery rhymes.
|
||||
|
||||
When in music mode, the user can create custom sounds with the F key, other
|
||||
keys are music notes. To put it briefly, commands A,B are for vibrato,
|
||||
C is for volume decay, and D,E,F change the timbre.
|
||||
|
||||
Paste example (must be in music mode): F11A F3B F4C F3D F3E F6F
|
||||
|
||||
@ -1688,19 +1690,13 @@ ROM_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Toytronic Football (set 1)
|
||||
Toytronic Football
|
||||
* PIC 1655A-033
|
||||
* 4511 7seg BCD decoder, 7 7seg LEDs + 27 other LEDs, 1-bit sound
|
||||
|
||||
(no brand) Football (set 2)
|
||||
* PIC 1655-024
|
||||
* rest same as above, 1 less button
|
||||
* 4511 7seg BCD decoder, 7 7seg LEDs + 27 other LEDs
|
||||
* 1-bit sound through volume gate
|
||||
|
||||
Hello and welcome to another Mattel Football clone, there are so many of these.
|
||||
The 1655-024 one came from an unbranded handheld, but comparison suggests that
|
||||
it's the 'prequel' of 1655A-033.
|
||||
|
||||
The 1655-024 version looks and sounds the same as Conic "Electronic Football".
|
||||
Comparison suggests that this is the 'sequel' to 1655A-024.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -1713,11 +1709,11 @@ public:
|
||||
|
||||
void ttfball(machine_config &config);
|
||||
|
||||
private:
|
||||
protected:
|
||||
void update_display();
|
||||
u8 read_a();
|
||||
void write_b(u8 data);
|
||||
void write_c(u8 data);
|
||||
virtual void write_c(u8 data);
|
||||
};
|
||||
|
||||
// handlers
|
||||
@ -1727,8 +1723,8 @@ void ttfball_state::update_display()
|
||||
// C0-C2: led data
|
||||
// C0-C3: 4511 A-D, C4: digit segment DP
|
||||
// C5: select digits or led matrix
|
||||
const u8 _4511_map[16] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0,0,0,0,0,0 };
|
||||
u16 led_data = (m_c & 0x20) ? (_4511_map[m_c & 0xf] | (~m_c << 3 & 0x80)) : (~m_c << 8 & 0x700);
|
||||
const u8 cd4511_map[0x10] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67 };
|
||||
u16 led_data = (m_c & 0x20) ? (cd4511_map[m_c & 0xf] | (~m_c << 3 & 0x80)) : (~m_c << 8 & 0x700);
|
||||
|
||||
m_display->matrix(m_b | (m_c << 1 & 0x100), led_data);
|
||||
}
|
||||
@ -1754,9 +1750,6 @@ void ttfball_state::write_b(u8 data)
|
||||
|
||||
void ttfball_state::write_c(u8 data)
|
||||
{
|
||||
// C6: speaker out
|
||||
m_speaker->level_w(data >> 6 & 1);
|
||||
|
||||
// C7: input mux high
|
||||
m_inp_mux = (m_inp_mux & 0xf) | (data >> 3 & 0x10);
|
||||
|
||||
@ -1791,34 +1784,10 @@ static INPUT_PORTS_START( ttfball )
|
||||
PORT_CONFSETTING( 0x00, "2" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( ttfballa )
|
||||
PORT_START("IN.0") // B0 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Kick")
|
||||
|
||||
PORT_START("IN.1") // B1 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Forward")
|
||||
|
||||
PORT_START("IN.2") // B3 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY
|
||||
|
||||
PORT_START("IN.3") // B7 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY
|
||||
|
||||
PORT_START("IN.4") // C7 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN.5") // port A
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Status")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Score")
|
||||
PORT_CONFNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
|
||||
PORT_CONFSETTING( 0x04, "1" )
|
||||
PORT_CONFSETTING( 0x00, "2" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
void ttfball_state::ttfball(machine_config &config)
|
||||
{
|
||||
// basic machine hardware
|
||||
PIC1655(config, m_maincpu, 600000); // approximation - RC osc. R=27K(set 1) or 33K(set 2), C=68pF
|
||||
PIC1655(config, m_maincpu, 550000); // approximation - RC osc. 27K, C=68pF
|
||||
m_maincpu->read_a().set(FUNC(ttfball_state::read_a));
|
||||
m_maincpu->write_b().set(FUNC(ttfball_state::write_b));
|
||||
m_maincpu->read_c().set_constant(0xff);
|
||||
@ -1833,6 +1802,13 @@ void ttfball_state::ttfball(machine_config &config)
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||
|
||||
auto &gate(CLOCK(config, "gate", 3500)); // approximation
|
||||
gate.signal_handler().set("merge", FUNC(input_merger_all_high_device::in_w<0>));
|
||||
m_maincpu->write_c().append("merge", FUNC(input_merger_all_high_device::in_w<1>)).bit(6);
|
||||
|
||||
auto &merge(INPUT_MERGER_ALL_HIGH(config, "merge"));
|
||||
merge.output_handler().set(m_speaker, FUNC(speaker_sound_device::level_w));
|
||||
}
|
||||
|
||||
// roms
|
||||
@ -1842,6 +1818,92 @@ ROM_START( ttfball )
|
||||
ROM_LOAD( "pic_1655a-033", 0x0000, 0x0400, CRC(2b500501) SHA1(f7fe464663c56e2181a31a1dc5f1f5239df57bed) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Toytronic Football (model 003201)
|
||||
* PIC 1655-024
|
||||
* 4511 7seg BCD decoder, 7 7seg LEDs + 27 other LEDs, 1-bit sound
|
||||
|
||||
The 1655-024 version looks and sounds the same as Conic "Electronic Football".
|
||||
The reason it went through several brands (and even a no brand one) was
|
||||
probably due to legal pursuit from Mattel.
|
||||
|
||||
known releases:
|
||||
- Hong Kong(1): Football, published by Toytronic
|
||||
- Hong Kong(2): Football, published by (no brand)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
class ttfballa_state : public ttfball_state
|
||||
{
|
||||
public:
|
||||
ttfballa_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
ttfball_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void ttfballa(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void write_c(u8 data) override;
|
||||
};
|
||||
|
||||
// handlers
|
||||
|
||||
void ttfballa_state::write_c(u8 data)
|
||||
{
|
||||
// C6: speaker out
|
||||
m_speaker->level_w(BIT(data, 6));
|
||||
|
||||
// same as ttfball
|
||||
m_c = data;
|
||||
update_display();
|
||||
}
|
||||
|
||||
// config
|
||||
|
||||
static INPUT_PORTS_START( ttfballa )
|
||||
PORT_START("IN.0") // B0 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Kick")
|
||||
|
||||
PORT_START("IN.1") // B1 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Forward")
|
||||
|
||||
PORT_START("IN.2") // B3 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_16WAY
|
||||
|
||||
PORT_START("IN.3") // B7 port A3
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_16WAY
|
||||
|
||||
PORT_START("IN.4") // C7 port A3 (not used)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN.5") // port A
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Status")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Score")
|
||||
PORT_CONFNAME( 0x04, 0x04, DEF_STR( Difficulty ) )
|
||||
PORT_CONFSETTING( 0x04, "1" )
|
||||
PORT_CONFSETTING( 0x00, "2" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
void ttfballa_state::ttfballa(machine_config &config)
|
||||
{
|
||||
ttfball(config);
|
||||
|
||||
m_maincpu->set_clock(500000); // approximation - RC osc. 33K, C=68pF
|
||||
m_display->set_bri_levels(0.002, 0.02);
|
||||
|
||||
// no volume gate
|
||||
m_maincpu->write_c().set(FUNC(ttfballa_state::write_c));
|
||||
config.device_remove("gate");
|
||||
config.device_remove("merge");
|
||||
}
|
||||
|
||||
// roms
|
||||
|
||||
ROM_START( ttfballa )
|
||||
ROM_REGION( 0x0400, "maincpu", 0 )
|
||||
ROM_LOAD( "pic_1655-024", 0x0000, 0x0400, CRC(9091102f) SHA1(ef72759f20b5a99e0366863caad1e26be114263f) )
|
||||
@ -2144,7 +2206,7 @@ CONS( 1979, rockpin, 0, 0, rockpin, rockpin, rockpin_state, empty_
|
||||
CONS( 1979, hccbaskb, 0, 0, hccbaskb, hccbaskb, hccbaskb_state, empty_init, "Tiger Electronics", "Half Court Computer Basketball", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1979, ttfball, 0, 0, ttfball, ttfball, ttfball_state, empty_init, "Toytronic", "Football (Toytronic, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
CONS( 1979, ttfballa, ttfball, 0, ttfball, ttfballa, ttfball_state, empty_init, "Toytronic", "Football (Toytronic, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1979, ttfballa, ttfball, 0, ttfballa, ttfballa, ttfballa_state, empty_init, "Toytronic", "Football (Toytronic, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
CONS( 1981, uspbball, 0, 0, uspbball, uspbball, uspbball_state, empty_init, "U.S. Games", "Programmable Baseball", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING )
|
||||
CONS( 1981, us2pfball, 0, 0, us2pfball, us2pfball, us2pfball_state, empty_init, "U.S. Games", "Electronic 2-Player Football", MACHINE_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user