mirror of
https://github.com/holub/mame
synced 2025-05-17 19:24:59 +03:00
M79-Ambush - Added Discrete sounds, fixed DIPs and added Self Test Lamp Output.
This commit is contained in:
parent
fd50a18e70
commit
4e365930b2
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1138,6 +1138,7 @@ src/mame/audio/leland.c svneol=native#text/plain
|
||||
src/mame/audio/llander.c svneol=native#text/plain
|
||||
src/mame/audio/m72.c svneol=native#text/plain
|
||||
src/mame/audio/m72.h svneol=native#text/plain
|
||||
src/mame/audio/m79amb.c svneol=native#text/plain
|
||||
src/mame/audio/madalien.c svneol=native#text/plain
|
||||
src/mame/audio/mario.c svneol=native#text/plain
|
||||
src/mame/audio/mcr.c svneol=native#text/plain
|
||||
@ -2375,6 +2376,7 @@ src/mame/includes/m57.h svneol=native#text/plain
|
||||
src/mame/includes/m58.h svneol=native#text/plain
|
||||
src/mame/includes/m62.h svneol=native#text/plain
|
||||
src/mame/includes/m72.h svneol=native#text/plain
|
||||
src/mame/includes/m79amb.h svneol=native#text/plain
|
||||
src/mame/includes/m92.h svneol=native#text/plain
|
||||
src/mame/includes/madalien.h svneol=native#text/plain
|
||||
src/mame/includes/mario.h svneol=native#text/plain
|
||||
|
341
src/mame/audio/m79amb.c
Normal file
341
src/mame/audio/m79amb.c
Normal file
@ -0,0 +1,341 @@
|
||||
/************************************************************************
|
||||
* m79amb Sound System Analog emulation
|
||||
* Nov 2008, Derrick Renaud
|
||||
************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "m79amb.h"
|
||||
#include "sound/discrete.h"
|
||||
|
||||
#define TIME_OF_9602(r, c) (0.34 * (r) * (c) * (1.0 + 1.0 / (r)))
|
||||
#define TIME_OF_9602_WITH_DIODE(r, c) (0.3 * (r) * (c))
|
||||
|
||||
|
||||
/* Discrete Sound Input Nodes */
|
||||
#define M79AMB_BOOM_EN NODE_01
|
||||
#define M79AMB_THUD_EN NODE_02
|
||||
#define M79AMB_SHOT_EN NODE_03
|
||||
#define M79AMB_MC_REV_EN NODE_04
|
||||
#define M79AMB_MC_CONTROL_EN NODE_05
|
||||
#define M79AMB_TANK_TRUCK_JEEP_EN NODE_06
|
||||
#define M79AMB_WHISTLE_A_EN NODE_07
|
||||
#define M79AMB_WHISTLE_B_EN NODE_08
|
||||
|
||||
/* Discrete Sound Output Nodes */
|
||||
#define M79AMB_BOOM_SND NODE_11
|
||||
#define M79AMB_THUD_SND NODE_12
|
||||
#define M79AMB_SHOT_SND NODE_13
|
||||
#define M79AMB_MC_SND NODE_14
|
||||
#define M79AMB_TANK_TRUCK_JEEP_SND NODE_15
|
||||
#define M79AMB_WHISTLE_A_SND NODE_16
|
||||
#define M79AMB_WHISTLE_B_SND NODE_17
|
||||
|
||||
#define M79AMB_R2 RES_K(5.6)
|
||||
#define M79AMB_R6 220
|
||||
#define M79AMB_R9 RES_K(4.7)
|
||||
#define M79AMB_R10 RES_K(2.2)
|
||||
#define M79AMB_R12 RES_K(5.6)
|
||||
#define M79AMB_R16 330
|
||||
#define M79AMB_R19 RES_K(4.7)
|
||||
#define M79AMB_R20 RES_K(2.2)
|
||||
#define M79AMB_R22 RES_K(3.3)
|
||||
#define M79AMB_R26 100
|
||||
#define M79AMB_R29 RES_K(4.7)
|
||||
#define M79AMB_R30 RES_K(1.5)
|
||||
#define M79AMB_R35 RES_K(470)
|
||||
#define M79AMB_R36 RES_K(39)
|
||||
#define M79AMB_R37 RES_K(82)
|
||||
#define M79AMB_R38 100
|
||||
#define M79AMB_R39 RES_K(10)
|
||||
#define M79AMB_R41 RES_K(2.2)
|
||||
#define M79AMB_R42 RES_K(10)
|
||||
#define M79AMB_R43 220
|
||||
#define M79AMB_R44 RES_K(39)
|
||||
#define M79AMB_R45 RES_K(82)
|
||||
#define M79AMB_R46 RES_K(10)
|
||||
#define M79AMB_R48 RES_K(2.2)
|
||||
#define M79AMB_R49 RES_K(1)
|
||||
#define M79AMB_R51 RES_K(39)
|
||||
#define M79AMB_R52 RES_K(82)
|
||||
#define M79AMB_R53 100
|
||||
#define M79AMB_R54 RES_K(10)
|
||||
#define M79AMB_R57 RES_K(2.2)
|
||||
#define M79AMB_R58 RES_K(2.2)
|
||||
#define M79AMB_R59 RES_K(1)
|
||||
#define M79AMB_R61 RES_K(39)
|
||||
#define M79AMB_R62 RES_K(82)
|
||||
#define M79AMB_R63 100
|
||||
#define M79AMB_R64 RES_K(10)
|
||||
#define M79AMB_R67 RES_K(2.2)
|
||||
#define M79AMB_R68 RES_K(2.2)
|
||||
#define M79AMB_R69 RES_K(1)
|
||||
#define M79AMB_R76 RES_K(2.7)
|
||||
#define M79AMB_R77 RES_K(47)
|
||||
#define M79AMB_R78 RES_K(47)
|
||||
#define M79AMB_R79 RES_K(15)
|
||||
#define M79AMB_R80 RES_K(22)
|
||||
#define M79AMB_R81 RES_K(100)
|
||||
#define M79AMB_R82 RES_K(100)
|
||||
#define M79AMB_R83 RES_K(3.3)
|
||||
#define M79AMB_R84 RES_K(50)
|
||||
#define M79AMB_R86 470
|
||||
|
||||
#define M79AMB_C2 CAP_U(39)
|
||||
#define M79AMB_C3 CAP_U(22)
|
||||
#define M79AMB_C6 CAP_U(0.1)
|
||||
#define M79AMB_C8 CAP_U(39)
|
||||
#define M79AMB_C9 CAP_U(22)
|
||||
#define M79AMB_C12 CAP_U(0.1)
|
||||
#define M79AMB_C14 CAP_U(4.7)
|
||||
#define M79AMB_C15 CAP_U(3.3)
|
||||
#define M79AMB_C18 CAP_U(0.1)
|
||||
#define M79AMB_C20 CAP_U(2.2)
|
||||
#define M79AMB_C21 CAP_U(1)
|
||||
#define M79AMB_C22 CAP_U(22)
|
||||
#define M79AMB_C23 CAP_U(0.01)
|
||||
#define M79AMB_C25 CAP_U(2.2)
|
||||
#define M79AMB_C26 CAP_U(22)
|
||||
#define M79AMB_C27 CAP_U(0.47)
|
||||
#define M79AMB_C28 CAP_U(0.1)
|
||||
#define M79AMB_C29 CAP_U(22)
|
||||
#define M79AMB_C30 CAP_U(0.03)
|
||||
#define M79AMB_C31 CAP_U(0.1)
|
||||
#define M79AMB_C32 CAP_U(0.1)
|
||||
#define M79AMB_C33 CAP_U(22)
|
||||
#define M79AMB_C34 CAP_U(0.03)
|
||||
#define M79AMB_C35 CAP_U(0.1)
|
||||
#define M79AMB_C36 CAP_U(0.1)
|
||||
#define M79AMB_C37 CAP_P(500)
|
||||
#define M79AMB_C41 CAP_U(0.1)
|
||||
#define M79AMB_C42 CAP_U(15)
|
||||
|
||||
static const discrete_566_desc m79amb_566_desc = {DISC_566_OUT_DC | DISC_566_OUT_TRIANGLE, 12, 0, DEFAULT_566_CHARGE};
|
||||
|
||||
static const discrete_mixer_desc m79amb_final_mix =
|
||||
{
|
||||
DISC_MIXER_IS_OP_AMP,
|
||||
{
|
||||
M79AMB_R76 + M79AMB_R9,
|
||||
M79AMB_R77 + M79AMB_R19,
|
||||
M79AMB_R78 + M79AMB_R29,
|
||||
M79AMB_R79 + RES_2_PARALLEL(M79AMB_R41, M79AMB_R42 + M79AMB_R43),
|
||||
M79AMB_R80 + RES_2_PARALLEL(M79AMB_R48, M79AMB_R49),
|
||||
M79AMB_R81 + RES_2_PARALLEL(M79AMB_R59, M79AMB_R57 + M79AMB_R58),
|
||||
M79AMB_R82 + RES_2_PARALLEL(M79AMB_R69, M79AMB_R67 + M79AMB_R68)
|
||||
},
|
||||
{0}, /* no r_nodes */
|
||||
{M79AMB_C6, M79AMB_C12, M79AMB_C18, M79AMB_C23, M79AMB_C28, M79AMB_C32, M79AMB_C36},
|
||||
0,
|
||||
M79AMB_R83 + M79AMB_R84,
|
||||
M79AMB_C37,
|
||||
M79AMB_C42,
|
||||
0,
|
||||
1 /* gain */
|
||||
};
|
||||
|
||||
DISCRETE_SOUND_START( m79amb )
|
||||
/************************************************
|
||||
* Input register mapping
|
||||
************************************************/
|
||||
DISCRETE_INPUT_PULSE(M79AMB_BOOM_EN, 0)
|
||||
DISCRETE_INPUT_PULSE(M79AMB_THUD_EN, 0)
|
||||
DISCRETE_INPUT_PULSE(M79AMB_SHOT_EN, 0)
|
||||
DISCRETE_INPUT_LOGIC(M79AMB_MC_REV_EN)
|
||||
DISCRETE_INPUT_LOGIC(M79AMB_MC_CONTROL_EN)
|
||||
DISCRETE_INPUT_LOGIC(M79AMB_TANK_TRUCK_JEEP_EN)
|
||||
DISCRETE_INPUT_LOGIC(M79AMB_WHISTLE_A_EN)
|
||||
DISCRETE_INPUT_LOGIC(M79AMB_WHISTLE_B_EN)
|
||||
|
||||
/* Boom, Thud, Shot sounds need more accurate emulation */
|
||||
|
||||
/************************************************
|
||||
* Boom
|
||||
************************************************/
|
||||
DISCRETE_ONESHOT(NODE_20,
|
||||
M79AMB_BOOM_EN, /* TRIG */
|
||||
1, /* AMPL */
|
||||
TIME_OF_9602_WITH_DIODE(M79AMB_R2, M79AMB_C2),
|
||||
DISC_ONESHOT_REDGE | DISC_ONESHOT_RETRIG | DISC_OUT_ACTIVE_HIGH)
|
||||
DISCRETE_RCDISC2(NODE_21,
|
||||
NODE_20, /* Q1 base */
|
||||
0, /* Q1 off, C3 discharges */
|
||||
M79AMB_R9 + M79AMB_R10, /* discharges thru amp/filter circuit */
|
||||
12, /* Q1 on, C3 charges */
|
||||
M79AMB_R6, /* Q2 on */
|
||||
M79AMB_C3) /* controls amplitude */
|
||||
DISCRETE_NOISE(M79AMB_BOOM_SND,
|
||||
1, /* ENAB */
|
||||
800, /* FREQ - Guess*/
|
||||
NODE_21, /* AMP */
|
||||
0) /* BIAS - fake AC is fine*/
|
||||
|
||||
/************************************************
|
||||
* Thud
|
||||
************************************************/
|
||||
DISCRETE_ONESHOT(NODE_30,
|
||||
M79AMB_THUD_EN, /* TRIG */
|
||||
1, /* AMPL */
|
||||
TIME_OF_9602_WITH_DIODE(M79AMB_R12, M79AMB_C8),
|
||||
DISC_ONESHOT_REDGE | DISC_ONESHOT_RETRIG | DISC_OUT_ACTIVE_HIGH)
|
||||
DISCRETE_RCDISC2(NODE_31,
|
||||
NODE_30, /* Q4 base */
|
||||
0, /* Q4 off, C9 discharges */
|
||||
M79AMB_R19 + M79AMB_R20, /* discharges thru amp/filter circuit */
|
||||
12, /* Q4 on, C9 charges */
|
||||
M79AMB_R16, /* Q5 on */
|
||||
M79AMB_C9) /* controls amplitude */
|
||||
DISCRETE_NOISE(M79AMB_THUD_SND,
|
||||
1, /* ENAB */
|
||||
500, /* FREQ - Guess*/
|
||||
NODE_31, /* AMP */
|
||||
0) /* BIAS - fake AC is fine*/
|
||||
|
||||
/************************************************
|
||||
* Shot
|
||||
************************************************/
|
||||
DISCRETE_ONESHOT(NODE_40,
|
||||
M79AMB_SHOT_EN, /* TRIG */
|
||||
1, /* AMPL */
|
||||
TIME_OF_9602_WITH_DIODE(M79AMB_R22, M79AMB_C14),
|
||||
DISC_ONESHOT_REDGE | DISC_ONESHOT_RETRIG | DISC_OUT_ACTIVE_HIGH)
|
||||
DISCRETE_RCDISC2(NODE_41,
|
||||
NODE_40, /* Q7 base */
|
||||
0, /* Q7 off, C15 discharges */
|
||||
M79AMB_R29 + M79AMB_R30, /* discharges thru amp/filter circuit */
|
||||
12, /* Q7 on, C15 charges */
|
||||
M79AMB_R26, /* Q8 on */
|
||||
M79AMB_C15) /* controls amplitude */
|
||||
DISCRETE_NOISE(M79AMB_SHOT_SND,
|
||||
1, /* ENAB */
|
||||
1000, /* FREQ - Guess*/
|
||||
NODE_41, /* AMP */
|
||||
0) /* BIAS - fake AC is fine*/
|
||||
|
||||
/************************************************
|
||||
* MC
|
||||
************************************************/
|
||||
/* not the best implementation of the pin 5 charge circuit, but it is within tolerance */
|
||||
DISCRETE_RCDISC2(NODE_50,
|
||||
M79AMB_MC_REV_EN,
|
||||
/* R35 can be ignored on discharge */
|
||||
RES_VOLTAGE_DIVIDER(M79AMB_R36 + M79AMB_R37, M79AMB_R38) * 12, /* Q12 on */
|
||||
RES_2_PARALLEL(M79AMB_R36 + M79AMB_R37, M79AMB_R38), /* Q12 on */
|
||||
12.0 * RES_VOLTAGE_DIVIDER(M79AMB_R36, M79AMB_R35), /* Q12 off */
|
||||
RES_2_PARALLEL(M79AMB_R36, M79AMB_R35) + M79AMB_R37, /* Q12 off */
|
||||
M79AMB_C20)
|
||||
/* cap charge to B+ ratio changes voltage on pin 5 */
|
||||
/* (iR36 + iR35 + iR37) * R36||R35||R37 where iR35 = 0/R35 = 0 */
|
||||
DISCRETE_TRANSFORM4(NODE_51, 12.0 / M79AMB_R36, NODE_50, M79AMB_R37, RES_3_PARALLEL(M79AMB_R36, M79AMB_R35, M79AMB_R37), "012/+3*")
|
||||
DISCRETE_566(NODE_52, /* IC U3, pin 4 */
|
||||
1, /* ENAB */
|
||||
NODE_51, /* IC U3, pin 5 */
|
||||
M79AMB_R39, M79AMB_C21, &m79amb_566_desc)
|
||||
DISCRETE_CRFILTER(NODE_53,
|
||||
M79AMB_MC_CONTROL_EN, /* Q13 */
|
||||
NODE_52, M79AMB_R41 + M79AMB_R42 + M79AMB_R43, M79AMB_C22)
|
||||
DISCRETE_GAIN(M79AMB_MC_SND, NODE_53, RES_VOLTAGE_DIVIDER(M79AMB_R41 + M79AMB_R42, 2200))//M79AMB_R43))
|
||||
|
||||
/************************************************
|
||||
* Tank, Truck, Jeep
|
||||
************************************************/
|
||||
DISCRETE_566(NODE_60, /* IC U4, pin 4 */
|
||||
1, /* ENAB */
|
||||
12.0 * RES_VOLTAGE_DIVIDER(M79AMB_R44, M79AMB_R45), /* IC U5, pin 5 */
|
||||
M79AMB_R46, M79AMB_C25, &m79amb_566_desc)
|
||||
DISCRETE_ONOFF(NODE_61,
|
||||
M79AMB_TANK_TRUCK_JEEP_EN, /* Q16, Q17 */
|
||||
NODE_60)
|
||||
DISCRETE_CRFILTER(NODE_62,
|
||||
1, /* ENAB */
|
||||
NODE_61, M79AMB_R48 + M79AMB_R49, M79AMB_C26)
|
||||
DISCRETE_GAIN(NODE_63, NODE_62, RES_VOLTAGE_DIVIDER(M79AMB_R48, M79AMB_R49))
|
||||
DISCRETE_RCFILTER(M79AMB_TANK_TRUCK_JEEP_SND,
|
||||
1, /* ENAB */
|
||||
NODE_63, RES_2_PARALLEL(M79AMB_R48, M79AMB_R49), M79AMB_C27)
|
||||
|
||||
/************************************************
|
||||
* Whisle A
|
||||
************************************************/
|
||||
DISCRETE_RCDISC2(NODE_70,
|
||||
M79AMB_WHISTLE_A_EN,
|
||||
RES_VOLTAGE_DIVIDER(M79AMB_R51 + M79AMB_R52, M79AMB_R53) * 12, /* Q15 on */
|
||||
RES_2_PARALLEL(M79AMB_R53, M79AMB_R51 + M79AMB_R52), /* Q15 on */
|
||||
12, M79AMB_R51 + M79AMB_R52, /* Q15 off */
|
||||
M79AMB_C29)
|
||||
/* cap charge to B+ ratio changes voltage on pin 5 */
|
||||
DISCRETE_TRANSFORM3(NODE_71, 12, NODE_70, RES_VOLTAGE_DIVIDER(M79AMB_R51, M79AMB_R52), "01-2*1+")
|
||||
DISCRETE_566(NODE_72, /* IC U5, pin 4 */
|
||||
1, /* ENAB */
|
||||
NODE_71, /* IC U5, pin 5 */
|
||||
M79AMB_R54, M79AMB_C30, &m79amb_566_desc)
|
||||
DISCRETE_CRFILTER(NODE_73,
|
||||
M79AMB_WHISTLE_A_EN, /* Q16, Q17 */
|
||||
NODE_72, M79AMB_R57 + M79AMB_R58 + M79AMB_R59, M79AMB_C31)
|
||||
DISCRETE_GAIN(M79AMB_WHISTLE_A_SND, NODE_73, RES_VOLTAGE_DIVIDER(M79AMB_R57 + M79AMB_R58, M79AMB_R59))
|
||||
|
||||
/************************************************
|
||||
* Whisle B
|
||||
************************************************/
|
||||
DISCRETE_RCDISC2(NODE_80,
|
||||
M79AMB_WHISTLE_B_EN,
|
||||
RES_VOLTAGE_DIVIDER(M79AMB_R61 + M79AMB_R62, M79AMB_R63) * 12, /* Q18 on */
|
||||
RES_2_PARALLEL(M79AMB_R63, M79AMB_R61 + M79AMB_R62), /* Q18 on */
|
||||
12, M79AMB_R61 + M79AMB_R62, /* Q18 off */
|
||||
M79AMB_C33)
|
||||
/* cap charge to B+ ratio changes voltage on pin 5 */
|
||||
DISCRETE_TRANSFORM3(NODE_81, 12, NODE_80, RES_VOLTAGE_DIVIDER(M79AMB_R61, M79AMB_R62), "01-2*1+")
|
||||
DISCRETE_566(NODE_82, /* IC U5, pin 4 */
|
||||
1, /* ENAB */
|
||||
NODE_81, /* IC U5, pin 5 */
|
||||
M79AMB_R64, M79AMB_C34, &m79amb_566_desc)
|
||||
DISCRETE_CRFILTER(NODE_83,
|
||||
M79AMB_WHISTLE_B_EN, /* Q19, Q20*/
|
||||
NODE_82, M79AMB_R67 + M79AMB_R68 + M79AMB_R69, M79AMB_C35)
|
||||
DISCRETE_GAIN(M79AMB_WHISTLE_B_SND, NODE_83, RES_VOLTAGE_DIVIDER(M79AMB_R67 + M79AMB_R68, M79AMB_R69))
|
||||
|
||||
/************************************************
|
||||
* Mixer
|
||||
************************************************/
|
||||
DISCRETE_MIXER7(NODE_90, /* IC U7, pin 6 */
|
||||
1, /* ENAB */
|
||||
M79AMB_BOOM_SND,
|
||||
M79AMB_THUD_SND,
|
||||
M79AMB_SHOT_SND,
|
||||
M79AMB_MC_SND,
|
||||
M79AMB_TANK_TRUCK_JEEP_SND,
|
||||
M79AMB_WHISTLE_A_SND,
|
||||
M79AMB_WHISTLE_B_SND,
|
||||
&m79amb_final_mix)
|
||||
DISCRETE_RCFILTER(NODE_91,
|
||||
1, /* ENAB */
|
||||
NODE_90, M79AMB_R86, M79AMB_C41)
|
||||
|
||||
DISCRETE_OUTPUT(NODE_91, 32000.0/5)
|
||||
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
|
||||
/* the ports are guessed from operation */
|
||||
/* the schematics do not show the actual hookup */
|
||||
|
||||
WRITE8_DEVICE_HANDLER( m79amb_8000_w )
|
||||
{
|
||||
/* these values are not latched */
|
||||
/* they are pulsed when the port is addressed */
|
||||
/* the discrete system will just trigger from them */
|
||||
discrete_sound_w(device, M79AMB_SHOT_EN, data & 0x01);
|
||||
discrete_sound_w(device, M79AMB_BOOM_EN, data & 0x02);
|
||||
discrete_sound_w(device, M79AMB_THUD_EN, data & 0x04);
|
||||
};
|
||||
|
||||
WRITE8_DEVICE_HANDLER( m79amb_8003_w )
|
||||
{
|
||||
/* Self Test goes low on reset and lights LED */
|
||||
/* LED goes off on pass */
|
||||
output_set_value("SELF_TEST", data & 0x01);
|
||||
discrete_sound_w(device, M79AMB_MC_REV_EN, data & 0x02);
|
||||
discrete_sound_w(device, M79AMB_MC_CONTROL_EN, data & 0x04);
|
||||
discrete_sound_w(device, M79AMB_TANK_TRUCK_JEEP_EN, data & 0x08);
|
||||
discrete_sound_w(device, M79AMB_WHISTLE_B_EN, data & 0x10);
|
||||
discrete_sound_w(device, M79AMB_WHISTLE_A_EN, data & 0x20);
|
||||
}
|
@ -51,6 +51,7 @@ Ports:
|
||||
*/
|
||||
|
||||
#include "driver.h"
|
||||
#include "m79amb.h"
|
||||
#include "cpu/i8085/i8085.h"
|
||||
|
||||
static UINT8 *ramtek_videoram;
|
||||
@ -97,26 +98,31 @@ static const int ControllerTable[32] = {
|
||||
|
||||
static READ8_HANDLER( gray5bit_controller0_r )
|
||||
{
|
||||
return (input_port_read(space->machine, "8004") & 0xe0) | (~ControllerTable[input_port_read(space->machine, "8004") & 0x1f] & 0x1f);
|
||||
int port_data = input_port_read(space->machine, "8004");
|
||||
return (port_data & 0xe0) | (~ControllerTable[port_data & 0x1f] & 0x1f);
|
||||
}
|
||||
|
||||
static READ8_HANDLER( gray5bit_controller1_r )
|
||||
{
|
||||
return (input_port_read(space->machine, "8005") & 0xe0) | (~ControllerTable[input_port_read(space->machine, "8005") & 0x1f] & 0x1f);
|
||||
int port_data = input_port_read(space->machine, "8005");
|
||||
return (port_data & 0xe0) | (~ControllerTable[port_data & 0x1f] & 0x1f);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( sound_w )
|
||||
static WRITE8_HANDLER( m79amb_8002_w )
|
||||
{
|
||||
/* D1 may also be watchdog reset */
|
||||
/* port goes to 0x7f to turn on explosion lamp */
|
||||
output_set_value("EXP_LAMP", data ? 1 : 0);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x5fff) AM_RAM_WRITE(ramtek_videoram_w) AM_BASE(&ramtek_videoram)
|
||||
AM_RANGE(0x6000, 0x63ff) AM_RAM /* ?? */
|
||||
AM_RANGE(0x8000, 0x8000) AM_READ_PORT("8000") AM_WRITE(sound_w) /* sound_w listed twice?? */
|
||||
AM_RANGE(0x8000, 0x8000) AM_READ_PORT("8000") AM_DEVWRITE(SOUND, "discrete", m79amb_8000_w)
|
||||
AM_RANGE(0x8001, 0x8001) AM_WRITE(SMH_RAM) AM_BASE(&mask)
|
||||
AM_RANGE(0x8002, 0x8002) AM_READ_PORT("8002") AM_WRITE(sound_w)
|
||||
AM_RANGE(0x8003, 0x8003) AM_WRITE(sound_w) /* Manual Shows sound control at 0x8002 */
|
||||
AM_RANGE(0x8002, 0x8002) AM_READ_PORT("8002") AM_WRITE(m79amb_8002_w)
|
||||
AM_RANGE(0x8003, 0x8003) AM_DEVWRITE(SOUND, "discrete", m79amb_8003_w)
|
||||
AM_RANGE(0x8004, 0x8004) AM_READ(gray5bit_controller0_r)
|
||||
AM_RANGE(0x8005, 0x8005) AM_READ(gray5bit_controller1_r)
|
||||
AM_RANGE(0xc000, 0xc07f) AM_RAM /* ?? */
|
||||
@ -127,14 +133,22 @@ ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( m79amb )
|
||||
PORT_START("8000")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* dip switch */
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_DIPNAME( 0x03, 0x00, "Play Time" )
|
||||
PORT_DIPSETTING( 0x00, "60 Seconds" )
|
||||
PORT_DIPSETTING( 0x01, "90 Seconds" )
|
||||
PORT_DIPSETTING( 0x02, "90 Seconds" )
|
||||
PORT_DIPSETTING( 0x03, "120 Seconds" )
|
||||
PORT_DIPNAME( 0x1c, 0x04, "Points for Extended Time" )
|
||||
PORT_DIPSETTING( 0x00, "1500" )
|
||||
PORT_DIPSETTING( 0x04, "2500" )
|
||||
PORT_DIPSETTING( 0x08, "3500" )
|
||||
PORT_DIPSETTING( 0x0c, "5000" )
|
||||
PORT_DIPSETTING( 0x1c, "No Extended Time" )
|
||||
PORT_DIPNAME( 0xe0, 0x00, DEF_STR( Coinage ))
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ))
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ))
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ))
|
||||
PORT_DIPSETTING( 0xc0, DEF_STR( Free_Play ))
|
||||
|
||||
PORT_START("8002")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_VBLANK )
|
||||
@ -178,7 +192,7 @@ static DRIVER_INIT( m79amb )
|
||||
static MACHINE_DRIVER_START( m79amb )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", 8080, 1996800)
|
||||
MDRV_CPU_ADD("maincpu", 8080, XTAL_19_6608MHz / 10)
|
||||
MDRV_CPU_PROGRAM_MAP(main_map,0)
|
||||
MDRV_CPU_VBLANK_INT("screen", m79amb_interrupt)
|
||||
|
||||
@ -193,6 +207,12 @@ static MACHINE_DRIVER_START( m79amb )
|
||||
MDRV_VIDEO_UPDATE(ramtek)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MDRV_SOUND_ADD("discrete", DISCRETE, 0)
|
||||
MDRV_SOUND_CONFIG_DISCRETE(m79amb)
|
||||
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
@ -219,4 +239,4 @@ ROM_END
|
||||
|
||||
|
||||
|
||||
GAME( 1977, m79amb, 0, m79amb, m79amb, m79amb, ROT0, "Ramtek", "M-79 Ambush", GAME_NO_SOUND )
|
||||
GAME( 1977, m79amb, 0, m79amb, m79amb, m79amb, ROT0, "Ramtek", "M-79 Ambush", GAME_IMPERFECT_SOUND )
|
||||
|
9
src/mame/includes/m79amb.h
Normal file
9
src/mame/includes/m79amb.h
Normal file
@ -0,0 +1,9 @@
|
||||
#include "sound/discrete.h"
|
||||
|
||||
|
||||
/*----------- defined in sndhrdw/m79amb.c -----------*/
|
||||
|
||||
DISCRETE_SOUND_EXTERN( m79amb );
|
||||
|
||||
extern WRITE8_DEVICE_HANDLER( m79amb_8000_w );
|
||||
extern WRITE8_DEVICE_HANDLER( m79amb_8003_w );
|
@ -959,7 +959,7 @@ $(MAMEOBJ)/midcoin.a: \
|
||||
|
||||
$(MAMEOBJ)/midw8080.a: \
|
||||
$(DRIVERS)/8080bw.o $(AUDIO)/8080bw.o $(VIDEO)/8080bw.o \
|
||||
$(DRIVERS)/m79amb.o \
|
||||
$(DRIVERS)/m79amb.o $(AUDIO)/m79amb.o \
|
||||
$(DRIVERS)/mw8080bw.o $(MACHINE)/mw8080bw.o $(AUDIO)/mw8080bw.o $(VIDEO)/mw8080bw.o \
|
||||
$(DRIVERS)/rotaryf.o \
|
||||
$(DRIVERS)/sspeedr.o $(VIDEO)/sspeedr.o \
|
||||
|
@ -846,7 +846,7 @@ static void line(INT16 sx, INT16 sy, INT16 ex, INT16 ey, INT16 col)
|
||||
|
||||
static void circle(INT16 sx, INT16 sy, UINT16 r, INT16 col)
|
||||
{
|
||||
const float DEG2RAD = (float)3.14159/180;
|
||||
const float DEG2RAD = 3.14159f/180;
|
||||
int i;
|
||||
for (i = 0; i < 360 * (r / 10); i++)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user